Está en la página 1de 4

Escuela de Ingenierı́a Universidad de O’Higgins

IN3003-1 Optimización
Profesor: Gonzalo Muñoz
Ayudante: Obed Ulloa
Fecha: 20 de abril de 2020.

1. Instalación AMPL
El curso posee una licencia de AMPL / CPLEX / GUROBI / BARON. Los archivos relevantes para la instalación se
encuentran en material docente. AMPL se puede correr desde la linea de comandos o mediante una aplicación integrada
(IDE). Usted puede elegir lo que le parezca mejor. Para instalar esta versión siga las siguientes instrucciones según su
sistema operativo.

Windows
Cree una carpeta personal donde pondrá todos sus archivos AMPL. Descomprima la versión que haya descargado
según la arquitectura de su sistema operativo (32 o 64 bits) y ya puede ejecutar AMPL desde el archivo amplide.exe
ubicado en la carpeta amplide del directorio donde descomprimió los archivos.

Linux
Cree una carpeta donde pondrá todos sus archivos AMPL. Descomprima la versión que haya descargado según la
arquitectura de su sistema operativo (32 o 64 bits). Una vez hecho esto, usted podrá ejecutar la IDE de AMPL cargando
el comando ./amplide.

MacOS
Cree una carpeta donde pondrá todos sus archivos AMPL. Descomprima el archivo AMPL para MacOSX 64 bit
sin IDE.zip.

Descargue el IDE de AMPL (AMPL IDE para Mac.tgz) de material docente. Descomprima el archivo y mueva la
carpeta amplide del archivo comprimido descargado de modo que quede como subdirectorio de su carpeta AMPL. Una
vez hecho esto, usted podrá ejecutar la IDE de AMPL cargando el archivo amplide dentro de la carpeta amplide. Si
aparece un mensaje diciendo que el programa amplide “no puede ser abierto” porque “no fue descargado de la Tienda
Mac App” o es de un “desarrollador desconocido”, tendrá que indicarle a Mac OS X que el programa es de una fuente
confiable haciendo control-click or right-click en el icono amplide y selecione abrir desde el menú desplegado. Este paso es
solo necesario la primera vez que se corre amplide.

1
Escuela de Ingenierı́a Universidad de O’Higgins

2. Usar AMPL
AMPL es un lenguaje diseñado especı́ficamente para programación en un lenguaje matemático (A Mathematical Pro-
gramming Language). De momento trabajaremos con problemas de programación lineal (PL), pero también puede ser
usado para programación entera (PE) y programación no lineal (NPL).

2.1. Un PL simple
Considere el siguiente ejemplo. Un fabrica de Sherwin Williams elabora dos colores de pintura, azul y rojo. El galón
(3.8 L) de azul se vende a diez mil pesos, mientras que uno rojo, a quince mil pesos. En esta fábrica, se puede producir
solo un color de pintura al mismo tiempo; sin embargo, la pintura azul es más fácil de hacer y por lo tanto se pueden
producir 40 galones por hora, mientras que para la pintura roja son 30 por hora. Además, el departamento de marketing
informa al área de producción que pueden vender a lo sumo 860 galones de rojo y 1000 galones de azul. Si en la semana la
fabrica funciona 40 horas y la pintura no se puede almacenar de una semana para la otra, necesitamos determinar cuántos
galones de pintura elaborar de cada color, de manera de maximizar las ganancias.

Sea Pa la variable que resperesnta los galones de pintura azul que se fabricarán, y Pr los galones de pintura roja.
Consideraremos las ganancias en miles de pesos por simplicidad. Entonces el problema formulado como un PL es

máx 10Pa + 15Pr


1 1
s.a: 40 Pa + 30 Pr ≤ 40
0 ≤ Pa ≤ 1000
0 ≤ Pr ≤ 860

Una de las ventajas de AMPL es que al ser un lenguaje matemático, permite modelar este problema con una sintaxis
similar a la que acabamos de usar.

Para crear un archivo para el modelo, seleccione crear un nuevo archivo, ya sea desde la barra de herramientas en la
esquina superior izquierda del IDE, o con el botón para crear nuevo archivo bajo la barra de herramientas (en la misma
esquina). Nombre el archivo como ejemplo1 y seleccione que el tipo de extensión sea .mod.

Ahora, en el recuadro derecho aparecerá el archivo que acaba de crear donde escribiremos el siguiente código:

# Ejemplo 1

var Pa;
var Pr;

maximize ganancia: 10*Pa + 15*Pr;

subject to tiempo: (1/40)*Pa + (1/30)*Pr <= 40;


subject to limite_azul: 0 <= Pa <= 1000;
subject to limite_rojo: 0 <= Pr <= 860;

Notando las siguientes cosas sobre AMPL:


Para comentar una lı́nea, o hacer un comentario, se usa #.
Las variables de deben declarar usando el comando var.
Todas las lı́neas deben terminar con punto y coma.
El objetivo de la optimización comienza con un comando maximize o minimize, seguido de un nombre para la
función objetivo, un carácter de dos puntos (:); y después se escribe la función objetivo como tal.

2
Escuela de Ingenierı́a Universidad de O’Higgins

Cada restricción comienza con subject to, luego el nombre para la restricción, y dos puntos. Después de esto se
escribe la ecuación o inecuación respectiva.
Los nombres deben ser únicos, una variable y una restricción o función objetivo no pueden compartir el mismo
nombre.
AMPL es sensible al uso de mayúsculas, es decir, distingue entre mayúsculas y minúsculas.

Ahora, el archivo se puede guardar y podemos cargar el modelo en AMPL. Primero debe notar que a la derecha del
IDE, aparece la ventana con el directorio en el cual está trabajando actualmente, por lo tanto revise que este corresponde al
directorio donde desea que queden los archivos que creará y lo debe tener en cuenta para cuando quiera volver a cargarlos
desde la linea de comandos.

Una buena práctica siempre es siempre comenzar con un comando reset; puesto que muchas veces quedan variables
definidas de modelos anteriormente cargados, que pueden generar conflicto con el problema que esté resolviendo en el
momento. Esto será importante más adelante en el curso cuando deba correr más de un PL durante alguna ejecución de
AMPL. Por lo tanto lo primero será correr este comando.

reset;

Cuando se ejecuta AMPL, por defecto este usará uno de los tres solver que vienen instalados en esta licencia, los cuales
son cplex, gurobi y baron; de los cuales usaremos por lo general cplex. Para determinar el solver que se usará se
debe correr el comando option solver, por lo que deberá ejecutar la siguiente lı́nea:

option solver cplex;

Tenga cuidado porque si tipea mal el nombre del solver, AMPL no arrojará un mensaje de error al elegir el solver, sino
cuando quiera usarlo para resolver un problema.

Si el directorio en que está trabajando es el mismo, para cargar el modelo que ha escrito (ejemplo1.mod), debe
indicarlo se la siguiente manera

model ejemplo1.mod;

y si este se encuentra en otro directorio

model z:\directorio\ejemplo1.mod;

donde deberá indicar el directorio respectivo de su ordenador.

Ahora para resolver el problema, solo debe ejecutar el comando solve.

solve;

En caso de que se haya equivocado al ingresar el nombre de alguna variable o restricción del modelo, o olvidó algun
caracter, no terminó una lı́nea, etcétera. Deberá aplicar los cambios a su archivo ejemplo1.mod, guardar los cambios, y
aplicar reset antes de volver a caragar el modelo.

reset;
model ejemplo1.mod;
solve;

Cuando haya resuelto el problema correctamente, le deberá aparecer un mensaje como este

CPLEX 12.9.0.0: optimal solution; objective 17433.33333


1 dual simplex iterations (0 in phase I)

3
Escuela de Ingenierı́a Universidad de O’Higgins

Ahora podrá ver los valores de las variables que alcanzan este valor óptimo usando el comando display.

display Pa;
display Pr;

Observación: Cuando escibimos el modelo, la positividad de las variables se puede indicar el momento de declararlas.
Es decir, no ponerlo en las restricciones sino cuando se declara las variables en las primeras lineas del modelo. Como se
muestra a continuación.

# Ejemplo 1

var Pa >=0;
var Pr >=0;

maximize ganancia: 10*Pa + 15*Pr;

subject to tiempo: (1/40)*Pa + (1/30)*Pr <= 40;


subject to limite_azul: Pa <= 1000;
subject to limite_rojo: Pr <= 860;

2.2. Otro PL simple


Considere el siguiente PL

mı́n a + 12b
s.a: 13a + 12c ≤ 5 − 2b
a+c ≥ 1
15a + b = 14 + 3b
a ≥ 0, b ≤ 0, c ∈ R

Escriba el archivo ejemplo2.mod donde modele este problema en AMPL, y resuélvalo usando el solver gurobi.
Deberá obtener un output como este:

Gurobi 9.0.0: optimal solution; objective -84

También podría gustarte