You are on page 1of 15

Departamento de Estadstica e Investigacin Operativa Universidad de Valladolid

Breve introduccin al programa AMPL


ndice
Parte I: Introduccin.
1. Introduccin.
2. Elementos fundamentales.
3. Instalacin de AMPL.
Parte II. Modelos epl!citos de Programacin Lineal resueltos interactivamente.
1. Introduccin.
2. Creacin de un fichero .mod.
3. "esolucin interactiva del pro#lema anterior usando el usando el procesador de comandos en la
ventana s$.ee.
%. &ufi'os.
(. )tros comandos.
*. +otas , atri#utos integer , #inar, para las varia#les.
-. .n primer e'emplo. El pro#lema del transporte.
/. E'ercicios con print , printf.
Parte III: "esolucin autom0tica o por lotes 1#atc23. Creacin de un fichero .run.
1. Introduccin.
2. .na forma pr0ctica de proceder.
3. E'emplo resumen.
%. 4ota.
(. Pro#lemas moc2ila.
Parte I5: +on'untos. Creacin de un fichero .dat.
1. +on'untos simples e !ndices.
2. +on'untos de pares ordenados.
3. +on'untos de n6uplas.
%. Epresiones.
(. E'ercicios.
7el pro#lema del transporte.
7el pro#lema de la dieta.
7el pro#lema de produccin.
7el pro#lema de flu'o con coste m!nimo.
7el pro#lema del camino m0s corto.
7el pro#lema de flu'o m0imo.
Parte 5. )tros comandos.
1. El comando LE8.
2. El comando 9)".
3. E'ercicios.
7el pro#lema del +PM.
7el pro#lema del PE"8.
%. )tros e'ercicios.
.
9ic2ero AMPL6:%61:613.doc P0gina 1 de 1(
Departamento de Estadstica e Investigacin Operativa Universidad de Valladolid
Parte I: Introduccin
1. Introduccin.
AMPL es un programa dirigido a la construccin , resolucin de modelos de optimi;acin<
fundamentalmente modelos de Programacin Lineal< Programacin Entera , Programacin No
Lineal. A diferencia de otros programas parecidos< como LI4=)< una ve; definido un modelo en
AMPL puede especificarse el cmo >ueremos resolverlo< lo >ue permite el dise?o de muc2os tipos de
algoritmos. &imult0neamente< eiste una variedad mu, grande de solvers >ue pueden ser llamados
desde AMPL 1algunos de dominio p@#lico3< lo >ue da una gran potencia , versatilidad al programa.
)tro 2ec2o a destacar es la continua incorporacin de me'oras , procedimientos recientes.
Para una descripcin completa de los elementos #0sicos del lengua'e la me'or fuente sigue siendo
el li#ro de ". 9)."E"< 7. M. =AA B B. C. DE"4I=EA4 AMPL< A Modeling Language For
Mathematical rogramming< 82e &cientific Press 11FF3< 2::23.
Para acceder a los servicios de AMPL consultar la direccin http:!!!.ampl.com.
Para una descripcin de las me'oras >ue se 2an ido incorporando desde la versin inicial< de los
solvers disponi#les , de otras muc2as cuestiones< consultar en
2ttp:GGnetli#.#ell6la#s.comGcmGcsG$2atGamplGinde.2tml
2. Elementos fundamentales.
El programa AMPL consta fundamentalmente de las siguientes componentes:
A. El procesador del lenguage "#PL< >ue corresponde al programa ampl.ee , >ue compila
todos los fic2eros , comandos. El procesador puede ser e'ecutado en modo comando en una
ventana de 7)&< o #ien puede ser e'ecutado m0s cmodamente desde una ventana $indo$s
e'ecutando el programa s!.e$e 1scroll $indo$s3.
B. Los solvers< >ue son los algoritmos para resolver diferentes tipos de pro#lemas. La edicin
&tandar AMPL &tudent for Cindo$s puede e'ecutarse con diferentes solvers< entre los >ue
destacan CPLE% 1para pro#lemas de PL< PE , "edes3 , #IN&' 1para pro#lemas de PL ,
P4L3< , tiene la limitacin de 2asta ()) varia*les + ()) restricciones. Adem0s de la versin
&tandar AMPL &tudent for Cindo$s< 2a, otras versiones como AMPL Plus para Cindo$s< o
versiones para Linu< .ni , otras plataformas.
+. La forma m0s 2a#itual de tra#a'ar con AMPL es editar primero tres fic2eros< con etensiones
.mod< .dat , .run conteniendo< respectivamente< las componentes del modelo< los datos en el
formato AMPL< , los comandos >ue se van a e'ecutar. Estos fic2eros de teto pueden editarse
, mantenerse con cual>uier editor de tetos 1p.e. con el #loc de notas3. Aun>ue muc2os de los
comandos >ue aparecen en el arc2ivo .run podr!an ser e'ecutados manualmente en la ventana
de comandos< es m0s conveniente agruparlos en un arc2ivo o script con etensin .run< donde
adem0s pueden ir todo tipo de opciones< #ucles repetitivos< etc.
7. Adem0s de las tres ventanas de teto< es preciso tener activo el procesador de comandos
"#PL o #ien en una ventana de 7)&< o m0s cmodamente desde una ventana $indo$s en
s!.e$e.
E. 7e una manera informal< podemos decir >ue en un fic2ero .mod decimos al ordenador >uH
modelo >ueremos resolver< con un fic2ero .dat le decimos al ordenador con >ue datos vamos
a tra#a'ar , con un fic2ero .run le decimos de >ue modo >ueremos resolver el pro#lema , >ue
informacin >ueremos >ue nos muestre.
9ic2ero AMPL6:%61:613.doc P0gina 2 de 1(
Departamento de Estadstica e Investigacin Operativa Universidad de Valladolid
(. Instalacin de "#PL.
Ampl ofrece una versin gratuita para estudiantes. Para instalar los fic2eros necesarios pueden
seguirse los siguientes pasos.
Instalacin de ficheros del entorno de "#PL.
1. .sando internet< entrar en $$$.ampl.com.
2. Pinc2ar en la pala#ra do!nload< situada en la columna i;>uierda< en el p0rrafo >ue sigue a
,r+"#PL-
3. Pinc2ar en "LE#$%& &tudet Edition.
%. Pinc2ar en For 'indo!s user ne! to AML.
(. Pinc2ar en amplcml%(ip , guardar en la carpeta elegida el fic2ero .;ip correspondiente
1amplcml3.
*. 7escomprimir el fic2ero amplcml.;ip antes #a'ado. Puede 2acerse pulsando el #otn derec2o
, eligiendo la opcin e)tract to folder: +:I..........
-. Entre otros< al final de#emos tener los siguientes fic2eros:
ampl.ee 1procesador de AMPL3.
cple.ee 1solver de PL< PE , redes3.
cple/:.dll 1li#rer!a de cple3.
minos.ee 1solver de PL , P4L3.
s$.ee 1ventana en la >ue puede e'ecutar el procesador de AMPL de una forma cmoda3.
Instalacin del editor P.E(2.e$e.
Este editor resulta cmodo para tra#a'ar en la ela#oracin de los fic2eros .mod< .dat , .run.
Puede #a'arse #uscando con google las pala#ras pfe32.;ip. Entre las #@s>uedas encontradas elegir
una adecuada. Por e'emplo< pinc2ando en factsheet%
4otas:
A. La carpeta de tra#a'o del editor P9E32 1es decir< donde #usca , guarda directamente los
fic2eros< si no le indicamos otra cosa3 puede cam#iarse seleccionando file J c2age director,.
B. El n@mero de espacios en #lanco >ue se o#tienen al pulsar la tecla del ta#ulador puede
cam#iarse si< dentro del editor P9E32< usamos )ptions J +urrent modes J 8est formatting.
9ic2ero AMPL6:%61:613.doc P0gina 3 de 1(
Departamento de Estadstica e Investigacin Operativa Universidad de Valladolid
Parte II: #odelos e$pl/citos de Programacin Lineal
resueltos interacivamente
1. Introduccin.
En esta seccin vamos a ver cmo se introducen en AMPL e'emplos sencillos de Programacin
Lineal de pocas varia#les< , cmo se e'ecutan arc2ivos de comandos para las sesiones iniciales de
AMPL. En estos e'emplos los datos del pro#lema 1coeficientes de la funcin o#'etivo< de las
restricciones , del lado derec2o3< est0n incluidos en el modelo< por lo >ue no es preciso crear un
arc2ivo con los datos< es decir< no necesitamos el archivo .dat. Les llamaremos modelos e$pl/citos.
Posteriormente veremos >ue< como es importante lograr la separacin completa entre el modelo , los
datos< es me'or usar tam#iHn este tipo de arc2ivo. ,ampoco usaremos el archivo .run.
Algunas ideas generales son:
Los comentarios pueden ser a?adidos desde el s!m#olo K 2asta el final de la l!nea.
Al final de cada declaracin o comando de#e ir un punto , coma 1L3.
Las ma,@sculas son distintas de las min@sculas.
&e pueden insertar espacios en #lanco o l!neas en #lanco sin afectar a la e'ecucin del programa.
La multiplicacin de#e indicarse con el signo ML por e'emplo< de#e escri#irse 3M1 J %M2< , no
31 J %2.
A continuacin< seguiremos los siguientes pasos:
1. +reacin de un fic2ero .mod para indicar el modelo a
resolver.
2. "esolucin del pro#lema con AMPL desde la ventana de
s$.ee.
4ota: no usaremos
2. Creacin de un fichero .mod.
8endremos en cuenta las siguientes consideraciones:
+ada varia#le de#e ser declarada epl!citamente 1con la declaracin var3L adem0s< si
corresponde< podemos indicar su no negatividad< sus cotas< si es entera o si es #inaria.
La funcin o#'etivo de#e ser declarada epl!citamente despuHs de maimi;e o
minimi;e< , es conveniente darle un nom#re seguido de dos puntos. En cada pro#lema
el nom#re de la funcin o#'etivo puede ser distinto< aun>ue< por comodidad< podemos
poner siempre el mismo nom#re 1por e'emplo< o*0etivo3.
+ada restriccin de#e ser declarada epl!citamente 1con la declaracin su*0ect to3< ,
es conveniente darle un nom#re seguido de dos puntos.
"esumen
Declaracin Uso
5ar 7eclaracin de varia#le
Minimi;e 7eclaracin de o#'etivo 1minimi;ar3
Maimi;e 7eclaracin de o#'etivo 1maimi;ar3
&u#'ect to 7eclaracin de restriccin
E'emplo de un modelo de PL epl!cito con dos varia#les 1e'emplo1.mod3:
9ic2ero AMPL6:%61:613.doc P0gina % de 1(
Departamento de Estadstica e Investigacin Operativa Universidad de Valladolid
&upongamos >ue >ueremos resolver el pro#lema:
maimi;ar la funcion 31J%2
su'eta a:
1J2 NO 2
%1J*2 NO F
1PO:< 2PO:
+on el editor pfe32.ee creamos el fic2ero e'emplo1.mod siguiente:
K declaracion de las varia#les , de su no negatividad
var 1PO:L
var 2PO:L
K declaracion de la funcion o#'etivo
K la pala#ra o#'etivo es elegi#le a gusto personal
maimi;e o#'etivo: 3M1J%M2L
K declaracion de las restricciones
su#'ect to res1: 1J2 NO 2L K la pala#ra res1 es elegi#le a gusto personal
su#'ect to res2: %M1J*M2 NO FL K la pala#ra res2 es elegi#le a gusto personal
4otas:
A. La declaracin de varia#les de#e preceder a la declaracin de restricciones , de la
funcin o#'etivo.
B. Entre las declaraciones de restricciones , de la funcin o#'etivo no 2a, precedencias
o#ligatorias .
(. 1esolucin interactiva del pro*lema anterior usando el procesador de
comandos en la ventana s!.e$e.
.na sesin inicial para resolver el pro#lema anterior puede conseguirse aplicando en
modo secuencial e interactivo los siguientes comandos:
el comando reset elimina de la memoria de AMPL el modelo , los datos anteriores.
el comando model env!a al procesador de comandos el modelo especificado< , es preciso
indicar todo el camino 1pat23 donde estH el arc2ivo correspondiente.
con el comando option solver se elige el solver con el >ue resolver el modelo actualL
dependiendo del tipo de pro#lema a resolver elegiremos el m0s adecuado. 4osotros
eligiremos la opcin option solver cplex%
el comando solve llama al solver elegido , aplica el algoritmo correspondiente<
o#teniHndose una solucin ptima.
.na ve; o#tenida una solucin ptima podemos elegir lo >ue >ueremos >ue nos muestre
el programa. Para ello tenemos varios comandos. Por e'emplo< los comandos displa* , printf
permiten mostrar en pantalla datos< resultados o mensa'es de teto preesta#lecidos.
2. 'ufi0os.
+on el comando displa* se pueden tam#iHn visuali;ar otros valores asociados a las
varia#les , a las restricciones< mediante el uso de sufi'os.
Los sufi'os m0s 2a#ituales para las varia#les son:
+ufi,o Interpretacin
.val 5alor actual
9ic2ero AMPL6:%61:613.doc P0gina ( de 1(
Departamento de Estadstica e Investigacin Operativa Universidad de Valladolid
.l# +ota inferior
.u# +ota superior
.rc +oste reducido
Los sufi'os m0s 2a#ituales para las restricciones son:
+ufi,o Interpretacin
.#od, 5alor actual de la epresin
.dual 5aria#le dual o precio som#ra
.slacQ Eolgura
3. &tros comandos.
Aun>ue m0s adelante se ver0 un uso m0s intensivo del lengua'e de comandos< 2a, otros
comandos sencillos >ue valen para ver el modelo en su con'unto como son:
el comando show >ue muestra las componentes del modelo.
el comando expand >ue epande el modelo 1salvo< en su caso< la no negatividad3.
4. Cotas + atri*utos integer + *inar+ para las varia*les.
En un fic2ero .mod< cuando se declara una varia#le< si no se especifica nada la varia#le
es continua , no tiene restriccin de signo. Las restricciones de signo< las cotas sencillas , las
restricciones de ser entera o #inaria se especifican en la misma declaracin. E'emplo:
Para poner 1 :< : 2 /< 3 : , entera< % #inaria se escri#e< respectivamente:
var 1 PO: L
var 2 PO:< NO/ L
var 3 PO:< integer L
var 1 #inar, L
5. 6n primer e0ercicio. El pro*lema del transporte.
.sando lo anteriormente epuesto< resolver el pro#lema del transporte de Cinston p. 33-.
9ic2ero AMPL6:%61:613.doc P0gina * de 1(
Departamento de Estadstica e Investigacin Operativa Universidad de Valladolid
7. E0ercicios so*re los comandos print + printf.
&e trata de entender la diferencia entre los comandos print , printf < as! como entre los
atri#utos 8n , 8t.
s$: ampl
ampl: print R'oseRL
'ose
ampl: printf R'oseRL
'oseampl: printf R'oseInRL
'ose
ampl: printf R'ose pere; mateosRL
'ose pere; mateosampl: printf R'ose pere; mateosInRL
'ose pere; mateos
ampl: printf RIn'ose Inpere; InmateosInRL
'ose
pere;
mateos
ampl: printf RIn'ose Inpere; InmateosInInRL
'ose
pere;
mateos
ampl: printf RInIt'ose InItpere; InItmateosInInRL
'ose
pere;
mateos
ampl: printf RInIt'ose InItItpere; InItItItmateosInInRL
'ose
pere;
mateos
ampl:
9ic2ero AMPL6:%61:613.doc P0gina - de 1(
Departamento de Estadstica e Investigacin Operativa Universidad de Valladolid
Parte III: 1esolucin automati9ada o por lotes :*atch;.
creacin de un fichero .run.
1. Introduccin.
.na alternativa cmoda al modo interactivo usado anteriormente se tiene usando un
fic2ero .run. 7e este modo se indica de una sola ve; al procesador de comandos de AMPL
todo lo >ue >ueremos >ue 2aga. Es lo >ue se denomina e'ecucin por lotes. Para ello ponemos
tales comandos con'untamente en un fic2ero .run >ue e'ecutamos en el procesador de
comandos por medio de la instruccin inclu*e.
E'emplo para resolver el pro#lema de Pro#lema Lineal esta#lecido en la Parte II<
secciones 2 , 3 1modelo epl!cito3< suponiendo >ue 2emos guardado el fic2ero .mod en
7:IuserIe'emplo1.mod< se procede como sigue:.
+on el editor pfe32.ee creamos el fic2ero e'emplo1.run siguiente:
K intruccion para eliminar de la memoria de AMPL el modelo , los datos anteriores
resetL
K intruccion para enviar al procesador de AMPL el modelo actual
model 7:IusersIe'emplo1.modL
K intruccion para elegir solver 1en este caso elegimos el cple3
option solver cpleL
K intruccion para >ue el solver elegido actue
solveL
K intruccion para mostrar en pantalla los valores optimos de las varia#les indicadas
displa, 1< 2L
K intruccion para mostrar en pantalla el valor optimo de la funcion o#'etivo
displa, o#'etivoL
4ota: Es claro >ue podemos suprimir todas las l!neas de comentarios >ue siguen al signo K.
2. 6na forma pr<ctica de proceder.
.na forma sencilla de e'ecutar los comandos introducidos en el fic2ero de comandos
e'emplo1.run es la siguiente.
primero se guarda el arc2ivo con etensin .run< es decir< en nuestro caso el fic2ero
e'emplo1.run.
a continuacin se activa el fic2ero s$.ee , en el se escri#e ampl para >ue apare;ca el
prompt de AMPL 1ampl:3.
despuHs con el comando include se inclu,en en #lo>ue los comandos escritos en
e'emplo1.runL para ello se escri#e include seguido del camino o Spat2T >ue locali;a este
fic2ro en el ordenador. Por e'emplo< si 2emos guardado el fic2ero e'emplo1.run en el
disco 7< ponemos:
include 7:IusersIe'emplo1.runL
se pulsa la tecla return.
9ic2ero AMPL6:%61:613.doc P0gina / de 1(
Departamento de Estadstica e Investigacin Operativa Universidad de Valladolid
(. E0emplo resumen.
.na fic2ero . run con todo lo eplicado 2asta a>u! es el siguiente:
K fic2ero e'emplo1#.run
K fic2ero .run para un pro#lema de Programacion Lineal L
K inclusion de sufi'os , otros comandos
K intruccion para eliminar de la memoria de AMPL el modelo , los datos anteriores
resetL
K intruccion para enviar al procesador de AMPL el modelo actual
model 7:IusersIe'emplo1.modL
K intruccion para elegir solver 1en este caso elegimos el cple3
option solver cpleL
K intruccion para >ue el solver elegido actue
solveL
K instrucion para mostrar en pantalla un rotulo fi'o elegido por nosotros
printf RIn mostrar en pantalla los valores optimos de las varia#les indicadas IRL
K intruccion para mostrar en pantalla los valores optimos de las varia#les indicadas con sufi'os
displa, 1< 1.val< 1.l#< 1.u#< 1.rcL
displa, 2< 2.val< 2.l#< 2.u#< 2.rcL
K intruccion para mostrar en pantalla las restricciones indicadas con sufi'os
displa, res1< res1.#od,< res1.dual< res1.slacQL
displa, res2< res2.#od,< res2.dual< res2.slacQL
K intruccion para mostrar en pantalla el valor optimo de la funcion o#'etivo
displa, o#'etivoL
K intruccion para mostrar en pantalla las componentes del modelo actual 1varia#les< restricciones , o#'etivo3
s2o$L
K intruccion para mostrar en pantalla el modelo actual epandido 1sin las restriciones de no negatividad ni cotas3
epandL
4ota: Es claro >ue podemos suprimir todas las l!neas de comentarios >ue siguen al signo K.
2. Nota.
Puede resultar cmodo incluir en el fic2ero .run el camino o pat2 donde locali;ar el
propio fic2ero para luego copiarlo f0cilmente en la ventana s$.ee. Es decir< al final del
programa anterior< podemos a?adir:
K intruccin a copiar en el programa AMPL 1dentro de la ventana s$.ee3
K para facilitar a AMPL la u#icacin de este fic2ero
K include 7:IusersIe'emplo1#.runL
9ic2ero AMPL6:%61:613.doc P0gina F de 1(
Departamento de Estadstica e Investigacin Operativa Universidad de Valladolid
3. E0ercicios so*re pro*lemas mochila.
". #ochila continua sin cotas.
&e trata de resolver el pro#lema:
maimi;ar ;O1*M1J22M2J12M3J/M% L
su'eta a:
(M1J-M2J%M3J3M% NO 1%
1PO:< 2PO:< 3PO:< %PO:
= fichero mochila1.mod
K declaracion de las varia#les , de su no negatividad
var 1PO:L
var 2PO:L
var 3PO:L
var %PO:L
K declaracion de las restricciones
su#'ect to res1: (M1 J -M2 J %M3 J 3M% NO 1%L K la pala#ra res1 es elegi#le a gusto personal
K declaracion de la funcion o#'etivo K la pala#ra o#'etivo es elegi#le a gusto personal
maimi;e o#'etivo: 1*M1J22M2J12M3J/M% L
>. #ochila continua con cotas.
&e trata de resolver el pro#lema:
maimi;ar ;O1*M1J22M2J12M3J/M% L
su'eta a:
(M1J-M2J%M3J3M% NO 1%
:NO1NO1< :NO2NO1< :NO3NO1< :NO%NO1.
= fichero mochila2.mod
K declaracion de las varia#les< de su no negatividad , de sus cotas
var 1PO:<NO1L
var 2PO:<NO1L
var 3PO:<NO1L
var %PO:<NO1L
K declaracion de las restricciones
su#'ect to res1: (M1 J -M2 J %M3 J 3M% NO 1%L K la pala#ra res1 es elegi#le a gusto personal
K declaracion de la funcion o#'etivo K la pala#ra o#'etivo es elegi#le a gusto personal
maimi;e o#'etivo: 1*M1J22M2J12M3J/M% L
C. #ochila entera sin cotas.
&e trata de resolver el pro#lema:
maimi;ar ;O1*M1J22M2J12M3J/M% L
su'eta a:
(M1J-M2J%M3J3M% NO 1%
1PO:< 2PO:< 3PO:< %PO: , enteras.
= fichero mochila(.mod
K declaracion de las varia#les< de su no negatividad , de ser enteras
var 1PO:<integerL
var 2PO:<integerL
var 3PO:<integerL
var %PO:<integerL
K declaracion de las restricciones
su#'ect to res1: (M1 J -M2 J %M3 J 3M% NO 1%L K la pala#ra res1 es elegi#le a gusto personal
K declaracion de la funcion o#'etivo K la pala#ra o#'etivo es elegi#le a gusto personal
maimi;e o#'etivo: 1*M1J22M2J12M3J/M% L
9ic2ero AMPL6:%61:613.doc P0gina 1: de 1(
Departamento de Estadstica e Investigacin Operativa Universidad de Valladolid
?. #ochila *inaria.
&e trata de resolver el pro#lema:
maimi;ar ;O1*M1J22M2J12M3J/M% L
su'eta a:
(M1J-M2J%M3J3M% NO 1%
1< 2< 3< % #inarias.
= fichero mochila2.mod
K declaracion de las varia#les , de ser #inarias
var 1 #inar,L
var 2 #inar,L
var 3 #inar,L
var % #inar,L
K declaracion de las restricciones
su#'ect to res1: (M1 J -M2 J %M3 J 3M% NO 1%L K la pala#ra res1 es elegi#le a gusto personal
K declaracion de la funcion o#'etivo K la pala#ra o#'etivo es elegi#le a gusto personal
maimi;e o#'etivo: 1*M1J22M2J12M3J/M% L
9ic2ero AMPL6:%61:613.doc P0gina 11 de 1(
Departamento de Estadstica e Investigacin Operativa Universidad de Valladolid
Parte I@: Con0untos. Creacin de fichero .dat.
Para lo >ue sigue puede ser @til disponer de fic2eros en los >ue se dan e'emplos de modelos
concretos ,a ela#orados. En la p0gina de $$$.ampl.com se dispone de los siguientes de
-E)amples from the AML .oo/T.
A. .n mHtodo de #@s>ueda:
En la parte alta pinc2ar en B))D.
El la columna de la i;>uierda pinc2ar en e)amples%
Pinc2ar en .* filename%
B. )tro mHtodo de #@s>ueda:
En la parte alta pinc2ar en EUAMPLE&.
En el apartado SEamples from t2e AMPL #ooQT pinc2ar en .* filename%
1. Con0untos simples e /ndices.
A. Con0untos simples definidos e$pl/citamente.
El tipo m0s sencillo de con'unto est0 definido epl!citamente mediante sus elementos
como sucesin de caracteres. As! podemos definir en el arc2ivo .mod dos con'untos
mediante las declaraciones:
set )"I=E4E&L
set 7E&8I4)&L
, en el arc2ivo de datos 1 .dat3 especificar sus elementos del siguiente modo:
set )"I=E4E&:O orig1 orig2 orig3 L
set 7E&8I4)&:O dest1<dest2<dest3<dest%L
Esta forma de definicin de con'untos suele 2acerse slo para con'untos pe>ue?os<
donde< adem0s< se >uiere conservar el nom#re de los elementos.
B. Con0untos simples definidos impl/citamente. ndices.
Los tipos de con'untos m0s utili;ados son los con'untos de n@meros< , generalmente
van a corresponder a los con'untos de !ndices de un modelo. Por e'emplo< para definir
un con'unto de 12 elementos con nom#re origenes< #asta declarar:
set )"I=E4E&:O 1..12L
Aun>ue la anterior declaracin es v0lida< es m0s conveniente declarar en el modelo:
param mL
set )"I=E4E&:O 1..mL
, en el fic2ero de datos especificar:
param m:O12L
7e esta forma se logra la separacin efectiva entre el modelo , los datos.
+uando en la definicin de un con'unto interviene un periodo distinto de 1< esto
puede indicarse mediante la cl0usula .*< indicando el periodo. Por e'emplo< son
e>uivalentes:
set V.I4V.E4I)&:OW1FF:< 1FF(< 2:::< 2::(< 2:1:< 2:1(< 2:2:XL
set V.I4V.E4I)&:O1FF:..2:2: #, (L
9ic2ero AMPL6:%61:613.doc P0gina 12 de 1(
Departamento de Estadstica e Investigacin Operativa Universidad de Valladolid
2. Con0untos de pares ordenados.
A partir de con'untos simples es posi#le formar con'untos compuestos. El m0s sencillo de
todos ellos es el producto cartesiano o con'unto de pares ordenados. Es @til para mane'ar
matrices de datos como c
i'
o varia#les con dos !ndices como
i'.
Ea, varias formas de
mane'ar tales situaciones.
A. .orma impl/cita: no se da nom#re epl!citamente al nuevo con'unto< pero se definen
par0metros o varia#les so#re dic2o con'unto. Por e'emplo:
param coste W)"I=E4E&<7E&8I4)&XPO:L K indica el coste unitario del transporte
var 8ransp W)"I=E4E&<7E&8I4)&XPO:L K indica la cantidad a transportar
Este mHtodo se usa en el e'emplo >ue m0s adelante veremos en los fic2eros
transp%mod * transp%dat.
B. .orma e$pl/cita completa :se consideran todos los pares ordenados;: se da
nom#re epl!citamente al nuevo con'unto ,< en su caso< se definen par0metros o
varia#les so#re dic2o con'unto. Por e'emplo:
set ".8A&:OW)"I=E4E&< 7E&8I4)&XL
param coste W".8A&XPO:L K indica el coste unitario del transporte
var transp W".8A&XPO:L K indica la cantidad a transportar
+. .orma e$pl/cita imcompleta :no se consideran todos los pares ordenados;: se da
nom#re epl!citamente al nuevo con'unto ,< en su caso< se definen par0metros o
varia#les so#re dic2o con'unto. Por e'emplo:
set ".8A& $it2in W)"I=E4E&< 7E&8I4)&XL
param coste W".8A&XPO:L K indica el coste unitario del transporte
var 8ransp W".8A&XPO:L K indica la cantidad a transportar
(. Con0untos de nAuplas.
7e la misma forma >ue para pares< pueden definirse par0metros , varia#les con tres o
m0s !ndices< definiendo primero los con'untos simples , despuHs el producto cartesiano.
As!< por e'emplo< si se 2an definido tres con'untos con nom#res P")7.+8)&<
PE"I)7)& , ME8)7)&< , >ueremos definir una varia#le con tres !ndices
i'Q
#asta
poner:
var WP")7.+8)&< PE"I)7)&<ME8)7)&<XPO:L
, del mismo modo para los par0metros.
2. Par<metros + e$presiones.
Los datos de un modelo se introducen en este mediante su declaracin como par0metros.
&on posi#les varias situaciones:
A. Par0metros unidimensionales. Basta una declaracin del tipo:
param mL
B. Par0metros vectoriales. &e asocian a con'untos simples. &i 7E&8I4)& es un con'unto
simple< #asta una declaracin del tipo:
param demanda W7E&8I4)&XL
.na alternativa v0lida es poner:
param demanda Wi in 7E&8I4)&XL
+. Par0metros matriciales. &e asocian a con'untos de pares ordenados. &i ".8A& es un
con'unto de pares ordenados< #asta una declaracin del tipo:
param coste W".8A&XL
Alternativas v0lidas son:
param coste W1i<'3 in ".8A&XL
param coste Wi in )"I=E4E& < ' in 7E&8I4)&XL
En este @ltimo caso se supone >ue )"I=E4E& , 7E&8I4)& son con'untos simples.
9ic2ero AMPL6:%61:613.doc P0gina 13 de 1(
Departamento de Estadstica e Investigacin Operativa Universidad de Valladolid
1estricciones so*re par<metros.
1ver los apuntes 0reve introduccin al programa AML de Yes@s &0e; Aguado< de fec2a
1/ de fe#rero de 2::%< p. 113.
Par<metros calculados.
1ver los apuntes 0reve introduccin al programa AML de Yes@s &0e; Aguado< de fec2a
1/ de fe#rero de 2::%< p. 123.
E$presiones.
Para la construccin de modelos de optimi;acin un operador mu, utili;ado es sum< >ue
suma cierta epresin cuando se recorre los elementos de un con'unto< , corresponde a
los sumatorios en modelos matem0ticos. As! se pueden usar epresiones del tipo:
sum Wi in )"I=E4E&X ofertaZi[L
sum W' in 7E&8I4)&X demanda Z'[L
sum W1i<'3 in ".8A&X costeZi<'[L
sum Wi in )"I=E4E&< ' in 7E&8I4)&X costeZi<'[L
3. Comandos m<s utili9ados.
+omandos Accin

data Lee el contenido de un arc2ivo .dat.


displa* Muestra en pantalla los valores de con'untos< par0metros , varia#les.
e)pand Epande el modelo actual.
include Inclu,e fic2eros eternos.
model Lee el contenido de un arc2ivo .mod.
printf Muestra en pantalla tetos con formato.
reset Elimina de la memoria de AMPL el modelo , los datos anteriores.
reset data Elimina de la memoria de AMPL los datos anteriores.
sho! Muestra las componentes del modelo actual.
solve "esuelve el modelo actual.
4. E0ercicios so*re la teor/a anterior.
A. El pro#lema del transporte 1Cinston p. 33-3.
B. El pro#lema de la dieta 1Cinston p. -F3.
+. El pro#lema de produccin 1ver los apuntes 0reve introduccin al programa AML de
Yes@s &0e; Aguado< de fec2a 1/ de fe#rero de 2::%< p. 2(23.
7. El pro#lema de flu'o con coste m!nimo 1Cinston p. %%( o alguno de los enunciados
en la p. %(23.
E. El pro#lema del camino m0s corto 1Cinston p. 3F*3.
9. El pro#lema de flu'o m0imo 1Cinston p. %:23.
9ic2ero AMPL6:%61:613.doc P0gina 1% de 1(
Departamento de Estadstica e Investigacin Operativa Universidad de Valladolid
Parte @: &tros comandos
1. El comando LE,.
A. &irve para asignar o cam#iar el valor de un par0metro ,a declarado.
B. E'emplo para un par0metro simple.
param aL
let a:O(L
displa, aL
let a:O1:L
+. E'emplo para un par0metro vectorial. &upongamos >ue se tiene declarado el con'unto
7E&8I4)& , so#e el mismo los parametros oferta , demanda. +onocido este @ltimo<
podemos poner:
let Wi in 7E&8I4)&X oferaZi[:OdemandaZi[L
2. El comando .&1.
A. &irve para e'ecutar repetidamente una serie de comandos 1#ucle3 >ue se escri#e entre
llaves< es decir< en la forma W serie de comandosX.
B. E'emplo sencillo.
for Wi in 1..nX Wserie de comandosX.
+. E'emplo si se tiene un con'unto simple cual>uiera< llamHmosle +)48A7)".
for Wi in +)48A7)"X Wserie de comandosX.
7. E'emplo m0s comple'o. &upongamos >ue en un modelo 2a, un par0metro llamado
tasa , >ueremos resolver el modelo para los siguientes valores de tasa: /< F< 1:< 11 ,
12. Puede 2acerse lo siguiente:
set 5AL)"E&:O / F 1: 11 12L
for Wt in 5AL)"E&X
Wlet tasa:OtL
solveL
displa,L
X
(. E0ercicios.
A. 7el pro#lema del +PM 1ver fic2ero lasana:3.doc en mi p0gina $e#3.
B. 7el pro#lema del PE"8.
2. &tros e0ercicios.
9ic2ero AMPL6:%61:613.doc P0gina 1( de 1(

You might also like