You are on page 1of 7

Problema de flujos en redes de coste mnimo con AMPL.

En esta prctica vamos a resolver un problema de flujos en redes de coste mnimos para unos
datos asignados .En primer lugar construiremos nuestra red de flujos para luego escribir la
formulacin matemtica del modelo de minimizacin y su implementacin en AMPL.
Finalmente obtendremos la solucin de coste mnimo de enviar esta cantidad de flujo (no
trivial) a travs de la red.

Los Datos:

A = Matriz de incidencias nodos arcos
b = Capacidad de cada arco (i,j)
c = Coste de paso de flujo de cada arco (i,j)

A =
`

1 1 1 1 u u u u u u u u u u
1 u u u 1 1 1 u u u u u u u
u u u u u 1 u 1 1 1 u u u u
u u u 1 u u u u u 1 1 u u u
u 1 u u u u u u 1 u 1 1 1 u
u u 1 u 1 u u u u u u 1 u 1
u u u u u u 1 1 u u u u 1 1
/




c = (2 S S 4 1 1 2 1 2 2 S 4 1 S)

b = (S S 2 1 2 2 4 S 2 4 1 1 2 S)

Arcos (i, ]) = (1 2), (1 S ), (1 6) , (1 4), (2 6), (2 S) , (2 7), (S 7),
(S S) , (S 4), (4 S) , (S 6) , (S 7), (6 7) .

Al elegir el vector de inyecciones en la red (flujo asignado al sistema) tenemos que tener en
cuenta que el problema est equilibrado, es decir, el flujo que entra ha de ser igual al que sale.
Por ejemplo la suma de las capacidades de los arcos que llegan al Nodo 7 es 12, y podemos
repartirla inyeccin de flujos en varios Nodos (1, 2, 3) para completar 12 ya que no es posible
inyectar 12 directamente en el Nodo1, por las restricciones de capacidad, ya que tendramos
un problema infactible.

d= Inyecciones de flujo en cada nodo i

J = (8 2 2 u u u 12)

Por tanto el grafo del nuestro sistema de flujos en redes ser el siguiente:
(Entre parntesis en cada arco se encuentra la capacidad y el coste de cada arco)


Formulacin matemtica del modelo:

Parmetros:

n : n Nodos i , j = 1,, n
Arcos (i, ]) : Conjunto de arcos de la red.
c
]
: Coste de cada arco (i, ])
b
]
: Capacidad de cada arco (i, ])
J

: Inyecciones de flujo en cada nodo i



Variables de decisin:

x
]
: flujo enviado desde el nodo i al nodo j mediante el arco (i, ])

Funcin Objetivo (Minimizar):

2
12
2
8
z = c
]
x
]
(,])Acos
Coste total ue tianspoitai flujo en la ieu.

Restricciones:

Restricciones de balance para cada nodo i = 1,, n:

x
]
(,])Acos
x
]
(],)Acos
= J



Restricciones de capacidad para cada arco (i, ]):

u x
]
b
]


Formulacin final:


min z = c
]
x
]
(,])Acos


s. o x
]
(,])Acos
x
]
(],)Acos
= J

(poro coJo noJo i = 1n)



u x
]
b
]




Aplicando el modelo a nuestros datos concretos tendremos:

min z = 2x
12
+Sx
15
+Sx
16
+4x
14
+x
26
+x
23
+2x
27
+x
37
+2x
35
+2x
34
+Sx
45
+4x
56
+x
57
+Sx
67


s. o (Rcstriccioncs Jc boloncc)
NoJo1: x
12
+x
15
+x
16
+x
14
= S
NoJo2: x
26
+x
23
+x
27
x
12
= S
NoJoS: x
37
+x
35
+x
34
x
23
= 2
NoJo4: x
45
x
14
x
34
= u
NoJoS: x
56
+x
57
x
15
x
35
x
45
= u
NoJo6: x
67
x
16
x
26
x
56
= u
NoJo7: x
27
x
37
x
57
x
67
= 12

(Rcstriccioncs Jc copociJoJ)
Arco(1 2): u x
12
S
Arco(1 S ): u x
15
S
Arco(1 6): u x
16
2
Arco(1 4): u x
14
1
Arco(2 6): u x
26
2
Arco(2 S): u x
23
2
Arco(2 7): u x
27
4
Arco(S 7): u x
37
S
Arco(S S): u x
35
2
Arco(S 4): u x
34
4
Arco(4 S): u x
45
1
Arco(S 6): u x
56
1
Arco(S 7): u x
57
2
Arco(6 7): u x
67
S


Implementacin en AMPL:

En primer lugar mostramos el archivo PCF.mod que es donde esta implementado el modelo
matemtico explicado anteriormente.

#Conjuntos y Parmetros

param m; # N de nodos
set NODOS:=1..m; # Conjunto Nodos
set ARCOS within {NODOS cross NODOS}; # Conjunto de Arcos (NODOS,NODOS)

param Inyec{NODOS}; # Inyecciones de flujos al sistema en cada nodo
param coste{ARCOS}>=0; # Coste de pasar la cantidad por cada arco
param capacidad{ARCOS}>=0; # Capacidad mxima en cada arco

#Variable de decisin

var x {(i,j) in ARCOS}>=0 ;

# Funcin objetivo
minimize z: sum{(i,j) in ARCOS}coste[i,j]*x[i,j];

#Restricciones

subject to Balance {k in NODOS}: # Ec. conservacin de flujo
(sum{(k,j)in ARCOS}x[k,j]-sum{(i,k)in ARCOS}x[i,k])=Inyec[k];

subject to Capacidad {(i,j) in ARCOS}: # Restriciones de capacidad
x[i,j]<=capacidad[i,j];





El archivo PCF.dat contiene los datos especficos de nuestro problema.

param m:=7;

param: Inyec:=
1 5
2 5
3 2
4 0
5 0
6 0
7 -12;

param: ARCOS : coste capacidad:=
1 2 2 3
1 5 5 5
1 6 5 2
1 4 4 1
2 6 1 2
2 3 1 2
2 7 2 4
3 7 1 3
3 5 2 2
3 4 2 4
4 5 5 1
5 6 4 1
5 7 1 2
6 7 3 3;

El archivo PCF.run contiene las instrucciones para asociar el modelo general (PCF.mod) a
nuestros datos (PCF.mod); elegir el solver (en este caso cplex) y resolver el problema. Creamos
el archivo Resultados.txt que nos guarde los resultados de resolver nuestro problema de coste
minimo (coste total z y flujo en cada arco x
]
).

reset;

model PCM.mod;
data PCM.dat;

option solver cplex;
solve;

printf "Funcin Objetivo: \n \n" > Resultados.txt;
display z > Resultados.txt;
printf "Solucin (ARCOS): \n" > Resultados.txt;
display x > Resultados.txt;


Solucin y Resultados:
Ejecutamos el PCF.run en AMPL y despus de 4 iteraciones del algoritmo del simplex dual
encontramos la solucin ptima del problema.

Funcin Objetivo (Coste Total): z = 44
Solucin de x
]
[ flujo enviado desde el nodo i al nodo j mediante el arco (i, ]) ]:

x := 1 2 3
1 4 0
1 5 1
1 6 1
2 3 2
2 6 2
2 7 4
3 4 0
3 5 1
3 7 3
4 5 0
5 6 0
5 7 2
6 7 3 ;

Por tanto el grafo resultante de aplicar nuestra solucin de coste mnimo es:



12
5
5
2
2

You might also like