You are on page 1of 36

Manual de Usuario

AMPL
A Modeling Language for Mathematical Programming

Universidad Autónoma de Nuevo León. 1


Ing. José Manuel Velarde Cant
ú
1 Lenguaje AMPL
 AMPL es un lenguaje de modelado algebraico para programación
matemática: un lenguaje capaz de expresar en notación algebraica
problemas de optimización tales como los problemas de programación
lineal.

1.1 Reglas Léxicas De AMPL.


 Los modelos AMPL envuelven variables, restricciones, y objetivos, expresados
con la ayuda de conjuntos y parámetros. A todos se les llama elementos del
modelo. Cada elemento del modelo tiene un nombre alfanumérico (una cadena
de uno o más letras, dígitos, y caracteres de subrayado): x1, z, restriccion1. Nota:
las letras mayúsculas son distintas de las letras minúsculas en AMPL.

2
 Existen dos tipos de constantes:
 Constantes numéricas: un signo opcional, una secuencia de dígitos
que pueden contener un punto decimal, y un exponente opcional que
comienza con una de las letras: d,D,e,E, como en 1.23D-45. Toda la
aritmética en AMPL tiene la misma precisión (sobre la mayoría de las
maquinas tiene doble precisión).
 Constantes literales son cadenas delimitadas por una comilla simple o
por dobles comillas. Si la comilla simple forma parte de la constante
literal debe aparecer dos veces seguidas (igual ocurre con la doble
comilla). Cada línea de instrucciones debe ir finalizada con un punto y
coma (;).

 Los comentarios comienzan con # y se extienden hasta el final de la


línea, o se pueden delimitar entre /* y */, en cuyo caso pueden
extenderse más de una línea.

3
1.2 Los Elementos de un Conjunto.
 Un conjunto contiene cero o mas elementos o miembros, cada uno de los cuales
es una lista ordenada de una o mas componentes. Cada miembro de un conjunto
debe ser distinto. Todos los miembros deben tener el mismo número de
componentes; a este número común se le conoce como dimensión del conjunto.
 Un conjunto explícitamente se escribe como una lista de miembros separada por
comas, colocados entre llaves: “{ . . . }”. Si el conjunto es de dimensión uno, los
miembros son simplemente constantes numéricas o constantes de cadena, o
cualquier expresión cuyo valor sea un número o una cadena:
{"a "," b"," c"}
{1,2,3,4,5,6,7,8,9}
{t,t+1, t +2}
 Para un conjunto multidimensional, cada miembro debe escribirse como una lista
separada por comas entre paréntesis:
{(" a ",2),(" a ",3),(" b ",5)}
{(1,2,3),(1,2,4),(1,2,5),(1,3,7),(1,4,6)}
 El valor de un miembro numérico es el resultado de redondear su representación
decimal por un valor real de precisión limitada. Los miembros numéricos que
parecen diferentes pero que al ser redondeados al valor de precisión limitada son
el mismo, tales como 1 y 0.01E2, son considerados iguales.
4
1.3 Expresiones Que Indexan Y
Subíndices.
 Muchos elementos de AMPL pueden definirse como colecciones
indexadas sobre un conjunto; los miembros individuales son
seleccionados al añadir un subíndice" al nombre del elemento. El rango
de posibles subíndices es indicado por una expresión que indexa en la
declaración del modelo. Operadores de reducción, tales como sum,
también usan expresiones que indexan para especificar conjuntos
sobre los que las operaciones son iteradas.

5
1.4 Expresiones Aritméticas.
 Las expresiones aritméticas son construidas con los operadores aritméticos
usuales, con funciones de AMPL, y con operadores de reducción
aritméticos como sum: aritméticos (A), Lógicos (L), Conjuntos (S)

6
1.5 Declaraciones De Elementos Del
Modelo.
 La declaración de los elementos del modelo tiene el siguiente
formato general:

 Las palabras claves para los elementos del modelo AMPL


pueden ser una de las siguientes:
 set
 param
 var
 arc
 minimize
 maximize
 subject to , subj to , s . t .
 node

7
1.6 Declaración de Parámetros.
 La declaración de un parámetro del modelo tiene el siguiente
formato general:

 Los cuales pueden ser (sexpr indica una expresión de


conjuntos):
 binary
 integer
 symbolic
 oprel expr
 in sexpr
 := expr
 defaul t expr

8
 donde el operador puede ser:
< <= = == != <> > >=
 El atributo in especifica un chequeo para ver que el parámetro se
encuentra en el conjunto dado. Los parámetros indexados pueden
definirse de forma recursiva. Por ejemplo: param comb 'n sobre k ' { n
in 0 ..N , k in 0 ..n } := i f k =0 or k=n then 1 e l s e comb [n-1, k -1] +
comb [n-1, k];
 Infinity: es un parámetro predefinido; al igual que -Infinity.

9
1.7 Declaración de Variables.

 La declaración de una variable del modelo tiene el siguiente formato


general:

 Los cuales pueden ser (vexpr indica una expresión de variables):


 binary
 integer
 >= expr
 <= expr
 := expr
 defaul t expr
 = vexpr
 coeff [ exp.indexada ] restricción vexpr
 cover [ exp. indexada ] restricción
 obj [ exp. indexada ] objetivo vexpr
10
 Las frases >= y <= especifican cotas, y la frase := indica un valor
inicial. La frase default indica los valores iniciales por defecto, cuyos
valores pueden darse en una línea de instrucciones específica para
datos.

11
1.8 Notación De Sufijos Para Valores
Auxiliares.
 Las variables, restricciones, y objetivos tienen una variedad de valores
auxiliares asociados, a los cuales se puede acceder añadiendo al
nombre uno de los siguientes sufijos dependiendo del tipo de elemento
del modelo.

12
EJEMPLOS EN AMPL
 Existen 2 formas de crear archivos o ficheros de programas en AMPL.

 1.- Archivo o Fichero Único (Modelo + Datos) este es un solo archivo


en donde contiene tanto el modelo codificado (problema) como los
datos del problema.
 2.- En 2 archivos o ficheros por separado llevando c/u la extensión
correspondiente, el primero de ellos archivo.mod (es el que contiene el
modelo codificado en AMPL), el segundo archivo.dat (es el que
contiene los datos referentes al modelo codificado).

 Se requiere de un procesador de texto para crear estos archivos o


ficheros como wordpad.

 Veamos el siguiente ejemplo:

13
Ejemplo 1 (Básico)
 Una compañía fabrica tres productos, P1, P2 y P3, que precisan para
su elaboración dos materias primas, M1 y M2. Las disponibilidades
semanales de estas materias son 25 y 30 unidades, respectivamente.
El beneficio neto que proporciona cada unidad de producto, así como
las unidades de materia prima que necesita para su elaboración,
vienen dados en la siguiente tabla:

Planificar la producción semanal de


forma que se maximice el beneficio.

Solución: Sean x1; x2; x3 (xi) la cantidad


producida de P1; P2; P3
respectivamente (Pi, i = 1; 2; 3).

14
Modelo Básico del Ejemplo.
El problema a resolver sería el siguiente:

El modelo (modelo + datos) escrito


en AMPL del ejemplo fue el
siguiente:

15
Forma General
 La gran potencia del lenguaje AMPL está en separar el modelo en sí
por un lado y por otro los datos particulares del problema concreto.
Para entender esto mejor escribimos el problema del ejemplo desde
este punto de vista.
 El modelo general con n productos y con m materias primas podríamos
escribirlo de la siguiente manera:

O de forma mas abreviada:

Modelo de I. O. Básico
16
 En este problema general los valores de cj , aij y bi son datos del
problema concreto y la estructura del problema (1) sería el modelo
general.
 Esto en AMPL se escribiría de la forma siguiente en dos ficheros. En el
fichero del modelo aparecería:

17
 Y el fichero de datos para nuestro ejemplo particular sería:

Tamaño de los
conjuntos n y m

Ganancia por producto

Requisitos para la
elaboración de cada
producto
Disponibilidad de
materia prima

18
Notas del Ejemplo 1

Formas de declarar un
parámetro como Entero

Restricción de no negatividad en la declaración de las variables

Definición del tamaño de los


conjuntos

19
Asignación de índices
a parámetros y
definición de conjuntos

Función Objetivo

Restricción de Disponibilidad de Materias Primas

20
Como Resolver un Problema con
AMPL
 Resolver un problema de Investigación de Operaciones utilizando
AMPL y forma de llamar al solver en AMPL.

Ambiente Windows como


base para trabajar con
AMPL.

Pasos a seguir para resolver un problema utilizando AMPL.

1.- Si estas trabajando en Windows utilizar esta plataforma mostrada


arriba seleccionando en la carpeta donde contenga el programa ampl el
comando sw.exe para despliegue el ambiente en windows.

21
2.- Enseguida teclear en esta plataforma lo siguiente sw: ampl y
posterior dar enter y aparecerá la pantalla siguiente

En esta pantalla indica en la


parte superior running ampl que
te dice que ampl esta esperando
instrucciones para trabajar

3.- El paso siguiente es escoger un optimizador para darle solución a los


problemas planteado el programa por default trae el optimizador minos
pero si se quiere utilizar cplex teclear la siguiente instrucción para
cambiarlor. En la plataforma de ampl
ampl: option solver cplex;
Como se muestra a continuación:
22
Seleccionar el
optimizador Cplex para
resolver el problema
planteado

Nota. Para seleccionar otro optimizador utilizar la misma instrucción y


el nombre del optimizador deseado.

4.- Para resolver un problema en ampl se puede hacer de dos formas:

a) La primera es llamar a los dos archivos uno por uno con su palabra
reservada terminando con (;) para darle entrada al programa AMPL se le da
un enter. Nota. En caso de que el problema sea de un solo archivo solo se
necesita el archivo con la extensión (.mod) para resolver el problema como
se puede observar en la pantalla siguiente: 23
Nombre de la carpeta donde
esta los archivos del modelo Nombre de los archivos del problema

Extensiones de los
archivos del modelo y
de los datos
respectivamente

Palabra reservada model (indica que es el archivo del modelo codificado), data
(indica que es el archivo de datos del modelo).
Después de teclear estas dos
instrucciones, teclear la
palabra solve de la forma
siguiente:
ampl : solve;
al dar enter desplegara en
pantalla el valor encontrado de
la Función Objetivo 24
Para observar el valor de las variables en pantalla se utiliza la palabra
reservada display y el nombre de la variable de la forma siguiente. En la
plataforma de ampl
ampl: display (nombre de la variable o parámetro);
Como se muestra a continuación

Nombre de la
Variable que se
desea desplegar
sus valores

Nombre y valores de las


Variables desplegadas
25
b) La segunda forma de resolver un problema en AMPL es la siguiente:
Esta forma es mas rápida y consiste en elaborar un archivo (diferente a
los .mod y .dat) en el cual se incluyen todas las instrucciones para cargar y
llamar al solver de forma automática y que lleva una extensión (.run). Como
se muestra ahora.

Nombre del archivo o fichero .run

Instrucciones para resolver el


problema y desplegar la
información de las variables en
pantalla.

26
Para llamar este archivo desde la plataforma de AMPL se utiliza una
palabra reservada include y el nombre del archivo con la extensión run
(archivo.run) como se muestra en la siguiente figura.

Archivo
produccion1.run

Ubicación del archivo a incluir


Palabra reservada para
en el programa de AMPL
llamar al archivo.run y
poder resolver de manera
automática el problema
27
El problema resuelto utilizando el archivo.run y el valor de las variables así
como el de la función objetivo desplegados en pantalla

Nota. Para salir de AMPL teclear la palabra quit de la forma


siguiente. ampl: quit; y dar enter.

28
Ejemplo 2
 Dado los siguientes datos encuentre la cantidad a producir de c/u de
los productos de tal manera que maximice las ganancias

Ton / Hora Ganancia Producción Máxima

Se tiene 40 Horas de producción disponibles a la semana


 De acuerdo a estos datos elabore un modelo de PL y uno en AMPL
para este problema

Modelo en PL de la
forma Básica

29
 Forma General

30
Definición y nombre de los elementos del conjunto P

 Modelo en AMPL (Modelo.mod)

Ton/Hr Ganancia Maximo

Datos (Modelo.dat)

Forma en que se presenta los limites en los que debe


de estar la producción

Nota: Lo interesante de este Modelo es como se presenta esta restricción de los limites de
producción y la definición del conjunto P en el archivo de Datos 31
Diferente forma de plantear el mismo Problema Utilizando conjuntos “1..n”

Definición del tamaño del Conjunto “n” sin que se


tenga que definir los elementos que lo componen.

Forma en como se manejan los conjuntos con las sumatorias y la


forma de decir que los elementos en este caso “i” desde 1 hasta el
tamaño del conjunto n “1..n”.
32
Ejemplo 3
 Modelo en AMPL de Producción

Es interesante la forma de declarar las


variables y aprovechar para establecer las
restricciones de los limites de producción
separando estos limites por una coma “,”.
33
Ejemplo 4 Definición de los elementos de los conjuntos n y m

 Modelo de Suministro con AMPL

Declaración de las variables y restricciones de no


negatividad y la variable Binaria asociada a el cargo
por abrir una planta
Parámetro cargo asociado a la 34
variable Binaria
Ejemplo 5 Definición de los elementos de los conjuntos n, m y o
 Modelo de Transporte en AMPL

Cargo por
utilizar el
camión k

Cargo por utilizar el camión k


asociado a la variable binaria Parámetro P asociado a la
capacidad de c/camión 35
Referencias
 Lenguaje AMPL. Pedro Luis Luque, Marzo de 2000. Versión: 2a
 Robert J. Vanderbei, Linear Programming: Foundations and Extensions
(2nd edition). Kluwer Academic Publishers (Dordrecht, The
Netherlands, 2001). An updated survey of linear programming theory
and methods.
 Robert Fourer and Goutam Dutta, ‘‘A Survey of Mathematical
Programming Applications in Integrated Steel Plants.’’ Manufacturing &
Service Operations Management 4 (2001) pp. 387–400.

36

You might also like