Sunteți pe pagina 1din 9

Curso: Investigacin de Operaciones II

Ing. Eduardo Lpez Sandoval


Manual de uso de P4
I. Informacin preliminar

En P4, los modelos de programacin dinmica se deben ingresar en lenguaje VISUAL BASIC, para lo cual se debe tener en cuenta
las siguientes consideraciones:

1. Definicin de mdulo:

Cada modelo de programacin dinmica se graba en un MODULO, el


cual est compuesto por:

Una Zona General, para que el usuario declare


obligatoriamente variables, vectores y matrices que el
modelo emplear. Esto es posible porque en la zona
General aparece por defecto la clusula Option Explicit.
Un conjunto de Subrutinas (Sub), cada una de ellas
representa una parte del modelo (anlogas a las divisiones
que compone la interfaz de OPTIDIN).

2. Declaracin de variables, vectores y matrices:

Se efectan en la Zona General del Mdulo empleando la sentencia DIM y separadas por una coma. Por ejemplo, si desea declarar
las variables M y N; un vector llamado PESO de 6 elementos y una matriz llamada UTILIDAD de 10 filas por 5 columnas:

DIM M, N, PESO(1 To 6), UTILIDAD(1 To 10, 1 To 5)

3. Sentencias Selectivas:

Son tres: simples, dobles y mltiples.

Selectiva simple Selectiva mltiple


Sintaxis: Ejemplo: Sintaxis (para 4 selecciones) Ejemplo:

IF condicin lgica THEN IF d = 0 THEN IF condicin lgica 1 THEN IF d = 0 THEN


Instruccin 1 M=1 Instruccin 1 M=M+1
Instruccin 2 N=2 Instruccin 2 ELSEIF d = 1 THEN
END IF M=M+3
END IF ELSEIF condicin lgica 2 THEN ELSEIF d = 2 THEN
Selectiva doble Instruccin A M=M+5
Sintaxis: Ejemplo: Instruccin B ELSE
M=M+7
IF condicin lgica THEN IF d = 0 THEN ELSEIF condicin lgica 3 THEN END IF
Instruccin 1 M=1 Instruccin x
Instruccin 2 N=2 Instruccin y
ELSE
ELSE M=3 ELSE
Instruccin A N=4 Instruccin M
Instruccin B END IF Instruccin N

END IF END IF
4. Inclusin de comentarios en un modelo.

El modelador puede incluir comentarios en cualquier parte del modelo, los cuales no son tomados en cuenta por el compilador de
VISUAL BASIC. Para ello se emplea la sentencia REM o un apstrofe. Los comentarios aparecen de color verde, por ejemplo:

Rem ESTE ES UN COMENTARIO CON LA INSTRUCCIN REM


EN CAMBIO ESTE COMENTARIO SE HIZO CON UN APOSTROFE

5. Errores ms comunes que pueden ocurrir al ejecutar un modelo en P4.

Cuando aparezca un mensaje de error, hay que hacer clic en el botn Debug que aparece en dicho mensaje. De esa manera, Visual
Basic seala la lnea que origina el error con fondo amarillo.

Variable no definida: En ese caso, Visual Basic seala la variable, vector o matriz que no se ha definido. Solucin: Ir a la Zona
General del Mdulo y declarar la variable, vector o matriz no definida (sentencia DIM).
Subndice fuera de rango: Esto sucede cuando el vector o la matriz no tiene el tamao suficiente para asignarle todos los datos
que necesita. Solucin: Ir a la Zona General del Mdulo y aumentar la cantidad de filas si se trata de un vector o la cantidad de
filas y columnas si se trata de una matriz. Asimismo, revisar si la cantidad de datos que debe ir en cada vector o matriz es la
correcta.
If Then sin End If: Sucede cuando se omite la lnea End If cuando se usa If Then. Solucin: Incluir End If en la parte del modelo
donde se est usando If Then.

6. Procedimientos y Funciones ms usados en P4:

Procedimiento FILLARRAY: Permite cargar un vector o una matriz con datos. Su sintaxis es la siguiente:

Call FILLARRAY(vntArray, vntData, index1 [, index2] )

o vntArray: Obligatorio. El nombre del vector o de la matriz.


o vntData: Obligatorio. Los datos que debern cargarse en el vector o matriz. Estos datos deben estar expresados
entre comillas llaves y separados por una coma.
o index1: Obligatorio. Si se trata de un vector, indica a partir de qu ndice se debe asignar el primer dato. Si se
trata de una matriz, indica a partir de qu ndice de la fila se debe asignar el primer dato.
o index2: Solamente se emplea si se trata de una matriz. Indica a partir de qu ndice de la columna se debe
asignar el primer dato.

Ejemplo: Si Ud. ha dimensionado un vector: Dim Peso(0 To 4); entonces:

Call FILLARRAY(Peso, {13, 10, 12, 15, 11}, 0) equivale a las siguientes instrucciones:

Peso(0) = 13
Peso(1) = 10
Peso(2) = 12
Peso(3) = 15
Peso(4) = 11

Funcin IVALSET: Permite llenar un conjunto numrico, especificando lmite inferior, lmite superior e incremento. Su
sintaxis es la siguiente:

IVALSET( vntLbound, vntUbound[, vntIncrement] )

o vntLbound: Obligatorio. Es el lmite inferior.


o vntUbound: Obligatorio. Es el lmite superior.
o vntIncrement: Opcional: Si se omite, P4 considera incrementos de 1 en 1.

Ejemplos:

IvalSet(0,5) IvalSet(0,5,1) retorna "{0,1,2,3,4,5}"


IvalSet(18,10,-2) retorna "{18,16,14,12,10}"
IvalSet(2,7,1.5) retorna "{2,3.5,5,6.5}"

7. La constante BIGM:

2
Representa un nmero muy grande (3.4 x 1038), el cual se emplea para penalizar un contorno que no se desea como
solucin. Si se trata de un modelo de maximizacin, el contorno se castiga con un nmero muy negativo: f(s) = BIGM. Si
se trata de un modelo de minimizacin, el contorno se castiga con un nmero muy grande: f(s) = BIGM.

8. Cargar P4 una vez instalado.

Hacer clic en el cono P4 que aparece en la pestaa complementos:

Aparecer el mensaje Do you want to load P4 now?. Hacer clic en Aceptar: Aparece el mensaje de bienvenida:

Hacer clic en Aceptar. Usted deber trabajar en la ventana que dice OUTPUTS:

3
II. Descripcin de la barra de conos de P4.

Esta barra aparece una vez que se ha cargado P4 en Excel:

Grabar modelo
como
Ayuda
Nuevo modelo
Resolver modelo
Abrir modelo

Grabar modelo Generar Mostrar el editor


estados Visual Basic

III. Cmo crear y grabar un nuevo modelo en P4

1. Una vez cargado P4 en Excel, en el archivo Outputs, hacer clic en el cono New Model de la barra de conos de P4:
cono New Model

Barra de conos de P4

2. Aparece un cuadro de dilogo en el cual se deber especificar:

o Nmero de variables de estado (NSV): Puede ir de 1 a 5 variables de estado (por defecto: 2)


o Nmero de restricciones (NCT): Se especifica el nmero de restricciones del modelo (por defecto: 2)
o Funcin de retorno: Por defecto, es una funcin aditiva: Rd(s) = ad(s) + f(sn), la cual es la ms usada; pero
puede tambin ser multiplicativa, maximizadora o minimizadora.
o Ecuacin recursiva: Que puede ser maximizar: maxim(Rd(s)) o minimizar (por defecto): minim(Rd(s))

Luego, clic en OK:

3. Aparecen a continuacin la ventana de entorno Visual Basic, la cual muestra el mdulo en donde se programar el modelo.
4
4. A continuacin, se recomienda grabar el modelo creado. Para ello, deber regresar a Excel, archivo Otuputs, y hacer clic en
el cono Save model de la barra de conos de P4.

Archivo
Outputs

cono: Save
Model

5. Aparece un cuadro de dilogo en el cual se especifica la ruta y el nombre del archivo que representa al modelo. Slo
escriba el nombre, P4 por defecto asigna la extensin (.BAS), luego hacer clic en el botn Guardar

6. Se recomienda grabar peridicamente el modelo, para ello simplemente hacer clic en el cono Save Model (repetir
solamente el paso 4)

5
Algunos ejemplos modelados en P4
Problema de la alforja: Se dispone de un camin de 10 t de capacidad para trasladar 4 bultos. Se desea determinar los bultos a trasladar de
manera que se maximice el valor total que se traslada:

Bulto Nro. 1 2 3 4
Peso ( t ) 3 6 7 5
Valor (Miles de $) 7 16 19 15

Option Explicit
'Dim 'list of new variables
Dim PESO(1 To 5), VALOR(1 To 5)
Sub Preliminary_Definitions()
Call FILLARRAY (PESO, "{3, 6, 7, 5}", 1)
Call FILLARRAY (VALOR, "{7, 16, 19, 15}", 1)
End Sub
Sub Economic_Return()
ad(s) = d * VALOR(s1)
End Sub
Sub Model_Structure()
NSV = 2
NCT = 2
End Sub
Sub Starting_State()
s1 = 1
s2 = 10
End Sub
Sub Decision_Set()
DS = "{0,1}"
End Sub
Sub Transition_Function()
sn1 = s1 + 1
sn2 = s2 - d * PESO(s1)
End Sub
Sub State_Constraints()
Ct1 = (sn1 <= 5)
Ct2 = (sn2 >= 0)
End Sub
Sub Return_Function()
Rd(s) = ad(s) + f(sn)
End Sub
Sub Recursive_Equation()
f(s) = maxim(Rd(s))
End Sub
Sub Boundary_Conditions()
f(s) = 0
End Sub

6
Problema de asignacin de recursos: Se tienen 4 proyectos de inversin y un presupuesto de 8 millones. La utilidad en cada proyecto (en
millones de $) se muestra a continuacin. Se debe determinar cunto se debe invertir en cada proyecto, si slo se invierte en mltiplos de
milln.
Cantidad a invertir (En millones de $)
Proyecto
0 1 2 3 4 5 6 7 8
1 0 3 7 10 12 13 14 14 14
2 0 1 2 4 8 13 17 19 20
3 0 2 4 6 8 10 12 14 16
4 0 1 3 6 9 12 14 16 17

Option Explicit
'Dim 'list of new variables
Dim UTILIDAD(1 To 5, 0 To 8)
Sub Preliminary_Definitions()
Call FILLARRAY(UTILIDAD, "{ {0,3,7,10,12,13,14,14,14} , {0,1,2,4,8,13,17,19,20} , {0,2,4,6,8,10,12,14,16} ,
{0,1,3,6,9,12,14,16,17} }", 1, 0)
End Sub
Sub Economic_Return()
ad(s) = UTILIDAD(s1,d)
End Sub
Sub Model_Structure()
NSV = 2
NCT = 2
End Sub
Sub Starting_State()
s1 = 1
s2 = 8
End Sub
Sub Decision_Set()
DS = IVALSET(0, 8)
End Sub
Sub Transition_Function()
sn1 = s1 + 1
sn2 = s2 - d
End Sub
Sub State_Constraints()
Ct1 = (sn1 <= 5)
Ct2 = (sn2 >= 0)
End Sub
Sub Return_Function()
Rd(s) = ad(s) + f(sn)
End Sub
Sub Recursive_Equation()
f(s) = maxim(Rd(s))
End Sub
Sub Boundary_Conditions()
f(s) = 0
End Sub

7
Problema de carga de bultos: Se dispone de un camin de 10 t de capacidad para trasladar 4 tipos de bultos. Se desea determinar cuntos
bultos de cada tipo se van a trasladar de manera que se maximice el valor total que se traslada:
Tipo de bulto 1 2 3 4
Peso ( t ) 3 6 7 5
Valor (Miles de $) 7 16 19 15

Option Explicit
Dim PESO(1 To 5), VALOR(1 To 5)
Sub Preliminary_Definitions()
Call FILLARRAY (PESO, "{3, 6, 7, 5, 0}", 1)
Call FILLARRAY (VALOR, "{7, 16, 19, 15, 0}", 1)
End Sub
Sub Economic_Return()
ad(s) = d * VALOR(s1)
End Sub
Sub Model_Structure()
NSV = 2
NCT = 2
End Sub
Sub Starting_State()
s1 = 1
s2 = 10
End Sub
Sub Decision_Set()
DS = IVALSET(0,10)
End Sub
Sub Transition_Function()
sn1 = s1 + 1
sn2 = s2 - d * PESO(s1)
End Sub
Sub State_Constraints()
Ct1 = (sn1 <= 5)
Ct2 = (sn2 >= 0)
End Sub
Sub Return_Function()
Rd(s) = ad(s) + f(sn)
End Sub
Sub Recursive_Equation()
f(s) = maxim(Rd(s))
End Sub
Sub Boundary_Conditions()
f(s) = 0
End Sub

8
Programa de produccin e inventario: La demanda de un artculo para los prximos 4 meses es de 900, 800, 1000, 1200 unidades
respectivamente. Los costos unitarios de produccin son de 2, 3, 4 y 6 ($) respectivamente, con una capacidad normal de produccin de 900
unidades. Dicha capacidad puede extenderse hasta en 200 unidades, para los cuales los costos de produccin son 2.5, 5, 6.5 y 8 ($)
respectivamente. La produccin se efecta en mltiplos de 100 unidades. El inventario inicial es nulo y se desea ese mismo nivel para fines del
cuarto mes. La capacidad de almacenamiento es de 300 unidades y el costo de almacenamiento es nulo. Determine el programa ptimo de
produccin que satisfaga la demanda mensual y minimice los costos de produccin y de inventario.
Option Explicit
Dim DEMANDA(1 To 5), CUN(1 To 5), CUE(1 To 5)
Sub Preliminary_Definitions()
Call FILLARRAY(DEMANDA, "{900,800,1000,1200}", 1)
Call FILLARRAY(CUN, "{2, 3, 4, 6}", 1)
Call FILLARRAY(CUE, "{2.5, 5, 6.5, 8}", 1)
End Sub
Sub Economic_Return()
If d <= 900 Then
ad(s) = d * CUN(s1) + 0*sn2
Else
ad(s) = 900 * CUN(s1) + (d - 900) * CUE(s1) + 0*sn2
End If
End Sub
Sub Model_Structure()
NSV = 2
NCT = 2
End Sub
Sub Starting_State()
s1 = 1
s2 = 0
End Sub
Sub Decision_Set()
DS = IVALSET(0, 1100, 100)
End Sub
Sub Transition_Function()
sn1 = s1 + 1
sn2 = s2 + d DEMANDA(s1)
End Sub
Sub State_Constraints()
Ct1 = (sn1 <= 5)
Ct2 = (sn2 >= 0 And sn2 <= 300)
End Sub
Sub Return_Function()
Rd(s) = ad(s) + f(sn)
End Sub
Sub Recursive_Equation()
f(s) = minim(Rd(s))
End Sub
Sub Boundary_Conditions()
If s2 = 0 Then
f(s) = 0
Else
f(s) = BigM
End If
End Sub

S-ar putea să vă placă și