Вы находитесь на странице: 1из 3

Notas de Ampl

AMPL es un lenguaje de modelado algebraico para programacin matemtica, capaz de


expresar en notacin algebraica problemas de optimizacin tales como los problemas de
programacin lineal.
Es muy comn que un proyecto en Ampl conste de 2 o 3 archivos:
1) Archivo modelo o *.MOD
Es el archivo de modelo, este contiene los pasos necesarios para plantear el problema de
programacin lneal, usualmente viene acompaado de un archivo de datos que lo provee de
informacin para resolver el problema mediante alguno de los algoritmos preprogramados
con los que cuenta el lenguaje; su sintaxis comn sera algo como:
a) definicin de conjuntos: define los posibles conjuntos donde se puede hubicar
una variable, inicia con el comando set, seguido del nombre del conjunto y
finalizado con ; ejemplo:
set conjunto1;
b) defincion de parametros: define cada uno de los vectores o matrices de datos
que sern usados en el modelo, inicia con el comando param, seguido del
nombre del parmetro y entre corchetes la direccin del parmetro en la matriz,
sea i, j, k, etc junto con el concratenador in seguido del conjunto donde est
hubicado y finalizado con ; ejemplo:
param parametro1{i in conjunto1};
c) declaracin de variables: define cada variable del problema de programacin
lneal, inicia con el comando var, seguido del nombre de la variable y entre
corchetes la direccin del parmetro en la matriz, sea i, j, k, etc junto con el
concratenador in seguido del conjunto donde est hubicado y finalizado con ;
ejemplo:
var X{i in conjunto1};
es posible hacer que la variable sea siempre no negativa desigalandola a 0 en la
msma declaracin, quedando as:
var X{i in conjunto1}>=0;
d) Funcin objetivo: define la funcin objetivo del sistema de programacin lneal, si
minimiza inicia con el comando minimize y si maximisa con maximize, seguido
del nombre de la funcin objetivo, seguido de dos puntos y la ecuacin objetivo; es
posible usar sumatorias con la funcin sum con entre corchetes la direccin del
parmetro en la matriz, sea i, j, k, etc junto con el concratenador in seguido del
conjunto donde est hubicada (sumar todos los valores de cada elemento en la
direccin i), dejando a su derecha la ecuacin objetivo, con cada parmetro y
variable seguidos de su direccin entre llaves y finalizado con ; por ejemplo:
minimize objetivo1: sum{i in conjunto1}parametro1[i]*X[i];
e) Restricciones: define las restricciones del problema de programacin lneal,
siempre es una desigualdad o una igualdad, inicia con el comando subject to,
seguido del nombre de la restriccin y entre corchetes la direccin del parmetro
en la matriz, sea i, j, k, etc junto con el concratenador in seguido del conjunto
donde est hubicado, seguido de dos puntos y la ecuacin de restriccin con cada
una de sus partes seguidas de su direccin entre llaves y finalizado con ; ejemplo:
subject to restriccion1{i in conjunto1}: X[i]<= parametro1[i];
En este caso repetir la restriccin tantas veces como valores en el conjunto1, as
que puede considerarse que existen muchas restricciones expresadas en una
sola.
2) Archivo de datos o *.DAT
Es el archivo con todos los datos numricos que se usarn en el problema de programacin
lneal, su sintaxis es la siguiente:
a) Definicin de conjuntos: define todas las partes del conjunto, inicia con el
comando set, seguido del nombre del conjunto, dos puntos y cada uno de los
elementos del conjunto, y finalizado con ;, ejemplo:
set conjunto1:=A B C;
b) definicion de parametros: define cada uno de los valores de todos los
parmetros, inicia con el comando param seguido del nombre del parmetro, dos
puntos e igual, y de forma tabular con el conjunto donde est hubicado como indice
cada uno de los valores del parmetro y finalizado con ;, por ejemplo:
param parametro1:=
A 36000
B 52000
C 28000;
En este caso el parmetro est hubicado en el conjunto 1, as que sus valores
vienen indexados por las partes del conjunto.
c) Algoritmo de solucin: existen muchos algoritmos comerciales de solucin, entre
ellos gurobi, se declara con el comando option solve y el nombre del algoritmo
finalizado con ;.
option solver gurobi;
d) orden de solucin: para que el problema se solucione hay que ordenarselo, esto
se hace con el comando solve finalizado de ;.
solve;
e) mostrar soluciones: para mostrar las soluciones de un problema de programacin
lneal es necesario utilizar el comando display seguido del nombre de la variable y
de ;.
display X;

Notas:
- Todos los comandos finalizan en ;.
- Existen ms algoritmos aparte del gurobi
- Cuando los corchetes con la direccin y el conjunto se encuentran al lado de una
restriccin significa que esta restriccin se va a repetir hasta que todos los elementos
del conjunto sean nombrados
- Cuando los corchetes con la direccin y el conjunto se encuentran al lado de una
sumatoria, significa que la variable o el parmetro con la direccin explcita se repetir
en la misma restriccin hasta que todos los elementos del conjunto queden
satisfechos
- Si se escribe un # al principio de una lnea, toda la lnea quedar invalidada y ser
ignorada por el algoritmo de solucin, estas lineas pueden servir para comentar o
ordenar el proyecto.