Introducción a AMPL para Optimización
Introducción a AMPL para Optimización
Introducción a AMPL
2
Marco general de un generador de modelos
SOLUCIÓN Y
GENERADOR DE MODELOS (AMPL)
RESULTADOS
SOLVER MODELO
(CPLEX) ESPECÍFICO
(Archivo MPS)
2. ¿Cómo Opera AMPL?
Archivo de
Modelo
Lenguaje Solver
Archivo de (Minos / Cplex o
Datos
AMPL Neos Server)
Archivo de
Instrucciones
Salida
Resultados
4
3. ¿Cómo Obtener AMPL?
5
4. ¿Cómo Resolver un Problema Usando AMPL?
Archivo de
Modelo
Lenguaje Solver
Archivo de (Minos / Cplex o
Datos
AMPL Neos Server)
Archivo de
Instrucciones
Archivo de
Contiene los modelos (función objetivo y
Modelo
.mod
restricciones) a usar.
Archivo de
Datos Contiene los datos del problema.
.dat
Archivo de
Modelo
Lenguaje Solver
Archivo de (Minos / Cplex o
Datos
AMPL Neos Server)
Archivo de
Instrucciones
8
4. ¿Cómo Resolver un Problema Usando AMPL?
Lenguaje AMPL
Max F(X)
s.a. gi( X ) bi i I
Comandos de declaración de elementos del modelo enAMPL:
9
4. ¿Cómo Resolver un Problema Usando AMPL?
Lenguaje AMPL
1
0
4. ¿Cómo Resolver un Problema Usando AMPL?
Lenguaje AMPL
Expresiones aritméticas:
Existen muchas expresiones aritméticas que se pueden utilizar en el lenguaje
AMPL, algunos ejemplos …
+ = sum or o ||
- > min and o &&
* != max not o !
/ <= prod
Funciones matemáticas:
Existen muchas funciones matemáticas que se pueden utilizar en el lenguaje
AMPL, algunos ejemplos …
12
4. ¿Cómo Resolver un Problema Usando AMPL?
Lenguaje AMPL
Otros comandos:
• reset: limpia la memoria de AMPL para comenzar un nuevo problema.
• model: se utiliza para ingresar el archivo de modelo al compilador AMPL.
• data: se utiliza para ingresar el archivo de datos al solver.
• solve: resuelve el modelo (el solver predeterminado es el MINOS).
• options: se utiliza para cambiar algunas opciones deAMPL.
• display: se utiliza para ver los resultados después de resolver.
• include: se utiliza para ejecutar un archivo de [Link]
13
4. ¿Cómo Resolver un Problema Usando AMPL?
Archivo de
Modelo
Lenguaje Solver
Archivo de (Minos / Cplex o
Datos
AMPL Neos Server)
Archivo de
Instrucciones
14
4. ¿Cómo Resolver un Problema Usando AMPL?
Se puede utilizar AMPL con distintos solvers de acuerdo a las características del
problema a resolver.
15
4. ¿Cómo Resolver un Problema Usando AMPL?
Archivo de
Modelo
Lenguaje Solver
Archivo de (Minos / Cplex o
Datos
AMPL Neos Server)
Archivo de
Instrucciones
16
4. ¿Cómo Resolver un Problema Usando AMPL?
display nombre_función_objetivo;
display nombre_variable;
display nombre_restricción;
17
4. ¿Cómo Resolver un Problema Usando AMPL?
•Se puede ver información adicional para las variables y las restricciones
con la siguiente sintaxis:
display nombre_variable.sufijo_variables;
display nombre_restricción.sufijo_restricción;
19
4. ¿Cómo Resolver un Problema Usando AMPL?
22
5. Ejemplo
1. Crear documento de texto en Notepad o Wordpad.
2. Escribir archivo de datos y guardar con extensión .run
3. Se ejecuta en AMPL con el comando: include [Link]
23
5. Ejemplo
24
6. Ejercicio Barriles de Petróleo
Problema:
Petrolera debe determinar su producción de barriles de petróleo para los próximos 3
años.
Variables de decisión:
x = Producción en millones de barriles de petróleo para el periodo i.
i
Datos:
P = ( 28 – x ), Precio en dólares para barriles vendidos en periodo 1.
1 1
2
C = x , Costo de extracción en millones de dólares para periodo 1.
1 1
2
C = 1.5x , Costo de extracción en millones de dólares para periodo 2.
2 2
25
6. Ejercicio Barriles de Petróleo
Problema:
Petrolera debe determinar su producción de barriles de petróleo para los próximos 3
años.
Objetivo:
Maximizar las utilidades totales (valor presente) para los 3 periodos:
Max P x - x 2+ (P x -1.5x 2)/1.04 +( P x -2 x2)/1.04 2
1 1 1 2 2 2 3 3 3
{x1,x2,x3} ≥ 0
Restricciones:
R : x + x + x ≤ 30, Cantidad máxima de extracción en 3 periodos.
1 1 2 3
26
6. Ejercicio Barriles de Petróleo
Archivo de modelo: [Link]
27
6. Ejercicio Barriles de Petróleo
Archivo de datos: [Link]
28
6. Ejercicio Barriles de Petróleo
Resultado en AMPL
29
7. Ejercicio Empresa de Computadores
Problema:
Empresa debe determinar sus cantidades óptimas de producción de dos tipos de
computadores, que llamaremos modelo A y modelo B.
Variables de decisión:
q = Cantidad de computadores modelo i a fabricar, con i={A, B}.
i
Datos:
Modelo A:
• Requiere de 3 horas de trabajo y de 2 chips como insumos.
• Función de demanda dada por: qA = 6.000 – 8pA + 2pB.
Modelo B:
• Requiere de 2 horas de trabajo y de 4 chips como insumos.
• Función de demanda dada por: qB = 5.000 + pA – 5pB.
Se dispone de 8.000 horas de trabajo y de un inventario de 7.000 chips.
30
7. Ejercicio Empresa de Computadores
Problema:
Empresa debe determinar sus cantidades óptimas de producción de dos tipos de
computadores, que llamaremos modelo A y modelo B.
Objetivo:
Maximizar las utilidades totales variando el precio y la cantidad producida:
Max pq +pq
A A B B
{p1,p2,q1,q2} ≥ 0
Restricciones:
R : qA = 6.000 – 8pA + 2pB , demanda modelo A.
1
R : qB = 5.000 + pA – 5pB,
2 demanda modelo B.
R : 3qA + 2qB ≤ 8.000, restricción de recurso horas de trabajo.
3
31
7. Ejercicio Empresa de Computadores
Archivo de modelo: [Link]
3
1
7. Ejercicio Empresa de Computadores
Archivo de datos: [Link]
34
7. Ejercicio Empresa de Computadores
Archivo de instrucciones: [Link]
Ejecuta comando MS-DOS
Problema:
Empresa debe determinar nivel de producción y de inventario en cada periodo
para maximizar sus beneficios.
Variables de decisión:
Qjt = Cantidad de producto j a producir en periodo t.
Iit = Inventario de materia prima i en periodo t.
Datos:
• 3 productos: clavos, pernos y tornillos.
• 2 tipos de materia prima: níquel y fierro.
• T periodos a planificar.
• Máxima cantidad a producir por periodo.
• Unidades de materia prima para producir por producto.
• Inventarios iniciales de materia prima.
• Beneficio de cada producto por periodo.
• Costo de inventario y valor residual de materia prima.
38
8. Ejercicio Empresa de Manufactura
Problema:
Empresa debe determinar nivel de producción y de inventario en cada periodo
para maximizar sus beneficios.
Objetivo:
Maximizar beneficio total estimado sobre todos los periodos,
menos los costos totales de almacenaje sobre todos los periodos,
más el valor de la materia prima restante después del último periodo
Restricciones:
• Cantidad producida total en cada periodo no debe exceder el máximo permitido
• Unidades de cada materia prima almacenada al comienzo del periodo 1 no puede
exceder el inventario inicial máximo
• Unidades de cada materia prima almacenada al comienzo de cualquier periodo t+1
debe ser igual a las unidades en almacenaje al comienzo del periodo t, menos las
unidades utilizadas para producción en el periodo t
• Debe cumplir cantidades mínimas de producción requeridas por el cliente 38
8. Ejercicio Empresa de Manufactura
Archivo de modelo: [Link]
Parámetro
adicional
que me
obliga a
producir
una
cantidad
mínima de
cada
producto en
cada
periodo 3
9
8. Ejercicio Empresa de Manufactura
Archivo de modelo: [Link]
Restricción
adicional de
producción
mínima, puede
ser por
requerimiento
de los clientes
4
0
8. Ejercicio Empresa de Manufactura
Archivos de datos: [Link] y [Link]
43
8. Ejercicio Empresa de Manufactura
Archivos de instrucciones: [Link]
Ingresando cantidades mínimas de producción interactivamente.
44
8. Ejercicio Empresa de Manufactura
Interfaz AMPL
Ingresando cantidades mínimas de producción interactivamente.
Variables de Decisión
Sujeto A :
n
x Dij j j 1, 2, ...., m
i1
m
x K y
ij i i i 1, 2, ...., n
j1
xij 0
yi 0,1 i 1, 2, ...., n
Modelo AMPL
Conjuntos
set INSTALACIONES;
# Conjunto de instalaciones candidatas
set MERCADOS;
# Conjunto de mercados
Parámetros
param demanda{j in MERCADOS} >=0;
# Demanda Dj anual del mercado j
param cap{i in INSTALACIONES} >=0;
# Capacidad Ki de la instalacion i
param c_fijo{i in INSTALACIONES} >=0;
# Costo fi de apertura de la instalacion i
param c_tran{i in INSTALACIONES, j in MERCADOS} >=0;
# Costo de transportar una unidad desde la instalacion i hacia el mercado j
Variables
var x{i in INSTALACIONES, j in MERCADOS} >= 0;
var y{i in INSTALACIONES} binary;
Función Objetivo
minimize costo_total:
sum{i in INSTALACIONES} (c_fijo[i]*y[i]) +
sum{i in INSTALACIONES, j in MERCADOS} (c_tran[i,j]*x[i,j]);
Restricciones
subject to cump_dem{j in MERCADOS}:
sum{i in INSTALACIONES} (x[i,j]) = demanda[j];
DESTIN B/QUILL
O ORIGEN CALI MEDELLIN BOGOTA PASTO
A
CALI 0 75908 83184 133706 69707
IBAGUE 57067 73630 45991 114487 109520
NEIVA 69604 84105 63116 135524 110175
Fuente. DECRETO 2663 / 21 JULIO 2008 CON BASE EN LA RESOLUCIÓN 3175 DE 2008
MODELO MATEMATICO
Función Objetivo :
Min Costo Total : Xij Cij Yjk Cjk
iI jJ j k kK
S.A.
Yjk
jJ
Demk k K
Xij Capi
jJ
iI
Xij Yjk j J
iI kK
ARCHIVO MODELO
# CONJUNTOS
set I; # Conjunto de plantas ubicados en la zona de consumo i
set J; # Conjunto de zonas de trasbordo ubicados en la zona de consumo j
set K; # Conjunto de clientes ubicados en la zona de consumo k
# PARAMETROS
param Cap_plantai{i in I} >= 0; # Capacidad de la planta ubicada en la localidad
i (Toneladas de producto/ año)
param Dem_clientesk{k in K} >= 0; # Demanda de producto de los clientes
ubicados en la zona de consumo k (Toneladas de producto/año)
param Cost_tteij{i in I, j in J}; # Costo de transporte de producto de la planta i
al sitio de transbordo j ($/Ton)
param Cost_ttejk{j in J, k in K}; # Costo de transporte de producto del sitio de
transbordo j a la zona de consumo k ($/Ton)
# VARIABLES DE DECISIÓN
var x{i in I, j in J}>= 0;
# Toneladas de producto a enviar de i a j por año (Ton/año) var
y{j in J, k in K}>= 0;
# Toneladas de producto a enviar de j a k por año (Ton/año)
# FUNCION OBJETIVO
minimize costo_total:
# ($/año)
sum{i in I, j in J} (x[i,j]*Cost_tteij[i,j])
# Costo anual de enviar producto de i a j
+ sum{j in J, k in K} (y[j,k]*Cost_ttejk[j,k]; #
Costo anual de enviar producto de j a k
# RESTRICCIONES
# Por capacidad de la planta i (Ton/año):
subject to Cap_pdni{i in I}:
sum {j in J} (x[i,j]) <= Cap_plantai[i];
Variables de decisión
Función objetivo
Costo anual de transporte desde las minas de bauxita hacia las plantas de
alúmina ($/año):
Función Objetivo Problema Bauxita
Costo anual de transporte desde las plantas de alúmina hacia las plantas de
esmaltado ($/año):
4) Por ventas anuales de aluminio terminado en cada planta de esmaltado (Ton de aluminio
terminado/año):
PARÁMETROS
Variables de decisión
Código AMPL
ctran_b(i,j) x ij
+ sum{i in MINAS, j in PLALU} (ctran_b[i,j]*x[i,j])
i. j
ctran_al(j,k) y
j. k
+ sum{j in PLALU, k in PLESM} (ctran_al[j,k]*y[j,k])
jk
param
pmformula:=
;
Datos de parámetros de tres y más
dimensiones (4)
param pmformula:=
Problema:
Encontrar el círculo de
mayor área inscrito dentro
de las curvas.
9. Modelo de Programación No Lineal
P) Max R 2
s.a 3x0 4y 0 24
5x0 2y 0 30
El radio se debe encontrar
y0 4 0
al interior del polígono
- 3x0 5y 0 15
3x0 4y 0 24
R
5
5x0 - 2y 0 30
R
29 La distancia desde el centro
y0 4 R a cada una de las rectas no
puede ser mayor al radio
- 3x0 5y 0 15
R
34
R 0, x0, y0
9. Modelo de Programación No Lineal
En este caso sólo utilizaremos el .mod para correr el problema enAMPL
Definición de variables
Definición de π
Restricciones Lineales
Restricciones No Lineales
9. Modelo de Programación No Lineal
Opciones de resolución
Tiempos de resolución
Solución:
Área = 44.1188
Radio = 3.7474
Xo = 1.86285
Yo = -0.25254
Links de interés
[Link]
[Link]
[Link]/~calvo/ampl/[Link]
52