• ¿Quieres apoyar a nuestro foro haciendo una donación?, entra aquí.

programacion matematica con AMPL

J_MoSS

Plasta
Registrado
2006/06/19
Mensajes
991
Ojalá algun maestro me ayude pronto.

Estoy tratando de resolver un problema de flujo al mínimo costo con el software AMPL. Se me ha hecho complicado salir adelante con el manual ya que me complica un poco el idioma. Necesito varias cosas, empecemos por lo siguiente:

1.- Para realizar un mejor análisis de la respuesta estoy pensando en usar el programa Graphviz para ver mas rápidamente como son los grafos obtenidos desde AMPL. ¿Se puede abrir un programa externo desde AMPL? tengo la idea de que la respuesta obtenida sea copiada a un archivo de texto y luego con el motor de Graphviz ver el grafo abriendo un archivo.bat .La idea es abrir el archivo.bat desde AMPL y no encuentro ningún comando con el que se pueda.

Si es que hay un comando para hacerlo entonces podemos pasar a la segunda pregunta. Si la respuesta es de la siguiente manera:

flujo:
a b 10
b c 0
a c 8
a d 0

La respuesta de AMPL puede ser llevada a un archivo de texto tipeando "display función > out file.txt". Mi idea es que el AMPL escriba solo la primera y la segunda columna de la respuesta de esta forma:
digraph flujo {
a->b;
a->c;
}
(tomando en cuenta solo la fila que no tiene un cero al final)

2.- En mi problema de flujo al mínimo costo, tengo una única fuente y los demás nodos son todos sumideros, tengo restricciones de flujo máximo que recorren los arcos, por lo tanto si hay una solucion es posible que se me formen anillos, es decir, que la fuente alimenta a un sumidero a través de dos nodos distintos. La idea es evitar estos anillos, para esto estoy pensando en mesclarlo con el problema del vendedor viajero. EL problema de mesclar estos dos problemas es que el problema del vendedor viajero es un problema de programación lineal entera, donde la variable principal es binaria, en cambio en el problema de flujo la variable principal no es binaria. Alguien me puede ayudar a programarlo?

Para el problema del flujo mínimo costo estoy usando esta variación (del libro, en este caso no se dan los anillos)

modelo
set CITIES;
set LINKS within (CITIES cross CITIES);
param supply {CITIES} >= 0; # amounts available at cities
param demand {CITIES} >= 0; # amounts required at cities
check: sum {i in CITIES} supply = sum {j in CITIES} demand[j];
param cost {LINKS} >= 0; # shipment costs/1000 packages
param capacity {LINKS} >= 0; # max packages that can be shipped
var Ship {(i,j) in LINKS} >= 0, <= capacity[i,j];
# packages to be shipped
minimize Total_Cost:
sum {(i,j) in LINKS} cost[i,j] * Ship[i,j];
subject to Balance {k in CITIES}:
supply[k] + sum {(i,k) in LINKS} Ship[i,k]
= demand[k] + sum {(k,j) in LINKS} Ship[k,j];

datos:
set CITIES := PITT NE SE BOS EWR BWI ATL MCO ;
set LINKS := (PITT,NE) (PITT,SE)
(NE,BOS) (NE,EWR) (NE,BWI)
(SE,EWR) (SE,BWI) (SE,ATL) (SE,MCO);
param supply default 0 := PITT 450 ;
param demand default 0 :=
BOS 90, EWR 120, BWI 120, ATL 70, MCO 50;
param: cost capacity :=
PITT NE 2.5 250
PITT SE 3.5 250
NE BOS 1.7 100
NE EWR 0.7 100
NE BWI 1.3 100
SE EWR 1.3 100
SE BWI 0.8 100
SE ATL 0.2 100
SE MCO 2.1 100 ;


Para el problema del vendedor viajero estoy viendo poder usar algo de por acá
Problema vendedor viajero
 
Volver
Arriba