Gusek - Introducción
Gusek - Introducción
Gusek - Introducción
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
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)
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
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
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
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.
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.
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
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.
Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Paso 3: Agregar función objetivo
Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Resultados Paso 3: Verificar todos los resultados
Optimización Ing. Ricardo Fernando Otero - Pregrado Ingeniería Industrial – Pontificia Universidad Javeriana Sede Bogotá
Resultados Paso 4: Verificación del cumplimiento de
restricciones.
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á