52
ICS1113 Optimización Taller 3: Introducción a AMPL

Taller AMPL 1

Embed Size (px)

Citation preview

Page 1: Taller AMPL 1

ICS1113 Optimización

Taller 3:

Introducción a AMPL

Page 2: Taller AMPL 1

1. ¿Qué es AMPL?

A Mathematical Programming Language

Es un lenguaje de programación especializado en la formulación de modelosde optimización y programación matemática.

Permite formular los modelos con notación común y conceptos matemáticos

2

Permite formular los modelos con notación común y conceptos matemáticosfamiliares.

Permite resolver distintos tipos de problemas de optimización (lineales, nolineales, enteros, cuadráticos, etc.) mediante solvers especializados para cadacaso.

Traduce la formulación del modelo matemático y los datos del problema alenguaje de máquina, que es el que utilizan los solvers y el computador.

Page 3: Taller AMPL 1

2. ¿Cómo Opera AMPL?

Archivo deModelo

Archivo de Datos

Lenguaje

AMPL

Solver

(Minos / Cplex oNeos Server)

3

AMPL

SalidaResultados

Neos Server)

Archivo de Instrucciones

Page 4: Taller AMPL 1

3. ¿Cómo Obtener AMPL?

AMPL Línea de Comandos:

Versión estudiantil (limitada a 200 variables y 200restricciones) disponible en:

www.ampl .com

4

AMPL Servidor Neos Online

Subir los archivos de modelo, de datos y de instrucciones al Servidor Neos en:

www-neos.mcs.anl.gov/neos/

www.ampl .com

Page 5: Taller AMPL 1

4. ¿Cómo Resolver un Problema Usando AMPL?

Archivo deModelo

Archivo de Datos

Lenguaje

AMPL

Solver

(Minos / Cplex oNeos Server)

5

Primero debemos escribir tres archivos:

.mod

.dat

.run

AMPL

SalidaResultados

Neos Server)

Archivo de Instrucciones

Page 6: Taller AMPL 1

Archivo deModelo.mod

Archivo de Datos

Contiene los modelos (función objetivo y restricciones) a usar.

Contiene los datos del problema.

4. ¿Cómo Resolver un Problema Usando AMPL?

6

Datos.dat

Archivo de Instrucciones

.run

Contiene los datos del problema.

Llama al modelo contenido en .mod y a los datos contenidos en .dat, y configura opciones

de entrada y salida

Todos estos archivos pueden ser escritos en cualquier editor de texto (WordPad, NotePad, etc.)

Page 7: Taller AMPL 1

Archivo deModelo

Archivo de Datos

Lenguaje

AMPL

Solver

(Minos / Cplex oNeos Server)

4. ¿Cómo Resolver un Problema Usando AMPL?

7

Los archivos deben ser escritos en el lenguaje

apropiado

AMPL

SalidaResultados

Neos Server)

Archivo de Instrucciones

Page 8: Taller AMPL 1

Lenguaje AMPL

IibXgas

F(X)Max

ii ∈∀≤ )( ..

4. ¿Cómo Resolver un Problema Usando AMPL?

8

Comandos de declaración de elementos del modelo en AMPL:

• set: Define y declara un conjunto de elementos del problema.

• param: Define y declara un conjunto de parámetros del problema.

• var: Define las variables del problema.

• maximize o minimize: Se utiliza para declarar la función objetivo.

• subject to: Se utiliza para declarar las restricciones del problema.

Page 9: Taller AMPL 1

∑∑ −i

)( t

itiit XCPMax :itXCantidad de producto i producida en tiempo t

4. ¿Cómo Resolver un Problema Usando AMPL?

Lenguaje AMPL

9

Declaración de elementos del modelo en AMPL:

• set: Dos conjuntos: 1) Productos, 2) Tiempo

• param: Precio, definido sobre los conjuntos de Productos y TiempoCosto de venta, definido sobre el conjunto Productos

• var: Variable x definida sobre los conjuntos Productos y Tiempo

• maximize: Estamos maximizando

• subject to: No hay restricciones

Page 10: Taller AMPL 1

Expresiones aritméticas:Existen muchas expresiones aritméticas que se pueden utilizar en el lenguaje AMPL, algunos ejemplos …

+-

or o ||and o &&

summin

=>

4. ¿Cómo Resolver un Problema Usando AMPL?

Lenguaje AMPL

10

abs(x)cos(x)sin(x)tan(x)

Funciones matemáticas:Existen muchas funciones matemáticas que se pueden utilizar en el lenguaje AMPL, algunos ejemplos …

acos(x)asin(x)atanh(x)sqrt(x)

round(x)exp(x)log(x)log10(x)

max(x,y,…)min(x,y,…)ceil(x)floor(x)

-*/

and o &&not o !

minmaxprod

>!=<=

Page 11: Taller AMPL 1

Reglas léxicas:

• Cada línea de instrucción debe finalizar con un punto y coma (;)

• Cada línea de comentario debe comenzar con un #, varias líneas se

4. ¿Cómo Resolver un Problema Usando AMPL?

Lenguaje AMPL

11

• Cada línea de comentario debe comenzar con un #, varias líneas sedelimitan por /* y */

• AMPL considera que las letras mayúsculas y minúsculas sondistintas (case sensitive)

• Las constantes con punto decimal se escriben como en esteejemplo: 1.23E-45

Page 12: Taller AMPL 1

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.

4. ¿Cómo Resolver un Problema Usando AMPL?

Lenguaje AMPL

12

• 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 de AMPL.

• display: se utiliza para ver los resultados después de resolver.

• include: se utiliza para ejecutar un archivo de instrucciones .run

Page 13: Taller AMPL 1

Archivo deModelo

Archivo de Datos

Lenguaje

AMPL

Solver

(Minos / Cplex oNeos Server)

4. ¿Cómo Resolver un Problema Usando AMPL?

13

Una vez escritos los archivos se resuelven

usando el Solver apropiado

AMPL

SalidaResultados

Neos Server)

Archivo de Instrucciones

Page 14: Taller AMPL 1

Solvers de AMPL versión estudiantil:

Se puede utilizar AMPL con distintos solvers de acuerdo a las características delproblema a resolver.

• CPLEX: Resuelve problemas lineales y no lineales cuadráticos, continuos o enteros.Utiliza Simplex, métodos de Punto Interior y Branch and Bound.

• DONLP2: Resuelve problemas de optimización no lineales.

4. ¿Cómo Resolver un Problema Usando AMPL?

14

• DONLP2: Resuelve problemas de optimización no lineales.Utiliza Algoritmo Secuencial Cuadrático y Dense-Matrix Linear Algebra.

• LOQO: Resuelve problemas de optimización lineales y no lineales en variables continuas.Utiliza métodos de Punto Interior.

• LPSOLVE: Resuelve problemas lineales y lineales enteros.

• MINOS: Resuelve problemas lineales y no lineales en variable continua.Utiliza Simplex Primal y Gradiente Reducido respectivamente.

Solvers del Servidor Neos:El servidor Neos tiene una lista de solvers para resolver todo tipo de problemas de optimización.

Page 15: Taller AMPL 1

4. ¿Cómo Resolver un Problema Usando AMPL?

Archivo deModelo

Archivo de Datos

Lenguaje

AMPL

Solver

(Minos / Cplex oNeos Server)

15

Una vez resuelto el problema se obtienen

resultados e información adicional (como la

necesaria para análisis de sensibilidad)

AMPL

SalidaResultados

Neos Server)

Archivo de Instrucciones

Page 16: Taller AMPL 1

¿Cómo ver los resultados del problema?

• Comando display se utiliza para visualizar los resultados.

• Se puede ver el valor de la función objetivo, el valor de las variables y el valor de las restricciones con la siguiente sintaxis:

4. ¿Cómo Resolver un Problema Usando AMPL?

16

variables y el valor de las restricciones con la siguiente sintaxis:

display nombre_función_objetivo;display nombre_variable;display nombre_restricción;

• Comando show se utiliza ver los nombres de variables, parámetros, etc.

Page 17: Taller AMPL 1

• Se puede ver información adicional para las variables y las restricciones con la siguiente sintaxis:

display nombre_variable.sufijo_variables;

¿Cómo ver los resultados del problema?

4. ¿Cómo Resolver un Problema Usando AMPL?

17

display nombre_restricción.sufijo_restricción;

donde sufijo_variables puede ser, entre otras:

.init: valor inicial .ub: cota superior .rc: costo reducido

.val: valor actual .lb: cota inferior .slack: holgura

y el sufijo_restricción puede ser, entre otras:

.body: valor actual .ub: cota superior .dinit: valor inicial variable dual

.slack: holgura .lb: cota inferior .dual: valor actual variable dual

Page 18: Taller AMPL 1

• Comando para cambiar el Solver utilizado por AMPL y sus opciones:

option solver nombre_solver; # Cambia solver utilizado por AMPL.

option nombre_solver_options ‘opción=XX’ # Cambia opciones de solver utilizado.

¿Cómo configurar las opciones?

4. ¿Cómo Resolver un Problema Usando AMPL?

18

option nombre_solver_options ‘opción=XX’ # Cambia opciones de solver utilizado.

• Comando para activar/desactivar el presolve:

option presolve 0; # desactiva presolve

option presolve 1; # activa presolve (predeterminado)

Nota: El presolve es un algoritmo que busca reducir el n° de re stricciones o el n°de variables, cuando se pueda, para reducir el tamaño del problema original.

Page 19: Taller AMPL 1

• Comando para activar/desactivar información estadística:

option show_stats 0; # desactivar (predeterminado)

option show_stats 1; # activar

4. ¿Cómo Resolver un Problema Usando AMPL?

¿Cómo configurar las opciones?

19

option show_stats 1; # activar

Nota: Activado muestra más información sobre el número de variables y restricciones del problema.

• Comando para activar/desactivar display de variables con valor cero:

option omit_zero_rows 0; # desactivar (predeterminado)option omit_zero_rows 1; # activar

Nota: Si está activado omite mostrar variables con valor cero.

Page 20: Taller AMPL 1

1. Crear documento de texto en Notepad o Wordpad.

2. Escribir archivo de modelo y guardar con extensión .mod

Comando set define los

5. Ejemplo

20

Comando set define los conjuntos de restricciones (Restr) y variables (Var)

Comando param define los parámetros del modelo, que dependen de los conjuntos Restr y/o Var

Comando var define la variable X y, además, la especifica como no negativa

Se maximiza la función objetivo llamada Total que es una suma.

Se declaran las restricciones del modelo llamadas Restricciones con subject to . Hay tantas restricciones como elementos en el conjunto Restr, donde cada una es una suma.

Si no se desea utilizar un archivo de datos, se pueden ingresar los datos abajo del comando data.

Page 21: Taller AMPL 1

1. Crear documento de texto en Notepad o Wordpad.

2. Escribir archivo de datos y guardar con extensión .dat

Comando data para ingresar los datos, no es necesario en el

5. Ejemplo

21

los datos, no es necesario en el archivo .dat

Comando set declara y enumera con nombre los conjuntos en archivo .dat

Comando param declara los parámetros a utilizar en el problema, enumerados de acuerdo a los elementos de los conjuntos del problema.

Page 22: Taller AMPL 1

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 archivo.run

5. Ejemplo

22

Page 23: Taller AMPL 1

1. Extraer archivo amplcml.zip a un directorio conocido.

2. Ejecutar sw.exe en windows o abrir línea de comando en DOS.

3. El archivo de modelo y el archivo de datos deben estar en directorio AMPL.

5. Ejemplo

23

Versión Windows con sw.exe Versión línea de comando DOS

Page 24: Taller AMPL 1

Problema:

Petrolera debe determinar su producción de barriles de petróleo para los próximos 3 años.

6. Ejercicio Barriles de Petróleo

Variables de decisión:

x = Producción en millones de barriles de petróleo para el periodo i.

24

xi = Producción en millones de barriles de petróleo para el periodo i.

Datos:P1 = ( 28 – x1 ), Precio en dólares para barriles vendidos en periodo 1.P2 = ( 30 – x2), Precio en dólares para barriles vendidos en periodo 2.P3 = ( 32 – x3), Precio en dólares para barriles vendidos en periodo 3.

C1 = x1, Costo de extracción en millones de dólares para periodo 1.C2 = 1.5x2, Costo de extracción en millones de dólares para periodo 2.C2 = 2x3, Costo de extracción en millones de dólares para periodo 3.

Tasa de descuento por periodo = 4%

2

2

2

Page 25: Taller AMPL 1

Objetivo:

Problema:

Petrolera debe determinar su producción de barriles de petróleo para los próximos 3 años.

6. Ejercicio Barriles de Petróleo

25

Restricciones:

R1: x1 + x2 + x3 ≤ 30, Cantidad máxima de extracción en 3 periodos.

R2: C1 + C2 + C3 ≤ 350, Máximo gasto en extracción para los 3 periodos.

Maximizar las utilidades totales (valor presente) para los 3 periodos:

Max P1 x1 - x1 + (P2 x2 -1.5x2 )/1.04 +(P3 x3 -2 x3)/1.042 2 2 2

{x1,x2,x3} ≥ 0

Page 26: Taller AMPL 1

Archivo de modelo: petro.mod

Declara los parámetros del modelo

Declara las variables de decisión del modelo

6. Ejercicio Barriles de Petróleo

26

Declara la función objetivo

Declara las restricciones del modelo

Page 27: Taller AMPL 1

Archivo de datos: petro.dat

Define los valores de los parámetros

6. Ejercicio Barriles de Petróleo

27

Archivo de instrucciones: petro.run

Page 28: Taller AMPL 1

Resultado en AMPL

Ejecuta archivo petro.run en AMPL

6. Ejercicio Barriles de Petróleo

28

Valor óptimo función objetivo

Valor de las variables en el punto óptimo

Valor de los costos reducidos de las variables

Valor y holgura de las restricciones en punto óptimo

Page 29: Taller AMPL 1

Problema:

Empresa debe determinar sus cantidades óptimas de producción de dos tipos de computadores, que llamaremos modelo A y modelo B.

7. Ejercicio Empresa de Computadores

Variables de decisión:

qi = Cantidad de computadores modelo i a fabricar, con i={A, B}.

29

qi = Cantidad de computadores modelo i a fabricar, con i={A, B}.pi = Precio de venta de computadores modelo i, con i={A, B}.

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 .

Page 30: Taller AMPL 1

Objetivo:

Problema:

Empresa debe determinar sus cantidades óptimas de producción de dos tipos de computadores, que llamaremos modelo A y modelo B.

7. Ejercicio Empresa de Computadores

30

Restricciones:

R1: qA = 6.000 – 8pA + 2pB , demanda modelo A.

R2: qB = 5.000 + pA – 5pB, demanda modelo B.

R3: 3qA + 2qB ≤ 8.000, restricción de recurso horas de trabajo.

R4: 2qA + 4qB ≤ 7.000, restricción de recurso chips.

Maximizar las utilidades totales variando el precio y la cantidad producida:

Max pA qA + pB qB

{p1,p2,q1,q2} ≥ 0

Page 31: Taller AMPL 1

Archivo de modelo: comp.mod

Declara los parámetros del modelo

Declara los conjuntos del modelo

7. Ejercicio Empresa de Computadores

31

Declara las variables de decisión del modelo

Declara la función objetivo

Declara las restricciones del modelo

En la declaración de parámetros y variables se le

pueden dar otras

opciones, como que sea integer, binary,

>=0, default 10, etc.

Page 32: Taller AMPL 1

Archivo de datos: comp.dat

7. Ejercicio Empresa de Computadores

32

Nótese la diferencia en el uso de : y := en la declaración de vectores y matrices

Page 33: Taller AMPL 1

Archivo de instrucciones: comp.run

7. Ejercicio Empresa de Computadores

33

• ¿Cómo puedo fijar el valor de una variable?

• ¿Cómo puedo guardar los resultados en un archivo?

• ¿Cómo puedo medir el tiempo de resolución?

• ¿Cómo puedo cambiar interactivamente los valores?

Page 34: Taller AMPL 1

Archivo de instrucciones: comp2.run

Ingreso de datos interactivo

7. Ejercicio Empresa de Computadores

34

Cambiar valores de datos (condiciones iniciales o parámetros)

Muestra más cifras significativas de los resultados

Muestra tiempos y memoria utilizada

Page 35: Taller AMPL 1

Archivo de instrucciones: comp2.run

Guarda datos en .txt

Ejecuta comando MS-DOS

7. Ejercicio Empresa de Computadores

35

Fija el valor de una variableDeshace la fijación de

una variable

Nótese el uso de > para crear y guardar en un archivo .txt

nuevo y de >> para guardar en un archivo .txt ya existente

Page 36: Taller AMPL 1

Archivo de resultados: comp.txt

Parte 1 (todas las variables libres) Parte 2 (Producción de A fijo en 0)

7. Ejercicio Empresa de Computadores

36Nótese el valor de las condiciones iniciales de las variables

Page 37: Taller AMPL 1

Variables de decisión:

Q = Cantidad de producto j a producir en periodo t.

Problema:

Empresa debe determinar nivel de producción y de inventario en cada periodo para maximizar sus beneficios.

8. Ejercicio Empresa de Manufactura

37

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.

Page 38: Taller AMPL 1

Objetivo:

Problema:

Empresa debe determinar nivel de producción y de inventario en cada periodo para maximizar sus beneficios.

8. Ejercicio Empresa de Manufactura

38

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 lasunidades utilizadas para producción en el periodo t

• Debe cumplir cantidades mínimas de producción requeridas por el cliente

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

Page 39: Taller AMPL 1

Archivo de modelo: manuf.mod

8. Ejercicio Empresa de Manufactura

39

Parámetro adicional que me obliga a producir

una cantidad

mínima de cada

producto en cada

periodo

Page 40: Taller AMPL 1

Archivo de modelo: manuf.mod

8. Ejercicio Empresa de Manufactura

40

Restricción adicional de producción

mínima, puede ser por

requerimiento de los clientes

Page 41: Taller AMPL 1

Archivos de datos: manuf1.dat y manuf2.dat

8. Ejercicio Empresa de Manufactura

41

• Puedo resolver distintos archivos de datos con el mismo archivo de modelo.

• Nótese que los archivos de datos pueden contener distintos conjuntos y n°de elementos.

Page 42: Taller AMPL 1

Archivos de instrucciones: manuf1.run

8. Ejercicio Empresa de Manufactura

42

¿Cómo puedo ingresar valor de producción mínima requerida interactivamente?

Page 43: Taller AMPL 1

Archivos de instrucciones: manuf1.run

Ingresando cantidades mínimas de producción interactivamente.

8. Ejercicio Empresa de Manufactura

43

Page 44: Taller AMPL 1

Interfaz AMPLIngresando cantidades mínimas de producción interactivamente.

8. Ejercicio Empresa de Manufactura

44Resultados con y sin restricciones de cantidad mínima de producción difieren

Page 45: Taller AMPL 1

Archivos de Resultados: manuf1.txt

8. Ejercicio Empresa de Manufactura

45

Cantidades a producir e inventarios para cadaproducto y para cada periodo de tiempo cony sin restricciones de producción mínimas

Page 46: Taller AMPL 1

9. Modelo de Programación No Lineal

Queremos calcular el círculo de mayor área

inscrito en un polígono definido por 4 rectas.

Por lo tanto, sea:Por lo tanto, sea:

R : Radio de la circunferencia.

(x0,y0) : Centro de la circunferencia.

Page 47: Taller AMPL 1

Problema:Encontrar el círculo de mayor área inscrito dentro de las curvas.

9. Modelo de Programación No Lineal

Page 48: Taller AMPL 1

≤≤≤≤++++≥≥≥≥++++≤≤≤≤−−−−≤≤≤≤++++

00

0

00

00

2

15y53x-

04y

30y25x

244y3x .

R )

as

MaxP ππππ

El radio se debe encontrar al interior del polígono

9. Modelo de Programación No Lineal

ℜℜℜℜ∈∈∈∈≥≥≥≥

≥≥≥≥−−−−++++

≥≥≥≥++++

≥≥≥≥−−−−

≥≥≥≥−−−−++++

≤≤≤≤++++

00,

00

0

00

00

00

x,0R

34

155y3x-

4y

29

302y-5x

5

244y3x

15y53x-

y

R

R

R

R

La distancia desde el centro a cada una de las rectas no puede ser mayor al radio

Page 49: Taller AMPL 1

Definición de variables

En este caso sólo utilizaremos el .mod para correr el problema en AMPL

Definición de π

9. Modelo de Programación No Lineal

Definición de π

Restricciones Lineales

Restricciones No Lineales

Page 50: Taller AMPL 1

Opciones de resolución

Estadísticas del Solver

9. Modelo de Programación No Lineal

Minos encuentra solución

Tiempos de resolución

Resultados con display

Page 51: Taller AMPL 1

Solución:

Área = 44.1188Radio = 3.7474Xo = 1.86285Yo = -0.25254

9. Modelo de Programación No Lineal

Page 52: Taller AMPL 1

Links de interés

www.ampl.com

52

http://www-neos.mcs.anl.gov/

www.informatica.us.es/~calvo/ampl/amplavanzado.html