You are on page 1of 28

Lenguaje AMPL.

Pedro Luis Luque Marzo de 2000. Versi on: 2a

Tabla de Contenido
1 Lenguaje AMPL. 1.1 Reglas l exicas de AMPL. . . . . . . . . . . . . . 1.2 Los elementos de un conjunto. . . . . . . . . . . 1.3 Expresiones que indexan y sub ndices. . . . . . 1.4 Expresiones aritm eticas, l ogicas y de conjuntos. 1.5 Declaraciones de elementos del modelo. . . . . 1.6 Especicaci on de datos. . . . . . . . . . . . . . 1.7 Comandos del lenguaje. . . . . . . . . . . . . . 1.8 Optimizadores. . . . . . . . . . . . . . . . . . . 2 Entorno AMPL para Msdos. 3 Entorno AMPL para Windows: AMPL Plus. 3.1 Componentes de AMPL Plus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Resoluci on de problemas en AMPL Plus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3 4 4 5 8 12 20 22 23 24 25 27

Lenguaje AMPL.

AMPL es un lenguaje de modelado algebraico para programaci on matem atica: un lenguaje capaz de expresar en notaci on algebraica problemas de optimizaci on tales como los problemas de programaci on lineal. Veamos un peque no ejemplo. Ejemplo 1.1. Una compa n a fabrica tres productos, P1 , P2 y P3 , que precisan para su elaboraci on dos materias primas, M1 y M2 . Las disponibilidades semanales de estas materias son 25 y 30 unidades, respectivamente. El benecio neto que proporciona cada unidad de producto, as como las unidades de materia prima que necesita para su elaboraci on, vienen dados en la siguiente tabla: M1 M2 Benecio (u.m.) 1 P1 1 2 2 P2 2 1 6 P3 2 3 3

Planicar la producci on semanal de forma que se maximice el benecio. Soluci on: Sean x1 , x2 , x3 (xi ) la cantidad producida de P1 , P2 , P3 respectivamente (Pi , i = 1, 2, 3). El problema a resolver ser a el siguiente: max z = 2x1 + 6x2 + 3x3 s.a. x1 + 2x2 + 2x3 2x1 + x2 + 3x3 x1 , x 2 , x 3 25 30 0

El modelo (modelo+datos) escrito en AMPL del ejemplo (1.1) fue el siguiente: # FABRICACION DE 3 PRODUCTOS CON 2 MATERIAS PRIMAS # VARIABLES DE DECISION Y RESTRICCIONES NO NEGATIVIDAD var x1 >= 0; var x2 >= 0; var x3 >= 0; # FUNCION OBJETIVO DEL MODELO maximize z : 2* x1 + 6* x2 + 3* x3 ; # RESTRICCIONES DEL MODELO s u b j e c t to restriccion1 : x1 + 2* x2 + 2* x3 <= 25; s u b j e c t to restriccion2 : 2* x1 + x2 + 3* x3 <= 30; Tabla 1: Modelo b asico del ejemplo. 1.0.1 Ejemplo en AMPL.

La gran potencia del lenguaje AMPL est a 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 1.1 desde este punto de vista. El modelo general con n productos y con m materias primas podr amos escribirlo de la siguiente manera: max s.a. z = c 1 x1 + c 2 x2 + . . . + c n xn a11 x1 + . . . + a1n xn a21 x1 + . . . + a2n xn . . . am1 x1 + . . . + amn xn x1 , x 2 , . . . , x n O de forma m as abreviada: max s.a. z=
n j =1 cj xj n j =1 aij xj

b1 b2 . . . bm 0

xj

bi , i = 1, . . . , m 0, j = 1, . . . , n

(1)

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 cheros. En el chero del modelo aparecer a: 2

# MODELO: EJEMPLO1.MOD # FABRICACION DE n PRODUCTOS CON m MATERIAS PRIMAS # PARAMETROS DEL MODELO param n >=0, i n t e g e r ; param m >=0, i n t e g e r ; # CONJUNTOS DE INDICES s e t PRODUCTOS := 1 ..n ; s e t MPRIMAS := 1 ..m ; # VARIABLES DE DECISION Y RESTRICCIONES NO NEGATIVIDAD var x { j i n PRODUCTOS } >= 0; # MAS PARAMETROS DEL MODELO param c { i i n PRODUCTOS }; param b { j i n MPRIMAS }; param a {( i , j ) i n { MPRIMAS , PRODUCTOS }}; # FUNCION OBJETIVO DEL MODELO maximize z : sum { j i n PRODUCTOS } c [ j ]* x [ j ]; # RESTRICCIONES DEL MODELO s u b j e c t to restriccion { i i n MPRIMAS } : sum { j i n PRODUCTOS } a [ i , j ]* x [ j ] <= b [ i ]; Tabla 2: Modelo general del ejemplo. Y el chero de datos para nuestro ejemplo particular ser a: # DATOS: EJEMPLO1.DAT param n := 3; param m := 2; param c := 1 2 2 6 3 3; param a : 1 2 3:= 1 1 2 2 2 2 1 3; param b := 1 25 2 30; Tabla 3: Datos para el ejemplo. Podr amos escribir un chero de datos con valores diferentes y resolverlo junto al modelo general (por ejemplo con n = 4 y m = 5).

1.1

Reglas l exicas de AMPL.

Los modelos AMPL envuelven variables, restricciones, y objetivos, expresados con la ayuda de conjuntos y par ametros. A todos se les llama elementos del modelo. Cada elemento del modelo tiene un nombre alfanum erico (una cadena de uno o m as letras, d gitos, y caracteres de subrayado): x1, z, restriccion1. Nota: las letras may usculas son distintas de las letras min usculas en AMPL. Existen dos tipos de constantes: 3

Constantes num ericas: 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 etica en AMPL tiene la misma precisi on (sobre la mayor a de las m aquinas tiene doble precisi on). 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 nalizada con un punto y coma (;). Los comentarios comienzan con # y se extienden hasta el nal de la l nea, o se pueden delimitar entre /* y */, en cuyo caso pueden extenderse m as de una l nea.

1.2

Los elementos de un conjunto.

Un conjunto contiene cero o m as elementos o miembros, cada uno de los cuales es una lista ordenada de una o m as componentes. Cada miembro de un conjunto debe ser distinto. Todos los miembros deben tener el mismo n umero de componentes; a este n umero com un se le conoce como dimensi on 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 on uno, los miembros son simplemente constantes num ericas o constantes de cadena, o cualquier expresi on cuyo valor sea un n umero 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 entesis: {(" 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 erico es el resultado de redondear su representaci on decimal por un valor real de precisi on limitada. Los miembros num ericos que parecen diferentes pero que al ser redondeados al valor de precisi on limitada son el mismo, tales como 1 y 0.01E2, son considerados iguales.

1.3

Expresiones que indexan y sub ndices.

Muchos elementos de AMPL pueden denirse como colecciones indexadas sobre un conjunto; los miembros individuales son seleccionados al a nadir un sub ndice al nombre del elemento. El rango de posibles sub ndices es indicado por una expresi on que indexa en la declaraci on del modelo. Operadores de reducci on, tales como sum, tambi en usan expresiones que indexan para especicar conjuntos sobre los que las operaciones son iteradas. Un sub ndice es una lista de expresiones simb olicas o num ericas, separadas por comas y encerradas entre corchetes, como en: demanda [ i ] costos [ j , p [ k ]," O -"] Cada expresi on con sub ndices debe evaluar a un n umero o a un literal. El valor resultante o secuencia de valores debe dar un miembro de un conjunto de ndices unidimensional o multidimensional. Una expresi on que indexa es una lista de expresiones de conjunto separadas por comas, seguida opcionalmente por dos puntos : y una expresi on l ogica, todo encerrado entre llaves: Expresiones que indexan: 4

{ lista de expresiones de conjuntos } { lista de expresiones de conjuntos : expresi o n l o gica } lista de expresiones de conjuntos: expresi o n de conjuntos miembro - ciego i n expresi o n de conjuntos lista de expresiones de conjuntos , lista de expresiones de conjuntos Cada expresi on de conjunto puede ser precedida por un miembro ciego y la palabra clave in. Un miembro ciego para un conjunto unidimensional es un nombre no referenciado, es decir, un nombre no denido hasta ese punto. Un miembro ciego para un conjunto multidimensional es una lista separada por comas, encerrada entre par entesis, de expresiones o nombres no referenciados; la lista debe incluir al menos un nombre no referenciado. Un miembro ciego introduce uno o m as ndices ciegos (nombres no referenciados en sus componentes), cuyo campo, o rango de denici on, comienza en la siguiente expresi on de conjunto; el campo de un ndice corre a trav es del resto de la expresi on que indexa, hasta el nal de la declaraci on usando la expresi on que indexa, o hasta el nal del operando que usa la expresi on que indexa. Cuando un miembro ciego tiene una o m as expresiones componentes, los ndices ciegos del miembro ciego var an sobre una proyecci on del conjunto; es decir, ellos toman todos los valores para que el miembro ciego pertenezca al conjunto. {A} # todos los elementos de A {A,B} # todos los pares, uno de A, uno de B {i in A, j in B} # el mismo que antes { i i n A , C [ i ]} # el mismo que antes {i in A , ( j,k) in D} # 1 de A y 1 (un par) de D { i i n A : p [ i ]>30} # todo i de A tal que p[i] sea mayor que 30 { i i n A , j i n C [ i ]: i <= j } # nota: i y j deben ser num ericos { i i n A , ( i , j ) i n D : i <= j } # todos los pares con i en A y i,j en D # (mismo valor de i) e i menor o igual que j El argumento opcional : expresi on l ogica en una expresi on que indexa, selecciona solamente los miembros que verican la expresi on l ogica y excluye a los dem as. La expresi on l ogica t picamente envuelve uno o m as ndices ciegos de la expresi on que indexa.

1.4

Expresiones aritm eticas, l ogicas y de conjuntos. Funciones matem aticas.

En las expresiones l ogicas y aritm eticas de AMPL, pueden combinarse varios elementos. A partir de ahora consideraremos que una expresi on que puede contener variables se representar a como vexpr. Una expresi on que no puede contener variables se denota como expr y algunas veces ser a llamada expresi on constante, a pesar de que pueda contener ndices ciegos. Una expresi on l ogica, representada como lexpr, puede contener variables s olo cuando es parte de una expresi on if que produzca una vexpr. Las expresiones de conjuntos ser an denotadas como sexpr. Los operadores aritm eticos, l ogicos y de conjuntos, en orden de precedencia creciente, se muestran en la tabla 4. Los valores num ericos que aparecen como expresiones l ogicas valen falso (false) si es 0, y verdadero (true) para cualquier otro valor num erico. 1.4.1 Expresiones Aritm eticas.

Las expresiones aritm eticas son construidas con los operadores aritm eticos usuales, con funciones de AMPL, y con operadores de reducci on aritm eticos como sum:

Nombre if ... then ... else or, || exists, forall and, && <, <=, =, ==, <>,=!, >=, > in, not in within, not within not,! union, di, symdi inter cross setof .. by +, -, less sum, prod, min, max *, /, div, mod +, , **

Tipo A,S L L L L L L L S S S S A A A A A

Notas A: si no hay else, se supone else 0 S: es obligatorio else sexpr o l ogico operadores de reducci on l ogica y l ogico operadores relacionales pertenencia a un conjunto S within T signica S T negaci on l ogica symdi es la diferencia sim etrica intersecci on producto cartesiano constructor de conjuntos a less b = max(a b, 0) operadores de reducci on aritm etica div cociente entero m as y menos unario exponenciaci on

Tabla 4: Operadores aritm eticos (A), l ogicos (L) y de conjuntos (S). numero variable expresi on op.aritm e tico expresi o n (+,-, l e s s ,*,/,mod, div ,^,**) unario expres on funci o n ( lista de expresiones ) i f lexpr then vexpr [ e l s e vexpr ] operador - reducci on expres o n que indexa (sum , prod , max, min ) { expr } Las funciones aritm eticas incorporadas en AMPL se muestran en la tabla 5 y tabla 6. Sintaxis Beta(a,b) Cauchy() Exponential() Gamma(a) Irand224() Normal(, ) Normal01() Poisson() Uniform(m,n) Uniform01() Signicado xa1 (1 x)b1 /((a)(b)/(a + b)), x [0, 1] 1/( (1 + x2 )) ex , x > 0 xa1 ex /(a), x 0, a > 0 Uniforme entera en [0, 224 ) N (, ) varianza N (0, 1) e k /k !, k = 0, 1, . . . Uniforme[m, n) Uniforme[0, 1)

Tabla 5: Funciones de generaci on de var. aleatorias en AMPL.

Sintaxis abs(x) acos(x) acosh(x) asin(x) asinh(x) atan(x) atan2(y,x) atanh(x) ceil(x) cos(x) exp(x) oor(x) log(x) log10(x) max(x,y,...) min(x,y,...) sin(x) sinh(x) sqrt(x) tan(x) tanh(x) precision(x,n) round(x,n) round(x) trunc(x,n) trunc(x)

Signicado valor absoluto cos1 (x) cosh1 (x) sin1 (x) sinh1 (x) tan1 (x) tan1 (y/x) tanh1 (x) entero mayor m as cercano coseno exponencial menor entero m as cercano loge (x) log10 (x) m aximo m nimo seno seno hiperb olico ra z cuadrada tangente tangente hiperb olica x x x x x redondeada a n cifras signicativas redondeado a n d gitos despu es del punto decimal redondeado al entero m as cercano truncado a n d gitos despu es del punto decimal truncado a un entero

Tabla 6: Funciones aritm eticas en AMPL. Sobre los operadores de reducci on aritm etica: La palabra clave sum debe seguirle cualquier expresi on que indexa. La expresi on aritm etica siguiente se eval ua una vez para cada miembro del conjunto de ndices, y todos los valores resultantes se suman. El operador sum tiene menor precedencia que *, as podemos escribir: sum { i i n ORIG , j i n DEST , p i n PROD } costo [ i , j , p ] * Trans [ i , j , p ] representa el total de costo[i,j,p] * Trans[i,j,p] sobre todas las combinaciones de or genes, destinos y productos. Otros operadores aritm eticos iterados son prod para la multiplicaci on, min para el m nimo, y max para el m aximo. Como ejemplo, podr amos usar: max { i i n ORIG } oferta [ i , p ] para describir la mayor oferta del producto p de todos los or genes. 1.4.2 Expresiones L ogicas.

Las expresiones l ogicas aparecen donde se requiera un valor: verdadero o falso. Por ejemplo, en el comando check, en la parte tal que de las expresiones que indexan (sigue a los :), y en 7

if lexp then ... Las expresiones l ogicas pueden ser de la siguiente forma (lexpr): expr expr oper -- compara expr lexpr oper -- logico lexpr not lexpr miembro i n sexpr miembro not i n sexpr sexpr within sexpr sexpr not within sexpr e x i s t s indexado lexpr f o r a l l indexado lexpr { lexpr } El operador exists, cuando se aplica sobre un conjunto vac o, devuelve falso y el operador forall devuelve verdadero. 1.4.3 Expresiones de conjunto.

Las expresiones de conjuntos (sexpr) que producen conjuntos pueden tener uno de los siguientes formatos: { [ miembro [ , miembro ... ] ] } sexpr op -- conjunto sexpr ( union d i f f symdiff i n t e r c r o s s ) union indexado sexpr i n t e r indexado sexpr expr .. expr [ by expr ] s e t o f indexado miembro i f lexpr then sexpr e l s e sexpr ( sexpr ) interval conj -- predefinido indexado Podemos ver el uso del operador setof, en el siguiente ejemplo: ampl : s e t y := s e t o f { i i n 1 ..5 } ( i , i ^2); ampl : d i s p l a y y ; set y := (1,1) (2,4) (3,9) (4,16) (5,25);

1.5

Declaraciones de elementos del modelo.


elemento nombre [alias] [exp. indexada] [cuerpo] ;

La declaraci on 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 s u b j e c t to , subj to , s . t . node 8

Si se suprime el nombre del elemento se supone que es subject to. Las declaraciones pueden aparecer en cualquier orden, con la excepci on de que cada nombre debe estar declarado antes de ser usado. Para las declaraciones de variables, restricciones y objetivos, se permite una forma especial de expresi on indexada: { if lexpr} Si la expresi on l ogica lexpr es verdad, entonces el resultado es un elemento simple (no indexado); en otro caso el elemento es excluido del modelo. 1.5.1 Declaraci on de conjuntos.

La declaraci on de un conjunto del modelo tiene el siguiente formato general: set nombre [alias] [exp. indexada] [atributos] ; en la que atributos es un lista de atributos opcionalmente separada por comas. Los cuales pueden ser (sexpr indica una expresi on de conjuntos): dimen n within sexpr := sexpr d e f a u l t sexpr La frase := especica un valor para el conjunto; esto implica que el conjunto no ser a denido posteriormente en una l nea de instrucciones espec ca para datos (:= y default son mutuamente exclusivas). El conjunto vac o se indica con: {}. Existe la funci on card(S) la cual da el n umero de elementos del conjunto S. Tambi en se pueden realizar operaciones entre conjuntos, como: s e t A := 1 ..n ; s e t B := i..j by k ; s e t C := A d i f f B ; s e t D := A union B ; s e t E := A i n t e r B ; s e t F := A symdiff B ; Se pueden denir conjuntos con innitos elementos (Nota: no se puede iterar sobre conjuntos innitos), los cl asicos intervalos cerrados, abiertos o semicerrados, bien de n umeros reales (interval [a,b]) o bien de n umeros enteros (integer [a,b]). Nota: la palabra interval puede omitirse. 1.5.2 Declaraci on de par ametros.

La declaraci on de un par ametro del modelo tiene el siguiente formato general: param nombre [alias] [exp. indexada] [atributos] ; en la que atributos es un lista de atributos opcionalmente separada por comas. Los cuales pueden ser (sexpr indica una expresi on de conjuntos): binary integer symbolic oprel expr i n sexpr := expr d e f a u l t expr 9

donde oprel puede ser: < <= = == != <> > >= El atributo in especica un chequeo para ver que el par ametro se encuentra en el conjunto dado. Los par ametros indexados pueden denirse de forma recursiva. Por ejemplo: param comb n sobre k { n i n 0 ..N , k i n 0 ..n } := i f k =0 or k = n then 1 e l s e comb [ n -1, k -1] + comb [ n -1, k ]; Innity es un par ametro predenido; al igual que -Innity. 1.5.3 Declaraci on de variables.

La declaraci on de una variable del modelo tiene el siguiente formato general: var nombre [alias] [exp. indexada] [atributos] ; en la que atributos es un lista de atributos opcionalmente separada por comas. Los cuales pueden ser (vexpr indica una expresi on de variables): binary integer >= expr <= expr := expr d e f a u l t expr = vexpr coeff [ exp.indexada ] restricci o n vexpr cover [ exp. indexada ] restricci on obj [ exp. indexada ] objetivo vexpr Las frases >= y <= especican 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 ca para datos. Las frases coeff y obj se utilizan para la generaci on de coecientes por columnas; estas especican los coecientes que ser an colocados en la restricci on indicada u objetivo indicado, el cual debe ser previamente referenciado usando to come. Una frase cover es equivalente a la frase coeff pero con vexpr igual a 1. 1.5.4 Declaraci on de restricciones.

La declaraci on de una restricci on del modelo tiene el siguiente formato general: [subject to] nombre [alias] [exp. indexada] [ := dual--inic] [default dual--inic] [ : expr restriccion]; La frase opcional := dual--inicial especica un valor inicial para la variable dual (multiplicador de Lagrange) asociado con la restricci on. La expresi on de restricci on debe estar en uno de los siguientes formatos: vexpr <= vexpr vexpr = vexpr vexpr >= vexpr expr <= vexpr <= expr expr >= vexpr >= expr

10

Para permitir la generaci on de coecientes por columna para la restricci on, una de las vexprs puede tener una de las siguientes formas: to come + vexpr vexpr + to come to come Los t erminos de esta restricci on que se especican en una declaraci on var son colocados en la posici on de to come. 1.5.5 Declaraci on de objetivos.

La declaraci on de un objetivo del modelo tiene el siguiente formato general: maximize nombre [alias] [exp. indexada] [: expresion] ; minimize nombre [alias] [exp. indexada] [: expresion] ; y puede especicarse una expresi on en una de las siguientes formas: vexpr to come + vexpr vexpr + to come to come La forma to come permite la generaci on de coecientes por columna, como con las restricciones. 1.5.6 Notaci on de sujos para valores auxiliares.

Las variables, restricciones, y objetivos tienen una variedad de valores auxiliares asociados, a los cuales se puede acceder a nadiendo al nombre uno de los siguientes sujos dependiendo del tipo de elemento del modelo. .init .init0 .lb .lb0 .lrc .lslack .rc .slack .ub .ub0 .urc .uslack .val Sujos para variables valor actual inicial valor inicial inicial (x0 j) cota inferior actual cota inferior inicial (lj ) costo reducido menor (.rc, xj lj ) menor holgura (xj lj ) costo reducido: (zj cj ) min(lslack,uslack) cota superior actual cota superior inicial (uj ) costo reducido superior (.rc, xj uj ) holgura superior (uj xj ) valor actual (xj )

11

.body .dinit .dinit0 .dual .lb .ldual .lslack .slack .ub .udual .uslack

Sujos para restricciones valor actual del cuerpo de la restricci on (Ai x) valor inicial actual para la variable dual 0 valor inicial inicial para la variable dual (wi ) variable dual actual (wi ) cota inferior (rli ) valor dual menor (.dual, Ai x rli ) holgura menor (Ai x rli ) min(lslack,uslack) cota superior (rui ) valor dual superior (.dual, Ai x rui ) holgura superior (rui Ai x) Sujos para objetivos .val valor actual

1.6

Especicaci on de datos.

Hay que tener en cuenta que: La lectura de datos se inicializa con el comando: data. Por ejemplo: ampl : data diet.dat ; lee comandos de datos de un chero llamado diet.dat. AMPL trata cualquier secuencia de espacios, tabuladores y caracteres de nueva l nea como un solo espacio. El nal de cualquier comando de datos se indica por un punto y coma ;. 1.6.1 Datos en conjuntos. Conjuntos unidimensionales. Un conjunto simple set set set se especica al listar sus miembros. ORIG := SE MD BA ; DEST := CA CO HU AL JA MA GR ; PROD := plato cuchillo tenedor ;

Si un conjunto se ha declarado con el atributo ordered o circular, debemos listar sus miembros en orden: s e t SEMANAS := 27 sep93 04 oct93 11 oct93 18 oct93 ; Si una cadena de la lista incluye caracteres distintos de letras, d gitos, signo de subrayado ( ), punto, + y -, debe ser cerrado entre comillas: s e t ALMACEN := " A & P " JEWEL VONS ; Tambi en para distinguir cuando un n umero queremos que sea una cadena (+1 o 3e4), este debe ser encerrado entre comillas. Los miembros de un conjunto deben ser todos diferentes; AMPL avisar a de la existencia de elementos duplicados. Los n umeros que tienen la misma representaci on en el ordenador ser an considerados como iguales. 12

Para una colecci on indexada de conjuntos, los miembros de cada conjunto de la colecci on se especicar an individualmente. s e t PROD ; s e t AREA { PROD }; s e t PROD := plato cuchillo ; s e t AREA [ plato ] := este norte ; s e t AREA [ cuchillo ] := este oeste export ; Podemos especicar expl citamente que uno o m as de esos conjuntos es vac o, al dar una lista vac a; poniendo el punto y coma justo despu es del operador :=. Si queremos que AMPL suponga que cada conjunto es vac o excepto si se especica otra cosa, incluyendo una frase default en el modelo: s e t AREA { PROD } d e f a u l t {}; En otro caso ser amos avisados de que la especicaci on de los miembros de un conjunto no se ha realizado. Conjuntos de dos dimensiones. Para un conjunto de pares, los miembros pueden especicarse de varias maneras: s e t ORIG ; s e t DEST ; s e t LINKS within { ORIG , DEST }; 1. lista de pares s e t LINKS ( SE , CO ) ( MD , CO ) ( BA , CA ) := ( SE , HU ) ( SE , JA ) ( SE , GR ) ( MD , CA ) ( MD , HU ) ( MD , AL ) ( MD , JA ) ( MD , GR ) ( BA , AL ) ( BA , JA ) ( BA , MA ) ;

2. lista de pares, sin los par entesis y las comas s e t LINKS := SE CO SE HU SE JA MD CO MD HU MD AL BA CA BA AL BA JA

SE GR MD CA MD JA MD GR BA MA ;

3. Un conjunto de pares puede especicarse en una tabla tambi en de la siguiente forma: s e t LINKS : CA CO HU AL JA MA GR := SE + + + + MD + + + + + + BA + + + + - ; Un signo + indica un par que est a en el conjunto, y un signo - indica que no est a ese par. Normalmente las las son etiquetadas con la primera componente, y las columnas con la segunda. Si preferimos lo opuesto, podemos indicar una tabla traspuesta al a nadir (tr) despu es del nombre del conjunto: s e t LINKS ( t r ): SE MD BA := CA + + CO + + HU + + 13

AL JA MA GR

+ +

+ + +

+ + + - ;

Las tablas son m as convenientes para conjuntos que son relativamente densos. En otro caso la lista de pares va mejor; y es tambi en m as f acil de generar por un programa. 4. Otra forma de describir un conjunto de pares es listar todas las segundas componentes que unen con cada primera componente: s e t LINKS := ( SE ,*) CO HU JA GR ( MD ,*) CA CO HU AL JA GR ( BA ,*) CA AL JA MA ; Se podr a hacer listando todas las primeras componentes que unen con cada una de las segundas componentes: (*,CA) MD BA. Cada comod n * es seguido por una lista, cuyas entradas son sustituidas por el * para generar pares en el conjunto. Conjuntos multidimensionales. Utilizamos los siguientes ejemplos, para ver las distintas formas de denir conjuntos multidimensionales: s e t RUTAS within { ORIG , DEST , PROD }; s e t RUTAS := ( SE , HU , cuchillo ) ( SE , JA , cuchillo ) ( SE , GR , cuchillo ) ( MD , CA , plato ) ( MD , CA , cuchillo ) ( MD , CO , plato ) ... ; s e t RUTAS := SE HU cuchillo SE JA cuchillo SE GR cuchillo MD CA plato MD CA cuchillo MD CO plato ... ; s e t RUTAS := ( MD ,*, plato ) ( BA ,*, plato ) ... ;

CA CO HU JA GR CA AL JA MA

s e t RUTAS := (*, CA ,*) MD plato (*, CO ,*) MD plato ... ; s e t RUTAS := (*,*, plato ): CA SE MD + BA +

MD cuchillo MD cuchillo

BA plato

CO HU AL JA + + + 14

MA GR := + + + + -

(*,*, cuchillo ): CA SE MD + + BA Tambi en se puede usar la notaci on (tr). 1.6.2 Datos de par ametros.

CO HU AL + + + -

JA MA GR := + + + + - ;

Para un par ametro escalar (no indexado), la asignaci on de un valor ser a: param avail := 40; Par ametros unidimensionales. La forma m as simple para dar datos para un par ametro indexado es por medio de una lista. Para un par ametro indexado sobre un conjunto simple: s e t PROD ; param valor { PROD } > 0; Cada elemento de la lista de datos consta de un miembro del conjunto y de un valor: s e t PROD := plato cuchillo tenedor ; param valor := plato 200 cuchillo 140 tenedor 160 ; equivalentemente: param valor := plato 200, cuchillo 140, tenedor 160 ; A menudo necesitamos datos para varios par ametros que est an indexados sobre el mismo conjunto, en esta situaci on puede escribirse: param valor := plato 200 cuchillo 140 tenedor 160 ; param benefi := plato 25 cuchillo 30 tenedor 29 ; param market := plato 6000 cuchillo 4000 tenedor 3500 ; o param : valor benefi market := plato 200 25 6000 cuchillo 140 30 4000 tenedor 160 29 3500 ; Los dos puntos despu es de la palabra clave param es obligatoria; indica que damos valores para varios par ametros. Si se sigue con el nombre del conjunto PROD y otros dos puntos: param : PROD : valor benefi market := plato 200 25 6000 cuchillo 140 30 4000 tenedor 160 29 3500 ; entonces los elementos del conjunto PROD son denidos tambi en con este comando, evitando as la denici on con el comando set PROD; el efecto es combinar las especicaciones del conjunto y los tres par ametros indexados sobre el. Par ametros bidimensionales. Los valores de un par ametro indexado sobre dos conjuntos, son generalmente introducidos como: 15

s e t ORIG ; s e t DEST ; param costo { ORIG , DEST } >= 0; data param costo : CA CO HU AL JA MA GR := SE 39 14 11 14 16 82 8 MD 27 9 12 9 26 95 17 BA 24 14 17 13 28 99 20 ; Las etiquetas en las las dan el primer ndice y las etiquetas de la columna dan el segundo ndice, as por ejemplo, costo["SE","CA"] se ha denido a 39. Podemos usar la notaci on (tr): param costo ( t r ): SE MD BA := CA 39 27 24 CO 14 9 14 ... ; Cuando son tablas grandes pueden utilizarse caracteres de nueva l nea en cualquier lugar, o tambi en emplear el siguiente formato: param costo : CA CO HU AL := SE 39 14 11 14 MD 27 9 12 9 BA 24 14 17 13 : JA MA GR := SE 16 82 8 MD 26 95 17 BA 28 99 20 ; Los dos puntos indica el comienzo de cada nueva subtabla; cada una tiene las mismas etiquetas de las, pero diferentes etiquetas de columna. El par ametro no tiene porque estar indexado sobre todas las combinaciones de miembros de ORIG y DEST, sino tan s olo de un subconjunto de esos pares: s e t LINKS within { ORIG , DEST }; param costo { LINKS } >= 0; Denidos como vimos en la secci on anterior el conjunto LINKS, los valores de los par ametros podr an darse como: param costo : CA CO HU AL JA MA GR := SE . 14 11 . 16 . 8 MD 27 9 12 9 26 . 17 BA 24 . . 13 28 99 . ; Donde un + indica un miembro del conjunto, la tabla para costo da un valor. Donde un - indica que no pertenece, la tabla contiene un punto .. El punto puede aparecer en cualquier tabla AMPL para indicar valor no especicado aqu . Podemos usar un s mbolo diferente, por ejemplo , al incluir el siguiente comando en data: defaultsym "--"; Podemos desactivarlo al introducir el comando: nodefaultsym ; Tambi en podr amos introducir los datos del siguiente modo: param costo := SE CO 14 SE HU 11 SE JA 16 SE GR 8 16

MD CA 27 ... ; Cuando un par ametro est a indexado sobre un subconjunto poco denso de pares, una lista puede ser m as compacta y legible que la representaci on tabular, la cual estar a formada mayoritariamente por puntos. El formato de lista es tambi en m as f acil de programar para generarla con programas externos. Otra ventaja del formato lista es que, como en el caso unidimensional, los datos para varias componentes pueden darse juntos: param : LINKS : costo limit := SE CO 14 1000 SE HU 11 800 SE JA 16 1200 SE GR 8 1100 MD CA 27 1200 MD CO 9 600 MD HU 12 900 MD AL 9 950 MD JA 26 1000 MD GR 17 800 BA CA 24 1500 BA AL 13 1400 BA JA 28 1500 BA MA 99 1200 ; Esta tabla da simult aneamente los miembros de LINKS y los valores para costo, y tambi en los valores para otros par ametros, limit, que est a tambi en indexado sobre LINKS. Finalmente, la lista de datos para costo puede escribirse m as concisamente al organizarla en trozos, como se mencion o para los miembros del conjunto LINKS en la secci on previa. s e t LINKS := ( SE ,*) CO HU JA GR ... ; param costo := [ SE ,*] CO 14 HU 11 JA 16 GR 8 [ MD ,*] CA 27 CO 9 HU 12 AL 9 JA 26 GR 17 [ BA ,*] CA 24 AL 13 JA 28 MA 99 ; Par ametros multidimensionales. Podr amos introducirlos de las siguientes formas: s e t ORIG ; s e t DEST ; s e t PROD ; s e t RUTAS within { ORIG , DEST , PROD }; param costo { RUTAS } >= 0; lista simple param MD MD uso de trozos param

costo := CO plato 9 MD CO cuchillo 8 MD CA plato 27 CA cuchillo 23 MD GR plato 17 ... ; costo := 17

[ MD ,*, plato ] CA 27 CO 9 HU 12 JA 26 GR 17 [ BA ,*, plato ] CA 24 AL 13 JA 28 MA 99 ... ; uso de trozos param costo := [*, CA ,*] MD plato 27 MD cuchillo 23 BA plato 24 [*, CO ,*] MD plato 9 MD cuchillo 8 ... ; uso de trozos 2 dimensiones y tablas param costo := [*,*, plato ]: CA CO HU AL JA MA GR := MD 27 9 12 . 26 . 17 BA 24 . . 13 28 99 . [*,*, cuchillo ]: CA CO HU AL JA MA GR := SE . . 11 . 16 . 8 MD 23 8 10 9 21 . . BA . . . . . 81 . ; Se puede emplear la notaci on (tr). Otro ejemplo: s e t PROD ; s e t AREA { PROD }; param T > 0; param renta { p i n PROD , AREA [ p ], 1 ..T } >= 0; data param T := 4; s e t PROD := plato cuchillo ; s e t AREA [ plato ] := este norte ; s e t AREA [ cuchillo ] := este oeste export ; param renta := [ plato ,*,*]: 1 este 25 .0 norte 26 .5 [ cuchillo ,*,*]: 1 este 30 oeste 29 export 25

2 26 .0 27 .5 2 35 32 25

3 27 .0 28 .0 3 37 33 25

4 := 27 .0 28 .5 4 := 39 35 28 ;

Valores por defecto. AMPL comprueba que los comandos de datos asignan valores para exactamente todos los par ametros en el modelo. AMPL dar a un mensaje de error si damos un valor para un par ametro inexistente, o nos olvidamos de dar un valor a un par ametro que existe. Si el mismo valor apareciera muchas veces en un comando de datos, podemos especicar la frase default. Por ejemplo, s e t ORIG ; s e t DEST ; s e t PROD ; param costo { ORIG , DEST , PROD } >= 0; data 18

param costo d e f a u l t 9999 := [*,*, plato ]: CA CO HU AL JA MA GR := MD 27 9 12 . 26 . 17 BA 24 . . 13 28 99 . [*,*, cuchillo ]: SE . MD 23 BA . CA CO HU AL JA MA GR := . 11 . 16 . 8 8 10 9 21 . . . . . . 81 . ;

Tanto a los par ametros missing (como costo["SE","CA","plato"]), como a los marcados como omitidos con el uso de un punto (como costo["SE","CA","cuchillo"]), se les asignar a el valor 9999. En total, hay 24 con valor 9999. La caracter stica default es especialmente u til cuando queremos que todos los par ametros de una colecci on indexada tengan el mismo valor. Por ejemplo: param oferta { ORIG } >= 0; param demanda { DEST } >= 0; data param oferta d e f a u l t 1 ; param demanda d e f a u l t 1 ; Tambi en, como se explic o en secciones anteriores, una declaraci on de par ametro puede incluir una expresi on default. Por ejemplo: param costo { ORIG , DEST , PROD } >= 0, d e f a u l t 9999; Sin embargo, es mejor poner la frase default en los comandos de datos. La frase default deber a ir en el modelo cuando queremos que el valor por defecto dependa de alguna forma de otros datos. Por ejemplo, un costo arbitrariamente grande podr a darse para cada producto al especicar: param gran_costo { PROD } > 0; param costo { ORIG , DEST , p i n PROD } >= 0, d e f a u l t gran_costo [ p ]; 1.6.3 Datos para variables y restricciones.

Opcionalmente podemos asignar valores iniciales a las variables o restricciones del modelo, usando cualquiera de las opciones para asignar valores a par ametros. El nombre de la variable almacena su valor, y el nombre de la restricci on el valor de la variable dual asociada. var Trans : CA CO HU AL JA MA GR := SE 100 100 800 100 100 500 200 MD 900 100 100 500 500 200 200 BA 100 900 100 500 100 900 200 ; Tambi en con una tabla simple podemos dar valores a par ametros (valor, benefi, market) y variables (Make): param : valor benefi market Make := plato 200 25 6000 3000 cuchillo 140 30 4000 2500 tenedor 160 29 3500 1500 ; Los valores iniciales de las variables (o expresiones que envuelven esos valores iniciales) pueden verse antes de escribir solve, usando los comandos display, print o printf. El uso m as com un de asignar valores iniciales a variables o restricciones es dar un punto de arranque para resolver un problema de optimizaci on no lineal.

19

1.7

Comandos del lenguaje.

La llamada a AMPL normalmente causa la entrada en un entorno de comandos, donde los comandos pueden ser introducidos interactivamente. Las declaraciones del modelo y las instrucciones de introducci on de datos son tambi en aceptadas como comandos. El entorno de comandos de AMPL reconoce dos modos. En modo modelo, reconoce las declaraciones del modelo y todos los comandos que se describir an a continuaci on. El otro modo es el modo datos, en el cual s olo se reconocen instrucciones referentes a la introducci on de datos. El entorno siempre vuelve al modo modelo al encontrar una palabra clave que no comience con la palabra data. Una frase de la forma: i n c l u d e fichero ; trae el contenido del chero al entorno de comandos de AMPL. Los comandos include pueden estar anidados, ellos son reconocidos en modo modelo y en modo datos. Las secuencias: model ; i n c l u d e fichero ; data ; i n c l u d e fichero ; pueden abreviarse como: model fichero ; data fichero ; Los comandos no son parte de un modelo, pero producen que AMPL act ue como se describe en la tabla 7. Los comandos distintos a data, end, include, quit y shell producen que AMPL entre en modo modelo. Desde la l nea de comandos de AMPL podemos escribir, por ejemplo: ampl : i n c l u d e ejemplo1.run ; siendo el chero ejemplo1.run (tabla 8), un chero por lotes que almacena la secuencia de comandos necesarios para resolver el ejemplo 1.1. # EJEMPLO1.RUN option s o l v e r cplex ; model ejemplo1.mod ; data ejemplo1.dat ; solve ; display z; display x; d i s p l a y restriccion.slack ;

Tabla 8: Fichero de lotes para el modelo del ejemplo 1.1. Los comandos display, print y printf imprimen expresiones arbitrarias. Tienen el siguiente formato: display [conjunto: ] lista--argumentos [redireccion]; print [conjunto: ] lista--argumentos [redireccion]; printf [conjunto: ] fmt, lista--argumentos [redireccion];

20

Comandos break close continue data display delete drop end expand x for {indx}{ cp } if lexpr then {} include let match(cad,mod) model objective option print printf problem nb: def. purge quit read redeclare repeat while lexpr { cp } repeat until lexpr { cp } repeat { cp } while lexpr repeat { cp } until lexpr reset restore shell show solution solve step n update unx write xref

Signicado termina un bucle for o while cierra un chero salta al nal del cuerpo del bucle cambia a modo datos; opcionalmente incluye un chero imprime elementos del modelo y expresiones elimina un componente previamente declarado elimina una restricci on u objetivo naliza la entrada del chero de entrada actual muestra expl citamente el modelo ja una variable a su valor actual bucle for comprueba una condici on incluye cheros cambia los valores de los datos (:=) posici on de mod en cad cambia al modo modelo; opcionalmente incluye un chero selecciona un objetivo a optimizar dene o muestra valores opcionales imprime elementos del modelo sin formatear imprime elementos del modelo formateados (\n,%7.1f) dene un problema elimina un componente y los dependientes de el termina AMPL lee datos de un chero o de la consola (-) redene un componente ya denido repite un bloque de comandos mientras V. repite un bloque de comandos hasta F. repite un bloque de comandos mientras V. repite un bloque de comandos hasta F. resetea elementos espec cos a su estado inicial deshace un comando drop temporalmente sale al sistema operativo muestra componentes del modelo importa valores de variables de un solver env a elementos actuales a un solver y devuelve la soluci on avanza n pasos en la ejecuci on de cheros por lotes permite actualizar datos deshace un comando x escribe en un chero partes de un problema muestra dependencias del modelo

Tabla 7: Comandos del entorno AMPL.

21

Si el conjunto est a presente, su campo de acci on se extiende hasta el nal del comando, y causa una ejecuci on del comando para cada miembro del conjunto. La cadena de formato fmt es como en el lenguaje C. La listaargumentos es una lista de expresiones separadas por comas. o El opcional redireccin tiene una de las dos formas siguientes: > fichero >> fichero La primera abre por primera vez un chero para escribir, y la segunda a nade al chero ya creado, aunque > act ua igual que >>, si el chero est a ya abierto. Con el comando option se puede conseguir que la salida que se ha solicitado tenga un formato espec co. Por ejemplo: option d i s p l a y p r e c i s i o n 3; option omit zero rows 1; La primera especica la precisi on de salida (0 equivale a ninguna) y la segunda omite las salidas con valor cero (por defecto es 0, es decir no omite los valores cero). Otras opciones son: option solver msg 0; option r e l a x i n t e g r a l i t y 1; option p r e s o l v e 0; option show stats 1; option times 1; option gentimes 1; option l o g f i l e hola.tmp ; option solution round 6; option s i n g l e s t e p 1;

1.8

Optimizadores.

Ampl clasica los optimizadores en diferentes tipos atendiendo al tipo de problema que resuelven y los m etodos que usan, estos son: Lineal (s mplex): objetivo y restricciones lineales, resueltos con alguna versi on del m etodo del s mplex. Lineal (interior): objetivo y restricciones lineales, resueltos con alguna versi on de m etodos de punto interior (o barrera). Redes: objetivo lineal y restricciones de ujo en redes, resuelto por alguna versi on del m etodo s mplex para redes. Cuadr atico: objetivos cuadr aticos convexos o c oncavos y restricciones lineales, resuelto por un m etodo tipo s mplex o m etodo tipo punto interior. Convexo: objetivo convexo o c oncavo pero no todos lineales, y restricciones lineales, resuelto por un m etodo de punto interior. No lineal: continuo pero no todos los objetivos y restricciones lineales, resuelto por cualquiera de los m etodos siguientes: gradiente reducido, cuasi-newton, lagrangiano aumentado y punto interior.

22

Complementariedad: Lineal o no lineal como antes, pero con condiciones de complementariedad adicional. Lineal entero: objetivo y restricciones lineales y alguna o todas las variables enteras, resuelto por alguna aproximaci on de ramicaci on y acotaci on que aplica un algoritmo lineal para resolver los subproblemas sucesivos. Entero no lineal: objetivos y restricciones continuos pero no todos lineales y alguna o todas las variables enteras, resuelto por la aproximaci on de ramicaci on y acotaci on que aplica un algoritmo no lineal para resolver los subproblemas sucesivos. La siguiente tabla recoge los optimizadores conocidos por la versi on estudiante de AMPL Plus: Optimizador CPLEX Algoritmos lineal (s mplex) lineal (interior) redes cuadr atico entero lineal lineal (s mplex) cuadr atico entero lineal lineal (s mplex) No lineal No lineal Entero no Lineal Versi on AMPL AMPL PLUS AMPL dos

XLSOL

AMPL PLUS

MINOS GRG2

AMPL PLUS AMPL dos AMPL PLUS

Otros optimizadores que est an implementados para usar con ampl son: Optimizador LOQO Algoritmos lineal (interior) cuadr atico No lineal lineal (s mplex) entero lineal No lineal

LP_SOLVE DONLP2

Entorno AMPL para Msdos.

AMPL para Msdos (o UNIX), opera a trav es de la l nea de comandos, en la cual tenemos que ir introduciendo las instrucciones l nea a l nea. Desde el sistema operativo podemos acceder a este entorno llamando al programa: ampl.exe Aparece la ventana de la gura 1:

23

Figura 1: Entorno de comandos de AMPL para msdos: ampl. Cuando aparece el prompt ampl: podemos introducir las instrucciones del lenguaje de modelado y los datos con la sintaxis de AMPL, y tambi en cualquiera de los comandos vistos en la tabla 7, tales como: reset, option o solve. Sin embargo este entorno de comandos AMPL no tiene facilidades para editar el modelo o los datos, o leer y escribir datos de /a un chero fuente externo, para ello debemos ayudarnos de cualquier editor de c odigo ASCII (por ejemplo el editor de Msdos: EDIT).

Entorno AMPL para Windows: AMPL Plus.

En AMPL Plus, el procesador del lenguaje AMPL es: wampl.exe, el cual permite trabajar con todas las capacidades del lenguaje AMPL, de la misma manera que el entorno AMPL para Msdos. Desde el sistema operativo se puede acceder al procesador de comandos de forma independiente, llamando al programa: wampl.exe Aparece la ventana de la gura 2:

24

Figura 2: Entorno de comandos de AMPL Plus: wampl. Se puede apreciar en la gura, como se interact ua desde este programa para resolver un problema modelado con AMPL. Desde este programa es posible tambi en ejecutar cheros por lotes (con extensi on: run) con el comando include ejemplo.run;, o con el comando commands ejemplo.run;.

3.1

Componentes de AMPL Plus.

En la versi on de AMPL Plus para Windows con entorno gr aco se usan los mismos comandos que deber amos escribir en AMPL est andar, pero los comandos est an normalmente representados bien por men us o por botones de acceso r apido. Desde este entorno, podemos inspeccionar los comandos generados autom aticamente o las respuestas, escribir los comandos est andar de AMPL, examinar, imprimir o grabar los resultados, de una manera muy sencilla. El sistema de modelaci on de AMPL Plus consta de cuatro componentes principalmente: El interface gr aco del usuario, el procesador del lenguaje AMPL, los optimizadores, y los drivers de ODBC para manejo de bases de datos. En la siguiente gura podemos ver las caracter sticas principales del entorno de AMPL Plus:

25

Figura 3: Interface de AMPL Plus. En la ventana principal de AMPL Plus se pueden apreciar los siguientes componentes: La barra de Men us. Nos permite acceder a todos los comandos necesarios para controlar AMPL Plus. La mayor a de las opciones de men us tienen acelaradores de teclado. Por ejemplo para resolver el problema del ejemplo 1.1, una vez escrito el chero: EJEMPLO.MOD (aparece en la tabla 1), pulsamos F7 (Run->Build Model) y a continuaci on pulsamos F9 (Run->Solve Problem). La barra de Botones. Nos permite acceder con un solo click de rat on a las tareas m as comunes de la barra de men us. La barra de Estado. Muestra un peque no mensaje sobre la operaci on m as recientemente realizada. En esta pantalla ejemplo, aparece: Solver Finished, lo que nos indica que el problema ha sido resuelto. La ventana de Comandos (Commands). Se divide en dos areas: a rea (panel inferior) de entrada de comandos de AMPL est andar (tales como display, etc) y un a rea (panel superior) donde se visualizan los resultados de aplicar los comandos introducidos. Los mensajes aparecen clasicados en varios tipos: (1) los mismos comandos, (2) los mensajes de error, (3) salidas y (4) mensajes del optimizador o algoritmo de resoluci on. 26

La ventana de Estado de la Soluci on (Solver Status). Muestra informaci on sobre la operaci on realizada m as recientemente en el Men u Run, tal como: construir un chero de modelo o un chero de datos, o resolver un problema. Cuando un problema es resuelto muestra informaci on del problema (tal como el n umero variables y restricciones) y el progreso de la soluci on (tal como el valor actual de la funci on objetivo). Tambi en existen botones para detener moment aneamente (pause) o denitivamente (stop) la resoluci on del problema. La ventana del Modelo (Models). Despu es de que uno o m as cheros de modelos se han dirigido al procesador del lenguaje AMPL, esta ventana puede usarse para examinar el estado del modelo construido por AMPL. Se muestran varias listas que contienen los nombres de los elementos del modelo (tales como los nombres de conjuntos, par ametros, variables, objetivos y restricciones) que AMPL ha reconocido. Cuando hacemos click con el rat on sobre un nombre, aparece su denici on. Si est an disponibles los valores de los datos al hacer click sobre el bot on de datos (Data) se crea una ventana en la que podemos mostrar los resultados seleccionados en forma de hoja de c alculo. Las ventanas creadas por el usuario (en la gura ejemplo aparece editado el chero EJEMPLO.MOD). Son ventanas de edici on en las que podemos crear nuevos cheros o abrir cheros ya creados, de dos tipos: para editar texto ASCII (generalmente los cheros relacionados con el problema: modelo, datos o chero de ejecuci on de lotes) y cheros de datos (extensi on .qry).

3.2

Resoluci on de problemas en AMPL Plus.

Los optimizadores o programas de resoluci on en AMPL Plus (DLLs) pueden encontrar la soluci on mientras continuamos haciendo otras tareas y adem as podemos seguir la evoluci on de la resoluci on del problema, mientras que en la versi on est andar de Msdos no es posible. Cuando un programa de resoluci on est a trabajando en optimizar un problema, lee un chero de problema generado por AMPL (por ejemplo: problema.nl) y, cuando naliza, escribe un chero soluci on (por ejemplo: problema.sol) el cual es le do por el procesador del lenguaje AMPL. Los valores soluci on para las variables de decisi on son usadas para actualizar el resto de valores en el problema, tales como los valores calculados de la funci on objetivo y de las restricciones. Todos estos valores los podemos visualizar bien con ayuda de los comandos est andar de AMPL (display en la ventana de comandos en AMPL Plus) o a trav es de las ventanas de visualizaci on del Modelo de AMPL Plus. Los modos m as habituales de resolver problemas de optimizaci on con AMPL Plus son: 1. Le pedimos a AMPL Plus usando el men u: Run, que construya por un lado el chero del modelo (submen u: Build Model o F7), luego el chero de datos (submen u: Build Data o F8), y a continuaci on si no hubo ning un error, llamar al optimizador (submen u: Solve Problem o F9). Para obtener un resumen de la soluci on podemos llamar al submen u: Build Results o directamente pulsar F10. 2. Se puede crear un proyecto (Men u de proyectos) indicando qui en es el chero del modelo (extensi on .mod) el chero de datos (extensi on .dat o .qry) un chero de lotes (extensi on .run, que no contenga comandos de lectura de cheros de modelos y datos) donde se indican algunas opciones (en realidad podemos introducir varios cheros de lotes en un solo proyecto) y salidas particulares, y por u ltimo puede ir un chero donde se escribir an los resultados del problema (extensi on habituales .dat, .qry, o .sal), pero este debe aparecer abierto en AMPL Plus antes de ser resuelto. Podemos ver este proceso en la gura 4.

27

Figura 4: Edici on de un proyecto de AMPL Plus. El proyecto se puede guardar (recibir a extensi on: .amp), y para resolver el problema asociado a el tan s olo es necesario que le pidamos que construya los resultados (F10). Tambi en es posible usar este chero de proyecto para resolver el problema desde la l nea de comandos del sistema operativo (sin necesidad de abrir el programa AMPL Plus) de la siguiente forma: amplplus ejemplo.amp En este caso caso no deber a aparecer un chero para la recogida de datos (ya que no podr a estar abierto previamente). 3. Si creamos un chero por lotes (suelen tener extensi on: run) que contenga todos los comandos necesarios para leer el modelo, leer los datos y otros comandos del lenguaje ampl (ver tabla 7), y ejecutarlo desde la ventana de comandos (por ejemplo: include camino\ejemplo1.run). Nota: deben de aparecer los caminos exactos de donde se encuentras los cheros a leer, incluido el chero de lotes.

28