Modelos cuantitativos II – para ansiosos
Vimos en la entrada Modelos cuantitativos una breve introducción a este tipo de modelos y planteamos un pequeño ejemplo de los mismos. No vimos la solución al problema en dicha oportunidad, tan solo lo planteamos. En esta oportunidad, y haciendome trampa al solitario, no voy a hablar sobre la teoría tras la solución del problema sino que voy a ir directo a lo jugoso e interesante, el modelo matematico, o mejor dicho, un posible modelo matemático para hallar la solución del problema.
El modelo que a continuación presento está hecho en Glpk y lo probé en la vesión 4.25, pero asumo que dada la sencillez del modelo, cualquier otra versión más o menos reciente debería poder resolverlo sin problemas.
El modelo y su solución se reparten en tres archivos, el modelo propiamente dicho (ej1.mod), los datos de entrada (ej1.data) y la salida o solución (ej1.sol). Archivos que a continuación se transcriben
El modelo – ej1.mod
/* Sets */
set PRODUCTO;
set PLANTA;
/* Parameters */
param Ganancia_por_lote { p in PRODUCTO };
param Horas_necesarias { p in PRODUCTO, h in PLANTA };
param Tiempo_disponible { h in PLANTA };
/* Decision variables */
var x { p in PRODUCTO } >= 0;
/* Objective function */
maximize z: sum {p in PRODUCTO } Ganancia_por_lote[p] * x[p];
/* Constraints */
s.t. supply { h in PLANTA }: sum { p in PRODUCTO } Horas_necesarias[p,h]*x[p] <= Tiempo_disponible[h];
end;
Datos de entrada – ej1.data
data; /* data section */
set PRODUCTO := puerta ventana;
set PLANTA := planta1 planta2 planta3;
param Horas_necesarias : planta1 planta2 planta3 :=
puerta 1 0 3
ventana 0 2 2;
param Ganancia_por_lote :=
puerta 3000
ventana 5000;
param Tiempo_disponible :=
planta1 4
planta2 12
planta3 18;
end;
Salida – ej1.sol
Problem: ej1
Rows: 4
Columns: 2
Non-zeros: 6
Status: OPTIMAL
Objective: z = 36000 (MAXimum)
No. Row name St Activity Lower bound Upper bound Marginal
—— ———— — ————- ————- ————- ————-
1 z B 36000
2 supply[planta1]
B 2 4
3 supply[planta2]
NU 12 12 1500
4 supply[planta3]
NU 18 18 1000
No. Column name St Activity Lower bound Upper bound Marginal
—— ———— — ————- ————- ————- ————-
1 x[puerta] B 2 0
2 x[ventana] B 6 0
La salida mostrada es parcial, ya que el solver da algunos datos más que no veremos en esta oportunidad. Las tres líneas marcadas en negro son las que más nos interesan. La primera de ellas nos dice cual es el valor óptimo alcanzado para la función objetivo, en este caso 36.000, es decir que esa será nuestra ganancia semanal dadas las condiciones y datos de entrada que se especificaron. Las otras dos líneas en negro nos muestran los valores que cada una de las variables debe tomar para alcanzar dicho valor. En este caso, se deberán producir dos lotes de puertas y 6 lotes de ventanas.
Si bien el ejemplo es sencillo es un ejemplo muy representativo de la realidad (a excepción del tamaño del problema) y es una interesante introducción a Glpk.
número de lotes del producto 1 fabricados por semana
número de lotes del producto 2 fabricados por semana
ganancia semanal total al producir éstos productos
y
son las variables de decisión y utilizando la última fila de la tabla, llegamos a la siguiente función objetivo:




Comentarios recientes