PracticasOrdenadorLINGO

Anuncio
Desarrollar un modelo Lingo
Para desarrollar un modelo de optimización en
Lingo hay que especificar:
• Función Objetivo
M ax(M in) = COST O1 ∗ V ARIABLE1
+ COST O2 ∗ V ARIABLE2;
Variables: Los nombres de las variables en Lingo deben
empezar con un carácter alfabético, seguido de alfabéticos, numéricos o , hasta un máximo de 32 caracteres.
• Restricciones
COEF 11 ∗ V AR1 <= DISP ON IBILIDAD1;
COEF 21 ∗ V AR1 + COEF 22 ∗ V AR2 <= DISP 2;
o bien
COEF 11 ∗ V AR1 >= RECU RSO1;
COEF 21 ∗ V AR1 + COEF 22 ∗ V AR2 >= REC2;
• Comentarios: Comenzarán con el signo admiración “!” y terminarán con el signo de puntuación “;”
Lingo no distingue entre letras en mayuscula o
en minuscula.
Resolución del modelo
Para resolver el modelo, seleccionar SOLVE del
comando Lingo.
Lingo comenzará a compilar el modelo. Si el
modelo no pasa la compilación, aparecerá un
mensaje error.
Ejemplo
Max = 2 ∗ x + y;
x <= 3;
3x + 2 ∗ y <= 5;
Aparecerá:
Ventana: LINGO Error Message
Error Code: 11
Help
OK
Error Tex:
Invalid input. A syntax has occurred.
3] 3x + 2 ∗ y <= 5;
Si no ha habido ningún error aparecerá en pantalla LINGO Solver Status.
Max 2x + y
s. a.
≤3
x
3x + 2y ≤ 5
x, y ≥ 0
que introduciendo variables de holgura, queda
x
+ s1
3x + 2y
=3
+ s2 = 5
x, y, s1, s2 ≥ 0
s1
1
s2
0
s2
3
2
zj
0
0
zj − cj −2 −1
s1
0 −2/3
0
0
0
1
1
0
0
−1/3
x
zj
zj − cj
0
0
0
1/3
2/3
2/3
s1
x
1
1
2
0
y
0
2/3
4/3
1/3
3
5
0
4/3
5/3
10/3
LINGO solver Status
SOLVER STATUS
Model Class Muestra el tipo de modelo (LP:
Programación Lineal; ILP: Programación Lineal
Entera,...)
State Muestra la situación actual de la solución (Global Opt: Óptimo global; Infeasible: No
factible; Unbounded: No acotada;...)
Objective Valor de la función objetivo.
Infeasibility Cantidad por la que no se verifican
las restricciones.
Iterations Número de iteraciones necesarias para su resolución.
VARIABLES Muestra el número total de variables del modelo. Enteras y no Lineales.
CONSTRAINTS Muestra el número total de
restricciones del modelo y cúales de ellas son no
lineales.
NONZEROS Muestra el número de coeficientes no nulos en el modelo y cúales de ellos aparecen en variables no lineales.
GENERATOR MEMORY USED(K) Lista
la cantidad de memoria.
ELAPSED RUNTIME (hh:mm:ss) Muestra
el tiempo total usado para generar y resolver el
modelo.
Solution Report
Esta pantalla contiene los detalles de la solución
del problema.
Global optimal solution found
Objective value: 3.333333
Total solver iterations: 2
Variable
X
Y
Value
1,666667
0,0000000
Reduced Cost
0,0000000
0,3333334
Row
1
2
3
Slack or Surplus
3,333333
1,333333
0,0000000
Dual Price
1,000000
0,0000000
0,6666667
Interpretar la Solución
Costo reducido: Indican cuánto tendrı́a que
mejorar cada uno de los coeficientes de la función objetivo antes de que la correspondiente
variable de decisión pueda tomar valor positivo
en la solución óptima.
Holgura o excedente: Nos dice lo próximo que
estamos de satisfacer una restricción. Si una
restricción es violada, como en una solución infactible, el valor de estas variables será negativo.
Precios duales: Mejora en el valor de la función
objetivo por cada incremento unitario en el lado derecho de una restricción. En un problema
de maximizar el precio dual es el mismo que el
precio sombra. En un problema de minimizar el
precio dual es el negativo del precio sombra.
Ejemplos
Max Z = 3X1 + 2X2
s.a. 2X1 + X2 ≤ 2
3X1 + 4X2 ≥ 12
Xi ≥ 0
Max Z = 36X1 + 30X2 − 3X3 − 4X4
s.a. X1 + X2 − X3 ≤ 5
6X1 + 5X2 − X4 ≤ 10
Xi ≥ 0
Ejemplo 1
Max 3x1 + 2x2
s. a.
2x1 + x2 ≤ 2
3x1 + 4x2 ≥ 12
x, y ≥ 0
que introduciendo variables de holgura y artificiales, queda
2x1 + x2 + s1
=2
3x1 + 4x2
− s2 + A1 = 12
x1 , x 2 , s 1 , s 2 , A1 ≥ 0
Fase I: Max - A1
x2
1
s1
1
s2
0
A1
3
4
zj
−3 −4
zj − cj −3 −4
x2
2
1
0
0
0
1
−1 1
12
1 −1 −12
1
0
0
0
2
s1
x1
2
A1
−5
zj
5
z j − cj 5
0
0
0
A1
0
−4 −1 1
4
1 −1
4
1
0
2
4
−4
Ejemplo 2
Max 36x1 + 30x2 − 3x3 − 4x4
s. a. x1 + x2 − x3 ≤ 5
6x1 + 5x2 − x4 ≤ 10
x1 , x 2 , x 3 , x 4 ≥ 0
que introduciendo variables de holgura, queda
x 1 + x2 − x 3
6x1 + 5x2
+ s1
− x4
=5
+ s2 = 10
x1 , x 2 , x 3 , x 4 , s 1 , s 2 ≥ 0
s1
s2
zj
zj − cj
s1
x1
1
x2
1
6
5
0
0
−36 −30
0
−5/6
x3
−1
x4
0
s1
1
s2
0
0
0
3
−1
−1
0
4
1 /6
0
0
0
1
1
0
0
−1/6
5
10
0
20/6
x1
zj
zj − cj
x4
1
36
0
0
5/6
30
0
−5
0
0
3
−6
−1/6
−6
−2
1
0
0
0
6
1/6
6
6
−1
10/6
360/8
x1
zj
zj − cj
1
36
0
0
20
−10
−1
−12
−9
0
−4
0
1
12
12
0
4
4
5
100
20
!PROBLEMA1;
!Variables de decisión:
X1 = Bizcochos consumidos diariamente,
X2 = Bolas de helado de chocolate consumidas
por dı́a,
X3 = Número de botellas de refresco tomadas
diariamente,
X4 = Porciones de Pastel de queso con piña
por dı́a;
!Función objetivo;
M IN = 0.50∗X1+0.20∗X2+0.30∗X3+0.80∗
X4;
!Restricción de calorı́as;
400∗X1+200∗X2+150∗X3+500∗X4 >= 500;
!Restricción de chocolate;
3 ∗ X1 + 2 ∗ X2 >= 6;
!Restricción de azúcar;
2 ∗ X1 + 2 ∗ X2 + 4 ∗ X3 + 4 ∗ X4 >= 10;
!Restricción de grasa;
2 ∗ X1 + 4 ∗ X2 + X3 + 5 ∗ X4 >= 8;
! Problema 2;
! Variables de decisión:
X1 = Kilos de arroz,
X2 = Kilos de pescado,
X3 = Kilos de verdura;
! Función Objetivo;
M in = 0.70 ∗ X1 + 1.20 ∗ X2 + 0.50 ∗ X3;
! Restricción de calorı́as;
200 ∗ X1 + 300 ∗ X2 + 100 ∗ X3 <= 4000;
! Restricción de proteı́nas;
X1 + 3 ∗ X2 + 2 ∗ X3 >= 3;
!Problema 3;
! Variables de decisión:
X1 = No de sesiones de destilación con Tn,
X2 = No de sesiones de destilación con Ta;
! Función Objetivo;
M ax = 103 ∗ X1 + 110 ∗ X2;
! Restricción referida a la cantidad de Crudo,
C1;
7 ∗ X1 + 10 ∗ X2 <= 1400;
! Restricción referida a la cantidad de Crudo,
C2;
12 ∗ X1 + 8 ∗ X2 <= 2000;
! Restricción referida a la demanda de gasóleo;
8 ∗ X1 + 10 ∗ X2 >= 900;
! Restricción referida a la demanda de gasolina
normal;
6 ∗ X1 + 7 ∗ X2 >= 300;
! Restricciones referidas a la demanda de gasolina super;
5 ∗ X1 + 4 ∗ X2 <= 1700;
5 ∗ X1 + 4 ∗ X2 >= 800;
!Problema 4;
! Variables de decisión:
Xi = Número de empleados que empiezan a
trabajar el dı́a i;
!Función Objetivo;
M in = X1 + X2 + X3 + X4 + X5 + X6 + X7;
! Número de empleados requeridos para el Lunes;
X1 + X4 + X5 + X6 + X7 >= 17;
! Número de empleados requeridos para el Martes;
X1 + X2 + X5 + X6 + X7 >= 13;
! Número de empleados requeridos para el Miércoles;
X1 + X2 + X3 + X6 + X7 >= 15;
! Número de empleados requeridos para el Jueves;
X1 + X2 + X3 + X4 + X7 >= 19;
! Número de empleados requeridos para el Viernes;
X1 + X2 + X3 + X4 + X5 >= 14;
! Número de empleados requeridos para el Sábado;
X2 + X3 + X4 + X5 + X6 >= 16;
! Número de empleados requeridos para el Domingo;
X3 + X4 + X5 + X6 + X7 >= 11;
!Problema 5;
! Variables de decisión:
X1 = Onzas de Brutte Regular vendidas anualmente, (no las producidas inicialmente)
X2 = Onzas de Brutte Luxery vendidas anualmente,(producidas)
X3 = Onzas de Chanelle Regular vendidas anualmente, (no las producidas inicialmente)
X4 = Onzas de Chanelle Luxery vendidas anualmente, (producidas)
X5 = Libras de materia prima compradas;
! Función Objetivo;
M ax = 7 ∗ X1 + (18 − 4) ∗ X2 + 6 ∗ X3 + (14 −
4) ∗ X4 − 3 ∗ X5;
! Horas de laboratorio disponibles;
3 ∗ X2 + 2 ∗ X4 + X5 <= 6000;
! Restricciones referentes a la cantidad de productos disponibles para la venta;
X1 + X2 − 3 ∗ X5 = 0;
!(X1 + X2 = 3X5);
X3 + X4 − 4 ∗ X5 = 0;
!(X3 + X4 = 4X5);
! Limitación de materia prima;
X5 <= 4000;
!Problema 6;
! Variables de decisión:
X1 = Euros invertidos en Atlantic Oil,
X2 = Euros invertidos en Pacific Oil,
X3 = Euros invertidos en Midwest Steel,
X4 = Euros invertidos en Huber Steel,
X5 = Euros invertidos en Bonos gubernamentales;
! Función Objetivo;
M ax = 0,073 ∗ X1 + 0,103 ∗ X2 + 0,064 ∗ X3 +
0,075 ∗ X4 + 0,045 ∗ X5;
!Especificamos la inversión de los 100.000 euros;
X1 + X2 + X3 + X4 + X5 <= 100000;
!No recibir mas del 50 %;
X1 + X2 <= 50000;
X3 + X4 <= 50000;
!Los Bonos deben ser al menos 25 %;
−0,25 ∗ X3 − 0,25 ∗ X4 + X5 >= 0;
!(X5 ≥ 0,25(X3 + X4));
!Inversión en Pacific Oil no puede ser mas del
60 %;
−0,6 ∗ X1 + 0,4 ∗ X2 <= 0;
!(X2 ≤ 0,6(X1 + X2));
!Problema 7;
! Variables de decisión:
X1 =Millones de euros invertidos en Préstamos
personales ,
X2 = Millones de euros invertidos en Préstamos
para automóvil,
X3 =Millones de euros invertidos en Préstamos
para vivienda,
X4 =Millones de euros invertidos en Préstamos
agrı́colas,
X5 =Millones de euros invertidos en Préstamos
comerciales;
! Función Objetivo;
M ax = 0,026 ∗ X1 + 0,0509 ∗ X2 + 0,0864 ∗ X3 +
0,06875 ∗ X4 + 0,078 ∗ X5;
!(0,14(0,9X1)+0,13(0,93X2)+0,12(0,97X3)+
0,125(0,95X4)+0,1(0,98X5)−0,1X1−0,07X2−
0,03X3 − 0,05X4 − 0,02X5);
! Fondos totales;
X1 + X2 + X3 + X4 + X5 <= 12;
! Préstamos agrı́colas y comerciales;
X4 + X5 >= 4,8;
!(40 % de12) );
! Préstamos para viviendas;
−0,5 ∗ X1 − 0,5 ∗ X2 + 0,5 ∗ X3 >= 0;
!(X3 ≥ 0,5(X1 + X2 + X3));
! Razón total de los créditos malos;
0,06 ∗ X1 + 0,03 ∗ X2 − 0,01 ∗ X3 + 0,01 ∗ X4 −
0,02 ∗ X5 <= 0;
0,1X1+007X2+0,03X3+0,05X4+0,02X5
≤ 0,04 ;
!
X1+X2+X3+X4+X5
!Problema 8;
! Variables de decisión:
X1 = Número de unidades para una sola familia,
X2 = Número de unidades para dos familias,
X3 = Número de unidades para tres familias,
X4 = Número de áreas recreativas;
! Función Objetivo;
M ax = 10000 ∗ X1 + 12000 ∗ X2 + 15000 ∗ X3;
! Viviendas de una sola familia (Ap. 1);
0,5 ∗ X1 − 0,5 ∗ X2 − 0,5 ∗ X3 >= 0;
!(X1 ≥ 0,5(X1 + X2 + X3));
! Uso del suelo (Ap 2, parte de 3 y texto después
de 4);
2 ∗ X1 + 3 ∗ X2 + 4 ∗ X3 + X4 <= 680;
!(680 es 800 menos el 15 %);
! Áreas recreativas (parte de Ap. 3);
−X1 − 2 ∗ X2 − 3 ∗ X3 + 200 ∗ X4 >= 0;
);
!(X4 ≥ X1+2X2+3X3
200
! Capital;
1000∗X1+1200∗X2+1400∗X3+800∗X4 >=
100000;
! Consumo de agua;
400 ∗ X1 + 600 ∗ X2 + 840 ∗ X3 + 450 ∗ X4 <=
200000;
Análisis de sensibilidad
Despues de resolver el problema, usamos el comando Range del menú LINGO para generar un
informe de rangos para el modelo activo. Tal
informe muestra en qué rango se puede:
• Cambiar un coeficiente en la función objetivo sin que cambien los valores óptimos de las
variables de decisión.
• Cambiar el valor de un recurso o disponibilidad
(coeficiente del lado derecho de una restricción)
sin causar cambios en los valores óptimos de
los precios duales o de los costos reducidos (sin
que cambien las variables básicas, es decir la
solución siga siendo factible, aunque si pueden
cambiar sus valores).
Si aparece el mensaje de error:
Error Code 122: Range reports not possible when range
analysis is disabled
hay que ejecutar previamente el comando Options del menú LINGO, y en General Solver
seleccionar la opción Prices and Ranges en la
lista asociada a Dual Computations.
Ejemplo
En los ejemplos en los que vayamos a solicitar
un Range Report conviene nombrar las restricciones, incluyendo delante de ellas un nombre
entre corchetes, para luego poder identificarlas
facilmente.
[FuncionObjetivo] Max = 20 ∗ A + 30 ∗ C;
[Restriccion1] A <= 60;
[Restriccion2] C <= 50;
[Restriccion3] A + 2 ∗ C <= 120;
El informe que proporciona es
La primera parte titulada Objective Coefficient Ranges incluye en su primera columna
titulada Variable la lista de variables del problema, en la segunda Current Coefficient el
coeficiente actual de cada variable en la función
objetivo, en la tercera Allowable Increase, la
cantidad en que se puede incrementar el coeficiente de cada variable en la función objetivo sin
que cambien los valores de la solución óptima y
la última Allowable Decrease, la cantidad en
que se puede disminuir el coeficiente de cada
variable en la función objetivo sin que cambien
los valores óptimos de las variables.
En nuestro ejemplo, podemos decir que mientras el coeficiente de la variable A en la función
objetivo sea mayor o igual a 15, los valores óptimos de las variables no cambian. El coeficiente
de la variable C puede variar entre 0 y 40.
La segunda parte titulada Right-hand Side Ranges incluye en su primera columna titulada Row
la lista de los nombres de las restricciones del
modelo, en la segunda Current RHS los valores
actuales de los recursos o disponibilidades (coeficiente del lado derecho de las restricciones), y
las siguientes Allowable Increase y Allowable
Decrease, en cuanto los podemos incrementar o disminuir, respectivamente, sin causar un
cambio en los valores óptimos de los precios
duales o costos reducidos.
En nuestro ejemplo, los precios duales y los costos reducidos permanecen constantes si el coeficiente del lado derecho de la primera restricción
está entre 20 y 120, el de la segunda es mayor
o igual que 30 y el de la tercera está entre 60
y 160.
Descargar