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(