Sei sulla pagina 1di 29

Gusek: Instalación y primer modelo

Ing. Ricardo Fernando Otero, MSc

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Gusek
 Programa gratuito que permite modelar de forma compacta
o explícita los modelos de programación lineal.
 Resuelve los modelos, usando el método simplex revisado
(movimiento por los vértices).
 Para su instalación
 Enlace: http://gusek.sourceforge.net/gusek.html#2
 Deben descomprimir el archivo.zip, generando la carpeta de
gusek descomprimida. No funciona si entran dando doble click
sobre el archivo .zip.
 Para abrir el programa, dar doble click sobre gusek.exe
 Si no logran instalarlo
 En este enlace podrán correr los modelos en línea: http://online-
optimizer.appspot.com

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Estructura General
MODELO DATOS POST-PRO

• Elementos de los conjuntos


o valores de los parámetros • Uso de las variables en la
• Expresiones matemáticas solución óptima para
que representan todas las • Deben estar separados del obtener de manera directa
características del modelo para dar información de interés.
problema. flexibilidad
• Permite verificar que el
• Debe ser general y flexible • Usualmente se cargan modelo esté bien
desde fuentes externas: construido.
excel, csv, txt, etc.

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Sintaxis
Sintaxis de programación
Conjuntos • Cada línea debe terminar con punto y coma.
• El programa distingue entre minúsculas y mayúsculas.
Parámetros • El operador Y se expresa &&. El operador O se expresa ||. El
operador lógico de igualdad usado para comparar es ==. El
operador lógico de diferente usado para comparar es !=.
Variables • Sumatorias: sum{i in I}x[i]. Donde i es el subíndice que va a
variar sobre el conjunto I.
• Para todo: se declaran después del nombre de la restricción.
Función objetivo CumplirDemanda{j in J}. Para todo j que pertenece en J.
• Se puede condicionar los elementos tomados del conjunto
Restricciones usando los dos puntos. {i in I, j in J, k in K: i<=4 && j!=10}
• El comando card(A) obtiene el número de elementos del
conjunto
Datos • Comentarios de una sola línea: texto seguido de #.
• Comentario de varias líneas: texto entre /* y */

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
 set – Conjuntos
 Es posible asignar los elementos del conjunto al momento de declararlos o en la
sección datos.
 Pueden depender de conjuntos.
 Pueden crearse a partir de otros conjuntos usando operadores como union, inter, diff,
cross.
 Ejemplos:
 Al inicio del modelo: los elementos deben ir entre llaves, los nombres deben estar entre
comillas. Los dos puntos sirven para generar secuencias desde el primer número hasta el
segundo. El comando by representa que los elementos seleccionados serán de dos en dos.
 set A := {1 ,2,3}, set B := 1..10, set E:={‘A’, ’B’, ’C’}, set L:= 1..10 by 2;
 set A:= B union (C diff D)

 En la sección datos: los elementos deben estar separados por espacio.


 set A:= 1 2 3, set E:= A B C;

 Set – Subconjuntos
 En esencia son conjuntos. Se obtienen al seleccionar los elementos de un conjunto.
 Ejemplos:
 set A:= {i in B: i<= 5 || i>= 10}
 Set CON{i in A}:={i+1,i+2}

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Componentes del modelo
 param – Parámetros
 Pueden tener un solo valor o estar subscrito a uno o más conjuntos.
 Sus valores pueden declararse al inicio del modelo o en la sección
datos.
 Pueden crearse a partir de otros parámetros o conjuntos.
 Puede usarse condicionales. Esto es útil especialmente para crear
parámetros binarios
 Ejemplos
 param presupuesto=5;
 param demanda{j in Ciudades};
 param dobledemanda{j in Ciudades}:=2*demanda[j];
 Param Binario{j in Ciudades}:= if(demanda[j]<=500) then 1 else 0

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Componentes del modelo (2)
 var – Variables
 Pueden tomar un solo valor o estar subscrito a uno o más conjuntos.
 Después de declarar la variable, es posible especificar su naturaleza y
fronteras.
 Ejemplo
 var x >=0;
 var y{i in I} integer >=0;
 var z{p in P, d in D} binary;
 FO – Función objetivo
 Debe tener un nombre que tiene que estar seguido de ‘:’
 Debe decidirse el criterio de elección: maximizar o minimizar.
 Ejemplo
 minimize CostoTotal: sum{i in I, j in J}c[i,j]*x[i,j]

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Componentes del modelo (3)
 CO – Restricciones
 Antes de cada restricción debe incluirse s.t.
 El para todo debe ir después del nombre de la restricción.
 Después del para todo debe ir ‘:’
 Se puede condicionar los valores de los subíndices usando operadores
lógicos.
 Las restricciones también pueden presentarse de manera explícita,
refiriéndose al elemento del conjunto entre corchetes.
 Después de agregar TODAS las restricciones debe agregarse el comando
solve;
 Ejemplos:
 s.t. RestriccionDemanda{j in Ciudades}: x[j]>=d[j];
 s.t. Restriccion2{i in I, k in K, m in M:i<=4 && k!=10}: sum{j in J}x[i,j,k,m]>=100;
 s.t. ValorMaximo: sum{i in I}x[i]<=200;
 s.t. Restr: x[1]+x[2]<=10;
 s.t. Restr: x[‘A’]-x[‘B’]=20;

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Datos
 Antes de agregar los datos del modelo, es necesario agregar el
comando data;
 Conjuntos:
 Si van a ser declarados en este apartado, los elementos deben estar separados por
espacio.
 Los nombres no deben tener comillas, no pueden tener espacios ni tildes.
 set A: Ciudad1, Ciudad2, Ciudad3;
 set J: 1 2 3 4 5;
 Si los elementos del conjunto no son números, no se pueden operar ni realizar
comparaciones del estilo mayor o menor.
 Parámetros
 De único valor
 param Pres:= 10000;
 Subscritos en un subíndice. Debe crearse una columna con los elementos del conjunto y
otra con los valores del parámetro asociado al elemento del conjunto.
 param Demanda:=
 1 100
 2 200
 3 300

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Componentes del modelo (4)
 Parámetros
 Subscritos en dos subíndices. Debe crearse una columna y una fila con los
elementos del conjunto, formando una matriz. Los valores del parámetro
irán en la posición respectiva de la matriz. El primer subíndice introducido al
declarar el parámetro representa las filas, y el segundo las columnas.
 A diferencia de los anteriores ejemplos, después del nombre del conjunto
sólo debe ir ‘:’ y después de los elementos del parámetro declarado en las
columnas debe ir ‘:=‘.
 param Costo: 1 2 3:=
 1 20 30 40
 2 10 15 34
 3 30 25 42;

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Componentes del modelo (4)
 Parámetros
 Subscritos en tres subíndices. Deben introducirse por partes. En particular, se deberá
crear una matriz para cada elemento del conjunto restante.
 En este caso, después del nombre del conjunto debe ir ‘:=’, después de los elementos
del parámetro debe ir ‘:’ y después de los elementos de la columna debe ir ‘:=‘. Note
que el ‘;’ sólo va hasta el final de la declaración de todos los valores.
 Los asteriscos representan los conjuntos que se van a leer con la matriz.
 Ejemplo. El parámetro Costo tiene tres subíndices i en I, j en J y k en K. En este caso, I
sólo tiene los elementos 1 y 2, mientras que J y K tiene los elementos 1, 2 y 3.
 param Costo:= [1,*,*]: 1 2 3:=
 1 20 30 40
 2 10 15 34
 3 30 25 42
 [2,*,*] : 1 2 3:=
 1 40 90 70
 2 40 55 34
 3 40 65 62;
 Subscritos en 4 o más subíndices. Al igual que el ejemplo anterior, deben usarse
tantas matrices como sea necesario junto con los asteriscos.

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Ejemplo: Modelo en Gusek
Conjuntos

Variables

Parámetros
Función Obj.
Restricciones

Conjuntos
Parámetro 0 sub

Parámetro 2 sub

Parámetro 3 sub

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Para resolver el modelo – Paso 1

El nombre del archivo debe


terminar en .mod

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Para resolver el modelo – Paso 1
 Resolver: el símbolo de dos pies ejecuta el modelo.
 Para mostrar los resultados se puede usar la función
display.
 Debe ir después del comando solve pero antes de data.
 Sintaxis: display NOMBREOBJETO;
 Permite conocer el valor de: variables, conjuntos, parámetros,
función objetivo o restricciones:
 Ejemplo: display x;
 Ejemplo: display Plantas; Los nombres deben ser los
 Ejemplo: display costo; mismos a los declarados en
el modelo.
 Ejemplo: display RestriccionDemanda;
 Ejemplo: display FuncionObjetivo;
 Si se desean mostrar varios elementos al tiempo, los nombres
deben separarse con comas.

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Salida en Gusek

Reporte de errores o
advertencias

Estado del Modelo. Debe


siempre decir: Optimal
Solution Found

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Para resolver el modelo – Alternativa

Resolver
modelo

Activar para
ver la
solución

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Información sobre errores
 Errores comunes
 Usar el mismo nombre para una variable, conjunto, restricción, parámetro, etc.
 No poner el tipo de variable. >=0, integer, binary, etc.
 Confundir filas con columnas al introducir los datos.
 No escribir solve después de las restricciones o data antes de introducir los datos
del problema.
 Warnings
 No son errores, son tan sólo advertencias para seguir con las buenas
prácticas de modelación.
 Reporte de errores
 Gusek siempre presenta la línea de código que presenta el error de
modelación.
 Ejemplo: Peces.mod:26: colon missing where expected, en este caso, el error está en la
línea 26 del código.

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Posibles Errores
 Posibles errores del estado del modelo
 PROBLEM HAS NO DUAL FEASIBLE SOLUTION
 Explicación: Alguna de las variables se está yendo al infinito.
 Solución: Agregar restricción que acote la variable. Podría faltar la no negatividad.
 PROBLEM HAS NO PRIMAL FEASIBLE SOLUTION
 Explicación: El modelo es infactible. Algunas restricciones se contradicen por lo que no es posible satisfacer
todas las restricciones.
 Solución: Agregar las restricciones una por una, hasta identificar la restricción que está mal formulada.
 SYNTAX ERROR IN LITERAL SET
 Podría estar declarado un subíndice dos veces. Declarado en la sumatoria y en un para todo.
 El subíndice podría estar subscrito en un conjunto que no existe

 Posibles errores de la sintaxis del modelo


 Param B[2,5] OUT OF BOUNDS
 Explicación: El parámetro con esos subíndices no existe.
 Solución: Identificar por qué el modelo está buscando con los subíndices en valores que no fueron declarados
para el parámetro. Podría ser que se confunde entre filas y columnas.
 Sintaxis error: Existe un error en la escritura del modelo, puede ser: falta de un punto y coma, falta
de un signo *, confundir llaves con corchetes o paréntesis.
 Colon missing where expected: Hace falta introducir los dos puntos : en el modelo.

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Buenas prácticas de modelamiento

Ejemplo en Gusek
Ejemplo
 Cierta empresa fabrica dos productos: A y B. Para
fabricar cada producto A se requieren 2kg de aditivo c
y 3kg de aditivo d. Para fabricar cada producto B se
requieren 1.5kg de aditivo c y 2kg de aditivo d. La
utilidad por cada producto A es $25 y por cada
producto B es $35. En total sólo se dispone de 30kg del
aditivo c y 50kg del aditivo d. ¿Cuántos unidades de
cada producto se debe fabricar?

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Modelo matemático
Conjuntos
𝑃𝑅𝑂𝐷𝑈𝐶𝑇𝑂𝑆: Productos que fabrica la empresa.
𝐴𝐷𝐼𝑇𝐼𝑉𝑂𝑆: Aditivos necesarios para fabricar los productos.
Variable
𝑥𝑖 : Unidades de productos i del conjunto PRODUCTOS a fabricar.
Parámetros
𝑈𝑖 : Utilidad en $ por cada producto vendido i del conjunto PRODUCTOS.
𝐿𝑗 : Cantidad en Kg disponible del aditivo j del conjunto ADITIVOS.
𝑅𝑖𝑗 : Cantidad en Kg del aditivo j del conjunto ADITIVOS necesario para fabricar una unidad del producto i del conjunto
PRODUCTOS.
Modelo
𝑀𝑖𝑛 𝑈𝑖 𝑥𝑖
𝑖∈𝑃𝑅𝑂𝐷𝑈𝐶𝑇𝑂𝑆

Sujeto a:

𝑅𝑖𝑗 𝑥𝑖 ≤ 𝐿𝑗 ∀𝑗 ∈ 𝐴𝐷𝐼𝑇𝐼𝑉𝑂𝑆
𝑖∈𝑃𝑅𝑂𝐷𝑈𝐶𝑇𝑂𝑆

𝑥𝑖 ≥ 0 ∀𝑖 ∈ 𝑃𝑅𝑂𝐷𝑈𝐶𝑇𝑂𝑆

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Paso 1: Probar la sintaxis y parámetros
Si son palabras deben ir
entre comillas

No negatividad.

El conjunto que se declare de


primero representa las filas y el
segundo las columnas.

 Agregar sólo variables y parámetros.


 No agregar restricciones.
 Fijar la función objetivo en 0.
 Correr el modelo para verificar que la sintaxis esté bien.
 Usar display con cada conjunto y parámetro para asegurarse que se ha ingresado
correctamente.

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Resultados Paso 1: Verificación de sintaxis

No hay ningún
error de sintaxis.

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Resultado Paso 1 – Verificación de Parámetros y
Conjuntos

No hay ningún
error de sintaxis.

Los elementos de los conjuntos


son los declarados.

Los valores de los parámetros


son correctos.

 Recomendaciones:
 Recordar que los warnings no son errores de modelación.
 Especialmente en parámetros de varios subíndices, verificar que los valores de los parámetros no
estén invertidos. Para esto, recordar que al momento de declarar el parámetro, el primer valor
corresponde a las filas y el segundo a las columnas.

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Paso 2: Agregar las restricciones

 Mantener la función objetivo en 0.


 Agregar una a una las restricciones.
 Usar display para garantizar que se están cumpliendo las restricciones.
 Al mostrar la restricción, Gusek organiza la ecuación para que queden sólo variables en el lado izquierdo y sólo números
en el lado derecho. La función display muestra sólo el lado izquierdo de la restricción después de organizar la ecuación.
 Si se agregan todas las restricciones al tiempo, será más difícil identificar los errores de modelación.

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Resultado Paso 2 – Verificar restricciones
No hay ningún
error de
sintaxis.

 Verificar que se cumplan las restricciones


 En ambas restricciones es 0, por lo que se cumple el límite máximo Lj.
 En este caso se usó display para mostrar el parámetro y así comparar con el valor de la
parte izquierda de la ecuación de la restricción.

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Paso 3: Agregar función objetivo

 Agregar la función objetivo.


 Usar display para mostrar: función objetivo, restricciones y variables.
 Nuevamente se tendrá que verificar el cumplimiento de todas las restricciones. En el caso de que alguna
restricción no se cumpla, o que el modelo sea infactible, debe agregarse las restricciones una a una para
identificar el error. Puede ser útil marcar la restricción como comentario para que no se ejecute en el modelo.

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Resultados Paso 3: Verificar todos los resultados

 Si en este momento, no hay errores y todas las restricciones se cumplen. Se ha llegado a la


solución óptima del problema.
 En algunos casos, para profundizar en el análisis de las restricciones, puede usarse la
solución de las variables para verificar el cumplimiento de las ecuaciones.

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Resultados Paso 4: Verificación del cumplimiento de
restricciones.

Código del Post-


procesamiento

Salida del Post-Procesamiento

 Es posible que un problema no tenga errores de sintaxis y que Gusek de un resultado, sin embargo, puede
estar modelado.
 Usando ciclos for y condicionales, se puede usar la solución del modelo para garantizar que una a una las
restricciones fueron creadas de manera correcta.
 El símbolo & sirve para concatenar (unir) texto con valores de variables, el “\n” da enter.
 Debe usarse el comando printf. El detalle de la explicación de este comando está en la guía 2.

Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá

Potrebbero piacerti anche