Está en la página 1de 27

Introducción Estructura General Extensiones Aplicaciones

Herramientas complementarias para la


resolución de problemas de optimización:
AMPL

Área de Operaciones - Departamento de Industrias

Universidad Técnica Federico Santa Marı́a

2019
Introducción Estructura General Extensiones Aplicaciones

Contenidos

1 Introducción
AMPL

2 Estructura General
Tipos de archivo

3 Extensiones
Instrucciones Complementarias

4 Aplicaciones
Ejemplo
Introducción Estructura General Extensiones Aplicaciones

AMPL

Contenidos

1 Introducción
AMPL

2 Estructura General
Tipos de archivo

3 Extensiones
Instrucciones Complementarias

4 Aplicaciones
Ejemplo
Introducción Estructura General Extensiones Aplicaciones

AMPL

AMPL: A Modeling Language For Mathematical Programming

AMPL es un lenguaje de modelado algebraico especializado en la formulación de


modelos de optimización y programación matemática. Permite formular modelos
con notación común y conceptos matemáticos familiares.

Es posible aplicarlo a problemas de optimización lineal y no lineal, en variables


continuas o discretas (enteras). La resolución de estos problemas es mediante
solvers especializados para cada caso, estos traducen la información del modelo
matemático y los datos del problema a lenguaje máquina, que es el que utilizan
los computadores para obtener la solución.

Los modelos en AMPL envuelven variables, restricciones y una función objetivo,


expresados con la ayuda de conjuntos y parámetros. A todo lo anterior se le llama
elementos del modelo.
Introducción Estructura General Extensiones Aplicaciones

AMPL

SOLVERS con los que trabaja AMPL

Algunos de los SOLVERS ocupados por AMPL, y su aplicación, se


muestran a continuación:
CPLEX: problemas de programación lineal, y programación lineal
entera mixta.
MINOS: problemas de programación no lineal.
GUROBI : problemas de programación lineal, y programación li-
neal entera mixta.
IPOPT : problemas de programación no lineal.

NOTA: La versión estudiantil soporta hasta 300 variables y 300


restricciones.
Introducción Estructura General Extensiones Aplicaciones

AMPL

Expresiones básicas

m <= n Indica que m es menor o igual a n.


m<n Indica que m es menor estricto a n.
m >= n Indica que m es mayor o igual a n.
m>n Indica que m es mayor estricto a n.
m == n Indica que m es igual a n.
m <> n Indica que m es distinto de n.
”:= n ” Asigna un valor n fijo.
”default n ” Asigna un valor n que puede ser modificado.
”∧ ” Potencia.
Introducción Estructura General Extensiones Aplicaciones

Tipos de archivo

Contenidos

1 Introducción
AMPL

2 Estructura General
Tipos de archivo

3 Extensiones
Instrucciones Complementarias

4 Aplicaciones
Ejemplo
Introducción Estructura General Extensiones Aplicaciones

Tipos de archivo

Tipos de archivo

Tanto el modelo como los datos del problema, se pueden escribir en


un procesador de texto (bloc de notas) o bien directamente en la con-
sola AMPLIDE, la cual se puede descargar desde https://ampl.
com/products/ide/. Los archivos deben ser guardados con las si-
guientes extensiones:

.mod: donde se aloja el modelo.


.dat: donde se escribe la data.
.run: se escriben las distintas instrucciones y condiciones bajo las
cuales se ejecutará el modelo.
Introducción Estructura General Extensiones Aplicaciones

Tipos de archivo

Archivo .mod

El orden de los elementos dentro del código del archivo .mod, debe
presentar la siguiente estructura:

Conjuntos
Parámetros
Variables
Función objetivo
Restricciones
Introducción Estructura General Extensiones Aplicaciones

Tipos de archivo

Archivo .mod

Declaración de conjuntos

set NOMBRE CJTO:= VALOR; Ejemplos:


set I:={1,2,3,4,5,6};
set J:=1..6;
set K:={a,b,c,d,e,f,g};

Declaración de Parámetros

param NOMBRE PARAM {conjunto(s) al que está indexado} :=


VALOR;

Alternativamente el valor del parámetro puede escribirse en el


archivo .dat
Introducción Estructura General Extensiones Aplicaciones

Tipos de archivo

Archivo .mod

Declaración de variables

var NOMBRE {cjto} atributos;

Dentro de los atributos (los cuales se recomienda separarlos por


comas), se encuentran:

binary Ejemplos:
integer var X{I}, >= 0;
>= expr var Y{I,J}, binary;
<= expr var Z{I,J,K}, integer, >= 1, <= 3;
Introducción Estructura General Extensiones Aplicaciones

Tipos de archivo

Archivo .mod

Declaración de Función Objetivo

maximize NOMBRE F.O : expresión; Ejemplo:


minimize NOMBRE F.O : expresión; Max
P
Yi,j
i∈I,j∈J
Se escribe como:
maximize FO:
sum{i in I, j in J} Y[i,j];
Declaración de restricciones

subject to NOMBRE RESTR {cjto}: Ejemplo:


expresión; P
s.t. i∈I Yi,j = 1 ,∀j ∈ J
Se escribe como:
subject to R1{j in J}:
sum{i in I} Y[i,j] = 1;
Introducción Estructura General Extensiones Aplicaciones

Tipos de archivo

Archivo .dat

En este archivo se definen los distintos datos en la resolución del


modelo, tales como elementos de conjuntos y valores de paráme-
tros.
Dentro de éstos últimos, la forma de escribirlos depende según
las dimensiones (número de conjuntos / indices) del parámetro.
Las distintas estructuras son:

Dimension 0 (escalar) Una dimension


Archivo .mod: Archivo .mod:
param NOMBRE; param NOMBRE {I};

Archivo .dat: Archivo .dat:


param NOMBRE:= a; param NOMBRE:=
1 a1
2 a2
3 a3 ;
Introducción Estructura General Extensiones Aplicaciones

Tipos de archivo

Archivo .dat

Dos dimensiones Tres dimensiones


Archivo .mod: Archivo .mod:
param NOMBRE {I,J}; param NOMBRE {I,J,K};

Archivo .dat: Archivo .dat:


param NOMBRE: param NOMBRE:
1 2 3 4 := [*,*,1]:
1 a11 a12 a13 a14 1 2 3 4 :=
2 a21 a22 a23 a24 1 a111 a121 a131 a141
3 a31 a32 a33 a34 ; 2 a211 a221 a231 a241
3 a311 a321 a331 a341 ;
Para 3 o más dimensiones, es [*,*,2]:
necesario dejar libre dos indices y fijar 1 2 3 4 :=
los demás, como el siguiente caso en 1 a112 a122 a132 a142
que se fija el tercer indice y quedan 2 a212 a222 a232 a242
libre los 2 primeros. De esta forma 3 a312 a322 a332 a342 ;
cada combinación de valores que
pueden tener los indices fijados se
trabaja como una matriz de 2
dimensiones.
Introducción Estructura General Extensiones Aplicaciones

Tipos de archivo

Archivo.run

En este archivo se definen las instrucciones bajo las cuales se ejecu-


tará el modelo, la estructura básica es la siguiente:

reset; (elimina variables anteriormente ejecutadas)


model NOMBREMODELO.mod; (se carga archivo del modelo)
data NOMBREDATA.dat; (se carga archivo con datos)
option solver SOLVER; (se selecciona el SOLVER usar según tipo
de problema)
solve; (se ordena la resolución del problema)
display VARIABLES; (se muestran valores óptimos de las varia-
bles a elección)
Introducción Estructura General Extensiones Aplicaciones

Instrucciones Complementarias

Contenidos

1 Introducción
AMPL

2 Estructura General
Tipos de archivo

3 Extensiones
Instrucciones Complementarias

4 Aplicaciones
Ejemplo
Introducción Estructura General Extensiones Aplicaciones

Instrucciones Complementarias

Durante el proceso de programación, AMPL da la posibilidad de:


Definir los parámetros como distribuciones aleatorias de probabilidad en el archivo
.mod, e.g.:
param P{A,B}:=Normal(Media,Desviación);
param P{A,B}:=Uniform(a,b);
Realizar redondeos de los parámetros, esto se puede hacer al minuto de definirlos
o de llamarlos, e.g.:
param P{A,B}:=round(Normal(µ, σ),2);
param P{A,B}:=round(Uniform(a,b));
Modificar elementos del modelo o de los parámetros, como re-asignar los valores
de parámetros que fueron definidos con ‘default’, e.g.:
let P:=10;
let{a in A,b in B} P[a,b]:=10;
Introducción Estructura General Extensiones Aplicaciones

Instrucciones Complementarias

Utilizando los comandos set y setof se puede definir conjuntos que cumplan cier-
tas condiciones, subconjuntos y conjuntos indexados, entre otros.
Se da la opción de realizar operaciones de conjuntos, tales como intersección y
unión. Suele usarse en el archivo .mod.
set C:=union{a in A, b in B}{(a,b)};
set C:={A,B};
set C:=union{a in A, b in B : P[a,b]>=0}(a,b);
set C{a in A}:=setof{b in B : P[a,b]<>0}b;
Como se ve en el ejemplo, el uso de : nos permite imponer ciertas condiciones al
minuto de definir o utilizar conjuntos, y se debe leer como “tal que”.
subject to C1{a in A}: sum{b in B : P[a,b]¡=5} X[a,b]>=C[a] ;
subject to C2{(i,j) in T}: sum{a in A, b in B :M[a,b,i,j]==1} Y[i,j]<=X[i,j];
subject to C3{a in A : K[a]>=0}: X[a]=L[a] ;

Manual de AMPL :
https://ampl.com/resources/the-ampl-book/chapter-downloads/
Introducción Estructura General Extensiones Aplicaciones

Instrucciones Complementarias

Se puede pedir que se muestre por pantalla ciertas expresiones, información o


mensajes mediante el uso de los comandos display, print o printf. También, esta
información puede ser exportada a archivos .txt o .csv

display X;
display X,Y;
display total solve time;
print “La variable X[1,2] toma el valor: ”, X[1,2] ;
print “La demanda total es de %.2f unidades ”, sum{a in A} Dem[a] ;
printf “\n” ;
printf “Analisis \n” > “salida.csv” ;
printf “Vida util, %.2f \n”, VU >> “salida.csv” ;
Introducción Estructura General Extensiones Aplicaciones

Instrucciones Complementarias

Es posible programar ciclos en AMPL con los comandos for, repeat while y
repeat until, habitualmente se utilizan en el archivo (.run).
Se puede utilizar comandos condicionales, como el if, then y else

Ciclos if-then-else

for {a in A, b in B} { if sum{a in A, b in B} P[a,b] >= 100


let P[a,b] := a + b ; } ; then {
print “El parámetro es mayor o igual a
for {a in A} {
100” ; } ;
for {b in B} {
let P[a,b] := a + b ; } } ; if cont==1 then {
let cont2 := cont2 + 1 ; } ;
for {a in A, b in B} {
print “La variable X es ”, X[a,b] ; } ; for {a in A, b in B} {
if X[a,b]>=Y[a,b] then {
param flag default 10 ;
let P[a,b]:=5 ; }
repeat while flag == 1 {
else {
let flag := flag – 1 ; } ;
let P[a,b]:=10 ; } ;
param cont default 1 ;
repeat until cont == 10 { let cont :=
cont + 1; } ;
Introducción Estructura General Extensiones Aplicaciones

Ejemplo

Contenidos

1 Introducción
AMPL

2 Estructura General
Tipos de archivo

3 Extensiones
Instrucciones Complementarias

4 Aplicaciones
Ejemplo
Introducción Estructura General Extensiones Aplicaciones

Ejemplo

Problema de Mezcla de productos

Una refinerı́a de petróleo produce dos tipos de gasolina sin plomo:


regular y extra, las cuales vende a los distribuidores en US$12 y
US$14 por barril respectivamente.
Ambos tipos de gasolina se preparan a partir de la mezcla de barriles
de petróleo nacional refinado y de petróleo importado refinado que
tiene la empresa en su inventario. Las únicas especificaciones que
debe tener la gasolina producida es con respecto a su presión máxima
de vapor y el octanaje mı́nimo.
Se requiere formular y resolver un modelo de programación lineal que
permita maximizar el ingreso semanal de la refinerı́a, satisfaciendo
los requerimientos detallados a continuación, y encontrando la can-
tidad óptima de barriles de petróleo refinado nacional e importado a
utilizar para cada tipo de gasolina.
Introducción Estructura General Extensiones Aplicaciones

Ejemplo

Problema de Mezcla de productos

Datos:
Presión Máx Octanaje Dda Máx. Entregas Mı́n.
Gasolina
de vapor mı́nimo [barril/sem] [barril/sem]
Regular 23 88 100000 50000
Extra 23 93 20000 5000

Las caracterı́sticas del inventario de petróleo refinado son las siguien-


tes:
Presión Inventario Costo
Petróleo Octanaje
de vapor [barril] [US$/barril]
Nacional 25 87 40000 8
Importado 15 98 60000 15
Introducción Estructura General Extensiones Aplicaciones

Ejemplo

Problema de Mezcla de productos

Conjuntos
I: Tipo de gasolina.
J: Tipo de petróleo refinado.

Parámetros
Pj : Presión de vapor de cada barril de petróleo tipo j
Pimax : Presión máxima de vapor para el tipo de gasolina i.
Oj : Octanaje de cada barril de petróleo tipo j.
Oimin : Octanaje mı́nimo de la gasolina tipo i.
dimax : Demanda máxima semanal del tipo de gasolina i.
dimin : Cantidad mı́n de entregas de barriles semanales del tipo i.
Invj : Inventario disponible de cada barril de petróleo tipo j.
Cj : Costo por barril de petróleo tipo j.
Vi : Valor de venta por gasolina tipo i.

Variables
Xij : Barriles de petróleo tipo j utilizados en la producción de
gasolina tipo i.
Introducción Estructura General Extensiones Aplicaciones

Ejemplo

Problema de Mezcla de productos: Modelo Compacto

 
X X 
Max Xij ∗ Vi
X  
i∈I j∈J
P
j∈J Xij ∗ Pj
s.t. P ≤ Pimax ∀i ∈ I
j∈J Xij
P
j∈J Xij ∗ Oj
P ≥ Oimin ∀i ∈ I
Xij
j∈J
X
dimin ≤ Xij ≤ dimax ∀i ∈ I
j∈J
X
Xij ≤ Invj ∀j ∈ J
i∈I
Xij ≥ 0 ∀i ∈ I, j ∈ J.
Introducción Estructura General Extensiones Aplicaciones

Más Información
Es posible encontrar una serie de ejemplos y material en la página
de ampl:
Página Principal:
https://ampl.com/
Ejemplos:
https://ampl.com/resources/the-ampl-book/example-files/
Manual:
https://ampl.com/resources/the-ampl-book/chapter-downloads/

También se encuentra disponible la página de Neos Server para


poder utilizar los solver de manera gratuita y tener acceso a tutoriales
sobre optimización.
Introducción Estructura General Extensiones Aplicaciones

Herramientas complementarias para la


resolución de problemas de optimización:
AMPL

Área de Operaciones - Departamento de Industrias

Universidad Técnica Federico Santa Marı́a

2019

También podría gustarte