Está en la página 1de 22

171

CAPTULO VII
FLUJO EN REDES
INTRODUCCIN
En este captulo estudiaremos varios problemas de Flujo en Redes. Estos problemas pueden todos ser formulados
como problemas de Programacin Lineal y resueltos utilizando los mtodos clsicos, sin embargo, los algoritmos que
presentaremos aqu son algoritmos que nos interesan por adaptarse directamente a cada problema tratado y por
fundamentarse en propiedades de la estructura subyacente en toda red, a saber, el digrafo subyacente formado por los
vrtices y arcos de la misma.
VII.1 BSQUEDA DE CAMINOS MS CORTOS EN REDES
En el captulo V se estudiaron varios algoritmos considerando siempre cmin(s,v) < -, vV. Volvemos aqu sobre
el mismo problema levantando esta exigencia, para lo cual incluiremos en los algoritmos a estudiar mecanismos para
detectar la presencia de circuitos y poder detener la ejecucin del algoritmo.
Definiremos primero lo que llamamos una RED.
Definicin VII.1.1
Una Red R = (V,E,f
1
, , f
m
) es una tupla donde V y E son los vrtices y arcos de un digrafo G = (V,E) sin bucles,
llamado el digrafo subyacente y donde f
1
, , f
m
son funciones f
i
: E que pueden representar magnitudes tales
como distancia, distancia, costo, capacidad, etc.
Consideremos una red R = (V,E,d) donde la funcin d la llamaremos distancia. Mientras no se especifique lo
contrario, supondremos que el digrafo subyacente G = (V,E) es sin arcos mltiples.
Dados dos vrtices x, y en V, denotaremos por C
x
y
un camino del vrtice x al vrtice y. Recordemos que el costo de
un camino C en una red es la suma de los costos de los arcos que conforman el camino, y se denota por d(C). Si a la funcin
asociada a los arcos la llamamos distancia estaremos hablando de la distancia del camino.
Definicin VII.1.2
Un circuito en R = (V,E,d) se dice Absorbente si su costo o distancia es negativo.
Definamos a continuacin dos funciones I, T : E V, las cuales asocian a cada arco sus vrtices Inicial y Terminal
respectivamente.
Definicin VII.1.3
Dados dos vrtices x, y en una Red R=(V,E,d), si existe un camino ms corto de x a y entonces la distancia de ese
camino se llama Distancia mnima de x a y. As, la distancia mnima de un vrtice a si mismo, si existe, es nula.
Sea s una raz de R = (V,E,d) sin circuitos absorbentes, podemos definir otra funcin : V R que asocia a cada
vrtice x la distancia mnima de s a x.
Proposicin VII.1.1
Sea R = (V,E,d) sin circuitos absorbentes y con una raz s, entonces:
e E: (T(e)) - (I(e)) d(e). (I)
172
Demostracin:
Sea e=(x,y), entonces C = C
s
x
|| <x, e, y> donde C
s
x
es un camino de costo mnimo, es un camino de s a y, de
donde d(C) = (x) + d(e) (y).

Proposicin VII.1.2
Sea R = (V,E,d) como antes, s una raz de R y xV: (x) = distancia mnima de s a x en R, entonces la subred
R(E), donde E = {e E / (T(e)) - (I(e)) = d(e)} tambin tiene raz s y todos los caminos de costo mnimo en R estn en
R(E), la red inducida por E.
Recprocamente, todo camino de s a x en R(E) es un camino de costo mnimo.
Demostracin:
Sea C
s
z
el camino de costo mnimo de s a z en R, e = (x,y) un arco de este camino mnimo. Entonces las
subsecuencias C
s
x
, C
s
y
son caminos de costo mnimo a x e y respectivamente. As: d(C
s
y
) = (y) = dl(C
s
x
) + d(e) =
(x) + d(e), de donde vemos que todo arco perteneciente a un camino mnimo de s a cualquier otro vrtice x est en E.
Sea ahora C un camino de s a cualquier vrtice x en R(E), veamos que este es un camino de costo mnimo.
d(C) =
eC
d(e) =
eC
((T(e)) - (I(e))) = (x) - (s) = (x)
luego siendo la distancia de C igual a la distancia mnima de s a x, C es un camino de costo mnimo.

Cabe observar que luego de esta demostracin podemos caracterizar todos los arcos sobre un camino de costo
mnimo como los arcos que verifican la desigualdad (I) de la Proposicin VII.1.1 como una igualdad.
CorolarioVII.1.2.1
Todo circuito en R(E) tiene distancia nula.
Algoritmo General
Este algoritmo es bsicamente el mismo modelo general de bsqueda de caminos de costo mnimo presentado en el
captulo V, al cual le agregamos ahora un mtodo para detectar la presencia de circuitos absorbentes en la Rutina de
eliminacin de Caminos. En cuanto a los atributos, es fcil ver que a cada camino P
j
= Ext (P
i,
x
j
) le debe corresponder
como atributo A(P
j
) = A(P
i
) + d(e), donde e = (x
i
,x
j
). Este atributo corresponde al costo del camino, es decir, la distancia
del vrtice inicial s a x
j
. La seleccin del prximo camino abierto a cerrar se har tomando el que tenga menor atributo. La
Rutina de eliminacin de caminos quedara como sigue:
Rutina de Eliminacin de Caminos para el Alg. General de Camino Mnima :
Comienzo
Para todo camino P
j
obtenido por expansin de P
i
a x
j
hacer:
Si no existe camino P
k
en la lista con igual vrtice final x
j
que P
j
entonces Abrir P
j
sino { ya existe otro camino listado hasta x
j
}
Si A (P
k
) > A (P
j
) entonces
Si x
j
est en el camino P
j
entonces
Comienzo
Escribir ( Hay Circuito Absorbente );
PARAR
Fin
sino Comienzo
Eliminar P
k
;
Abrir P
j
;
173
Fin;
Fin.
Este algoritmo general permite detectar circuitos absorbentes si los hay, y en caso contrario encuentra la
arborescencia de distancias mnimas de raz s.
Una segunda versin del algoritmo, la cual presentamos a continuacin utiliza el algoritmo de Dijkstra para encontrar
una arborescencia inicial A de raz s, no necesariamente de distancias mnimas, y luego trata de mejorar esa arborescencia
hasta que sea ptima o hasta detectar un circuito absorbente. Para mejorar la arborescencia inicial, el algoritmo se basa en
las Proposiciones VII.1.1 y VII.1.2.
CaminoMinGeneral (V, E, I, T, d, s; VAR , A, EsRaiz, CircuitAbs, C)
{Entrada:V, E, I, T, d, s.
Salida:, A, EsRaiz, CircuitAbs, C.
EsRaiz y CircuitAbs son variables booleanas que indican respectivamente si s es o no raz y si existe o no un
circuito absorbente. En caso que ocurra esto ltimo, C sera tal circuito . A es un arreglo con las referencias a
los antecesores de cada vrtice en el camino encontrado. El algoritmo de Dijkstra devuelve en un vector de
costos tal que (x), x en V, es el costo del camino mnimo de s a x. La variable booleana EsRaiz devuelve
verdadero si y slo si s es raz de G=(V,E).}
Comienzo
Dijkstra (V,E,I,T,d,s; ,A,EsRaiz);
CircuitAbs FALSO;
Si (EsRaiz) entonces
Comienzo
E {eE / e = (A(x),x), xV};
Mientras ( E: d() < (T())-(I()) ) y (no CircuitAbs) hacer
Si (G=(V,E {}) contiene un circuito C ) entonces CircuitAbs VERDADERO
sino
Comienzo
x T(); E E {} - {(A(x),x)};
A(x) I();
(T()) - (I()) - d();
(x) (x) - ;
Para todo y descendiente de x en el rbol A hacer: (y) (y) - ;
Fin
Fin
Fin.
Se observa que en cada iteracin del algoritmo
vV
(v) decrece estrictamente, as que no se vuelve nunca a una
arborescencia hallada anteriormente. Siendo finito el nmero de arborescencias de R = (V,E,d), queda asegurada la
terminacin del algoritmo.
Para determinar si existe circuito absorbente basta mirar si T() es antecesor de I() en A, donde es el arco que se
est agregando en ese momento. Por ser A una arborescencia, esto ltimo es muy sencillo pues existe un nico camino de s
a x en A y basta recorrerlo en sentido inverso.
VII. 2 FLUJO MXIMO
Prcticamente hablando, un problema de flujo mximo consiste, por ejemplo, en buscar la cantidad mxima de agua
que puede fluir, en un determinado momento, desde una estacin de bombeo hasta un reservorio, a travs de un sistema de
acueductos. Podra representar tambin la cantidad mxima de vehculos por unidad de tiempo que soporta una red vial
entre dos ciudades.
Para definir formalmente el problema del Flujo Mximo recordaremos que en una red R = (V,E,c), un VRTICE
FUENTE es un vrtice s tal que no existe ningn arco eE, tal que T(e) = s. Se llama VRTICE SUMIDERO o POZO a un
vrtice p tal que no existe ningn arco eE con I(e) = p.
174
Definicin VII.2.1
Sea R = (V,E,c) una red con un vrtice fuente s y un vrtice sumidero p. Agreguemos a R un arco e
r
= (p,s), con
c(e
r
) = +. El arco e
r
se llama Arco de Retorno.
Este arco se agrega a la red para efectos de facilitar la resolucin del problema, lo cual veremos a continuacin.
Definicin VII.2.2
Dada una red R = (V,E,c) con un vrtice fuente s, un vrtice sumidero p y la funcin c: E . Sea E

= E{e
r
}.
Una funcin f de E

en se llama un FLUJO sobre el digrafo subyacente G = (V, E

) si cumple la siguiente igualdad para


todo vrtice x en V se tiene que
e E/ T(e)=x e E/ I(e)=x
f(e) f(e) 0

= , es decir, todo el flujo que llega a un vrtice debe ser igual
al flujo que sale del vrtice.
Dada una red R = (V,E,c) con un vrtice fuente s y un vrtice sumidero p, donde la funcin c:E representa una
capacidad definida sobre los arcos, buscar el Flujo Mximo consiste en buscar un vector (f(e
1
), f(e
2
),...,f(e
m
)) , E

= {e
1
,
e
2
, ... , e
m
} y m=| E

|, tal que:
i) f sea un flujo sobre el grafo G(V, E

), donde E

= E {(p,s)} = E {e
r
}
ii) 0 f(e) c(e), e E

.
iii) f(e
r
) = f((p,s)) sea mximo bajo las condiciones (i) e (ii).
Entre otras cosas, es por ello que es necesario agregar el arco de retorno, para que la ley de conservacin pueda
cumplirse incluso para los vrtices s y p. Debido a esto mismo, el flujo por el arco de retorno, representa la cantidad total
de flujo que pasa por la red en cualquier momento y es esta cantidad f(e
r
) la que se busca maximizar al resolver el
problema.
Un flujo f en R = (V, E

,c) que satisface las condiciones (i) e (ii) se llama un flujo factible.
Otros problemas, tales como la presencia de varios vrtices fuente (s
1
,..s
k
) y/o varios vrtices sumidero (p
1
,..,p
q
),
pueden ser resueltos fcilmente llevndolos al caso expuesto anteriormante. Para ello basta con agregar un vrtice fuente
ficticio s
o
, o super-fuente y/o un vrtice pozo o sumidero ficticio p
o
, o super-pozo, con arcos (s
o
,s
i
), i=1,..,k, (p
j
,p
o
),
j=1,..,k con capacidad infinita, adems del arco de retorno (p
o
,s
o
).
Igualmente, problemas tales como la presencia de restricciones de capacidad sobre los vrtices, lo cual podra
representar limitaciones de capacidad de intersecciones, pueden tambin ser fcilmente resueltos bajo el esquema anterior,
representando a cada vrtice x como dos nuevos vrtices x e x unidos por un arco (x, x) con capacidad igual a la
capacidad del vrtice x original.
Este problema de Flujo Mximo puede ser formulado como un Problema de Programacin Lineal (P.P.L.). Para ello
usaremos la Matriz de Incidencias del digrafo subyacente.
Si denotamos M

la Matriz de Incidencias del digrafo G = (V, E

), el problema del flujo mximo se convierte en el


siguiente P.P.L.
max f(e
r
)
s.a.
M.f =0 dondef es el vector deflujo
f c ces el vector decapacidad
f 0

VII.2.1 ALGORITMO DE FORD & FULKERSON


El algoritmo de Ford & Fulkerson es un algoritmo para la bsqueda del flujo mximo en una red R=(V,E,c). Una
primera idea para este algoritmo es: dado un flujo f incial factible, buscar un camino (elemental) C de s a p tal que ningn
arco del camino est saturado, es decir que eC: f(e) < c(e). De conseguirse este camino, el flujo puede ser aumentado
en cada uno de los arcos en = Min
eC
[c(u) - f(u)] > 0.
175
Sin embargo este procedimiento podra bloquearse, como se ve en la Figura VII.1, sin que se haya encontrado el
flujo mximo.
figura VII.1
Una segunda idea consiste en buscar una cadena (elemental) C tal que, si agregamos el arco de retorno e
r
a esta
cadena C, podemos dividir los arcos de C en:
C
+
= {eC / e tiene la misma orientacin que e
r
en C}
C
-
= {eC / e tiene orientacin contraria a e
r
en C}
Cada uno de los arcos en C debe ser tal que:
Si eC
+
: f(e) < c(e)
Si eC
-
: f(e) > 0.
Una cadena como la descrita anteriormante se llama una cadena de aumento. Una vez hallada esta cadena, el flujo a
travs de la red puede aumentarse en:
= Min { Min
eC
+ [c(e) - f(e)], Min
eC
- [f(e)] } > 0
haciendo:
+
-
f(e)+ si e C
f(e)=
f(e)- si e C

Este ser un nuevo flujo factible ya que:


i) Las restricciones de conservacin de flujo se mantienen sobre todos los vrtices, lo cual es facil ver ya que:
- Si C no pasa por xV, es evidente que el flujo a travs de x se mantiene constante.
- Si x es un vrtice tal que C pasa por l, habr exactamente dos arcos de C incidentes en x. En esta situacin se
pueden presentar cuatro casos. Llamemos e1 y e2 los dos arcos incidentes en x, entonces:
T(e1) = T(e2) = x I(e1) = I(e2) = x T(e1) = I(e2) = x I(e2) = T(e1) = x.
En todos estos casos las modificaciones sobre el arco e1 compensan las modificaciones en el arco e2 de forma que
las leyes de conservacin de flujo se mantienen.
ii) El nuevo valor del flujo f verifica de nuevo: 0 f(e) c(e), eE, por la forma como se escoge .
- (flujo,capacidad)
- Valor Flujo Mximo = 4
1
2
s p
(1,1)
(0,5)
(2,4)
(3,3)
(3,)
(1,2)
176
Sea Y un subconjunto de vrtices de R = (V,E,c). Sea
(Y) = { eE / I(e) Y, T(e) Y T(e) Y, I(e) Y } el cociclo inducido por el conjunto Y.
Los arcos de (Y) los dividimos en dos subconjuntos
+
,
-
, donde:

+
(Y) = { eE / I(e) Y, T(e) Y }

-
(Y) = { eE / T(e) Y, I(e) Y }
Definicin VII.2.1.1
Se llama un Corte que separa s de p a un subconjunto K de arcos de R = (V,E,c) tal que, existe un subconjunto de
vrtices Y con sY, pY con K =
+
(Y).
Es interesante notar que si K es un corte que separa s de p, entonces todo camino de s a p en R = (V,E,c) tiene un
arco en K.
Definicin VII.2.1.2
Se define la Capacidad de un Corte K en R = (V,E,c) como la suma de las capacidades de los arcos en K, es decir:
c(K) =
eK
c(e).
Proposicin VII.2.1.1
Para todo flujo factible f en R = (V, E

,c) y para todo corte K que separa s de p se tiene que f(e


r
) c(K).
Demostracin:
Sea Y un subconjunto de vrtices tal que K =
+
(Y). Si sumamos las restricciones de conservacin de flujo sobre
todos los vrtices en Y obtenemos:
+ -
e (Y) e (Y)
f(e) f(e) 0

=

Puesto que sY, pY, entonces e
r
= (p,s)
-
(Y), de donde despejando se obtiene:
{ }
+ -
r
e (Y) e (Y)- (p,s)
f(e ) f(e) f(e)

=

pero 0 f(e) c(e), eE
{ }
-
e (Y)- (p,s)
f(e)


0,
y
+
e (Y)
f(e)

=
e K
f(e)


e K
c(e)

luego f(e
r
) c(K).

En la prxima seccin presentaremos en detalle un algoritmo para resolver un problema ms general que el problema
de flujo mximo dado en esta seccin y que podemos utilizar sin cambio alguno para resolver el problema de flujo mximo.
VII.2.2 FLUJO MXIMO EN REDES CANALIZADAS
Llamamos Red Canalizada a una red R = (V,E{e
r
},b,c) con fuente s y pozo p, e
r
= (s,p), en la cual adems de la
funcin capacidad que acota superiormente el flujo, tenemos otra funcin b: E > que corresponde a una cota inferior
para el flujo por los arcos (por esto decimos que el flujo est canalizado). El problema consiste en hallar un vector f tal que:
(i) f sea un flujo en el grafo (V,E{e
r
})
(ii) eE: b(e) f(e) c(e).
(iii) f(e
r
) sea mximo.
Note que si b(e)=0, eE, entonces el problema anterior no es mas que el problema de flujo mximo visto en la
seccin anterior. Note tambin que c(e
r
) puede ahora no ser infinito.
177
La solucin inicial trivial f(e) = 0, eE, puede no ser factible en este nuevo problema por lo que habr que disponer
de un mecanismo para encontrar al menos una solucin inicial factible al problema. Esto se ver en la prxima seccin. Sin
embargo, para el problema de flujo mximo de la seccin anterior se tiene que la solucin trivial es factible.
A continuacin presentamos un algoritmo para determinar un flujo mximo en una red canalizada. Este algoritmo
requiere que el flujo f inicial sea un flujo factible en R = (X,V,b,c). Cuando b(e)=0, eE, podemos tomar como flujo
inicial a f(e)=0, eE. MODIF es una variable booleana que toma el valor VERDADERO si el flujo f es modificado por
el algoritmo. ExisteFM, tambin booleana, indica si existe un Corte de capacidad finita, en cuyo caso ExisteFM =
VERDADERO.
FLUJOMAX(V, E, I, T, e
r
, s, p, b, c, fi; VAR f, Y, MODIF, ExisteFM): { Ford & Fulkerson }
{Entradas: V, E, I, T, e
r
, s, p, b, c, fi
Salidas: f, Y, MODIF, ExisteFM}
Comienzo
MODIF FALSO;
f fi;
ExisteFM VERDADERO;
Repetir
MARCAR (V,E,I,T,e
r
,s,p,b,c,f; Y,A,epsilon);
Si (pY y epsilon ) entonces
Comienzo
x p;
C
+

{e
r
};
C
-
;
M ODIF VERDADERO;
Mientras (xs) hacer:
Comienzo
e A(x);
Si (x = T(e)) entonces
Comienzo
C
+
C
+
{e};
x I(e);
Fin
sino Comienzo
C
-
C
-
{e};
x T(e);
Fin;
Fin ;
Para todo eC
+
hacer : f(e) f(e) + epsilon ;
Para todo eC
-
hacer: f(e) f(e) - epsilon ;
Fin
hasta que (pY epsilon = );
Si (epsilon = ) entonces ExisteFM FALSO ;
Donde
MARCAR(V,E,I,T,e
r
,s,p,b,c,f; VAR Y,A,epsilon):
{ Entradas: V,E,I,T,e
r
,s,p,b,c,f.
Salidas: Y,A,epsilon
Y es un conjunto de vrtices y A es un vector que asocia a cada vrtice un arco del cual l es extremo. Si al
final del algoritmo pY entonces se puede aumentar el flujo a travs del camino de aumento <p, x
1
, x
2
, ... , s>
que se reconstruye a partir de A de la siguiente forma: x
1
es el otro vrtice extremo del arco A(p), x
2
es el
otro vrtice extremo de A(x
1
), etc. Si
(s) es la cantidad mxima en que se desea incrementar el flujo del arco e
r
}
Variable ExisteC : booleana;
178
Comienzo
Y {s};
ExisteC VERDADERO;
(s) c(e
r
) - f(e
r
);
epsilon 0;
Mientras (pY y ExisteC ) hacer
Si (e=(x,y) / xY, yY, f(e) < c(e)) entonces {Marcado Directo }
Comienzo
Y Y {y}; A(y) e;
(y) Min [ (x), c(e) - f(e)]
Fin
sino {Marcado Inverso }
Si (e=(x,y) / yY, xY, f(e) > b(e)) entonces
Comienzo
Y Y {x}; A(x) e;
(x) Min [ (y), f(e) - b(e)]
Fin
sino ExisteC FALSO;
Si (ExisteC) entonces epsilon (p);
Fin ; { MARCAR }
Fin. { Flujo Max }
Justificacin del Algoritmo:
i) Sea = { eE/ y Y con A[y] = e } (A e Y son salidas de Marcar).
El grafo G(V,) es claramente un rbol. La cadena que une s a p en G = (V,) unido con e
r
es un ciclo C donde C
+
son los arcos orientados como e
r
y C
-
son los arcos orientados en sentido contrario a e
r
.
ii) Por la forma como se calcula , al modificar los valores de f(e) se mantiene la factibilidad.
i) + ii) el flujo que se obtiene al final de cada iteracin es siempre factible y estrictamente mejor que el anterior,
pues al f(e
r
) le asigna f(e
r
) + , ( > 0).
puede ser infinito cuando exista un camino de aumento de costo no acotado en cuyo caso el flujo es no acotado.
Una vez que termina el algoritmo con pY, se puede ver que hemos encontrado un corte K de s a p con c(K) =
f(e
r
), lo cual segn la Proposicin VII.2.1.1 implica que f no puede aumentar ms (y adems no podremos conseguir otro
corte de capacidad menor).
Veamos a continuacin que efectivamente se ha detectado tal corte:
Sea Y el ltimo conjunto de vrtices marcados. Por construccin pY.
Sea e = (x,y)
+
(Y) f(e) = c(e) (sino y = T(e) sera marcado en la marcacin directa).
Sea e = (y,x)
-
(Y) f(e) = 0 (sino y = I(e) sera marcado en la marcacin inversa).
Tomando K =
+
(Y) tenemos f(e
r
) =
eK
c(e) = c(K).

Proposicin VII.2.1.2 (Flujo Max - Corte Min)


El valor mximo de f(e
r
) para un flujo factible f en R = (V,E,c) es igual a la capacidad de un corte de s a p de
capacidad mnima. En particular f(e
r
) ser no acotado si y slo si no existe en R = (V,E,c) un corte de capacidad finita que
separe s de p.
179
Demostracin:
Podemos remitirnos al hecho de que el problema de flujo mximo es un P.P.L. que tiene al menos una solucin: f(e)
= 0, eE

. Adems si existe algn corte de capacidad finita, el problema es acotado y por lo tanto tiene solucin ptima
finita.

En cuanto a la terminacin del algoritmo de Ford & Fulkerson (F&F), podemos ver que siempre que las capacidades
de los arcos sean nmeros racionales, podemos considerar que todas son mltiplos enteros de algn nmero en R. As, si
existe corte finito, al comenzar con f(e) = 0, eE, e ser siempre mltiplo de , luego los valores del vector f para cada
solucin sern tambin mltiplos de , y f(e
r
) aumenta en cada iteracin en un mltiplo de estrictamente mayor que cero.
Este crecimiento al ser el problema acotado se detiene en un nmero finito de pasos.
Por otro lado, con una implementacin como la propuesta por Edmonds & Karp (1972), en la cual las cadenas de
aumento se buscan tratando el conjunto de vrtices marcados como una COLA y examinando primero todos los arcos
incidentes al vrtice en el Principio de la Cola antes de pasar a examinar los vecinos del siguiente vrtice en la Cola, el
procedimiento MARCAR resulta similar al algoritmo de Dijkstra, y an ms eficiente pues para marcar un nuevo vrtice
basta con que este cumpla las condiciones para una marcacin bien sea directa o inversa, sin necesidad de hacer ms
comparaciones. Esto nos da un orden O (n
2
) para MARCAR. En cuanto al nmero de veces que este procedimiento es
llamado por FlujoMax, Edmonds & Karp (1972) encuentran una cota O (n
3
) basandose en la implementacin ya
mencionada. Con estos resultados, obtenemos una cota O (n
5
) para el algoritmo de Flujo Mximo.
Si las capacidades de los arcos son nmeros irracionales, es posible que el algoritmo no pare, o peor an, que
converja a soluciones lejanas al ptimo (Ford & Fulkerson, 1962). Esto sin embargo, en los casos reales no ocurre puesto
que siempre se pueden tomar aproximaciones racionales lo suficientemente buenas ya que los irracionales no tienen una
representacin exacta en la computadora.
En el caso que no exista corte finito, esto implica que existe al menos un camino C
s
p
de s a p en el cual todos los
arcos tienen capacidad infinita. Siendo finito el nmero de caminos elementales y estando siempre este camino C
s
p
no
saturado, es seguro que en la primera etapa de la marcacin (marcacin directa) este camino ser encontrado y se detectar
al ser = infinito para tal camino.
VII.3 FLUJOS FACTIBLES
Consideremos una red R = (V,E,b,c) con b: E , c: E y b(e) c(e), eE.
Se desea encontrar un vector f en R
m
(m=|E|), que llamaremos un flujo factible en R = (V,E,b,c), el cual debe
satisfacer las siguientes condiciones:
i) f es un flujo en G = (V,E).
ii) b(e) f(e) c(e), eE.
Veremos en lo que sigue un mtodo que nos permitir encontrar un flujo factible, siempre que este exista, y una
condicin necesaria y suficiente para su existencia.
Proposicin VII.3.1 (Teorema de Hoffman)
Una condicin necesaria y suficiente para que exista un flujo factible en R = (V,E,b,c) es que:
cociclo (Y) en (V,E):
-
e (Y)
b(e)


+
e (Y)
c(e)

(II)
Demostracin:
Sea f un flujo factible en R = (V,E,b,c) y (Y) un cociclo, entonces, sumando todas las ecuaciones de conservacin
de flujo sobre los vrtices en Y obtenemos:
- +
e (Y) e (Y)
f(e) f(e)

=

, pero
-
e (Y)
b(e)


-
e (Y)
f(e)

y
+
e (Y)
f(e)


+
e (Y)
c(e)

de donde se obtiene la condicin (II) buscada.


180

El siguiente algoritmo es un algoritmo constructivo, el cual cuando no puede encontrar un flujo factible pone en
evidencia la existencia de un cociclo que no cumple la condicin de Hoffman, lo cual demuestra la suficiencia de la misma.
Algoritmo para encontrar un Flujo Factible.
FlujoFact(V, E, I, T, b, c; VAR f, Y, ExistFF)
{Entradas: V, E, I, T, b, c
Salidas: f, Y, ExistFF.
La variable booleana ExisteFF ser verdadera sy y slo si existe un flujo factible en (V,E,b,c).}
Comienzo
ExistFF VERDADERO;
f 0 ; {Flujo Inicial = 0 , eE }
Repetir
INDIC
e / f(e)>c(e)
[f(e)-c(e)] +
e / f(e)<b(e)
[b(e)-f(e)];
Si (INDIC 0 y ExistFF) entonces
Comienzo
Si ( = (x,y) E / f() > c() ) entonces
Comienzo
I(e
r
) p y;
T(e
r
) s x;
c (e
r
) f() - c();
1;
Fin
Sino { = (x,y) E / f() < b() }
Comienzo
I(e
r
) p x;
T(e
r
) s y;
c (e
r
) b() - f();
-1;
Fin ;
Para todo eE hacer:
Comienzo
b

(e) Min [ b(e), f(e) ]


c (e) Max [ f(e), c(e) ]
f

(e) f(e);
Fin ;
f

(e
r
) 0;
b

(e
r
) 0;
FlujoMax (V,E,I,T,e
r
,s,p, b

, c , f

; f

, Y, MODIF, ExistFM);
Si ( f

(e
r
) = c (e
r
) ) entonces { El flujo se pudo cambiar }
Comienzo
f() f

() - * f

(e
r
);
Para todo e E / e hacer
f(e) f

(e);
Fin
sino ExistFFFALSO; { El flujo no cumple la condicin de Hoffman }
Fin
hasta que (INDIC = 0 no ExistFF).
Fin. {FlujoMax }
181
Observaciones:
Si INDIC = 0 entonces f es un flujo factible. Las nuevas cotas b

, c se definen de forma tal que f = f

sea factible
en R = (V,E {e
r
}, b

, c ) para poder llamar a FLUJOMAX que requiere un flujo inicial factible.


El algoritmo anterior se detiene cuando INDIC = 0, es decir cuando se tiene un flujo f factible, o cuando ExistFF es
falso.
En este segundo caso, sea Y el ltimo conjunto de vrtices marcados que devuelve FLUJOMAX :
a) Si = 1 entonces:
e
+
(Y) - {}: f(e) = f

(e) = c (e) c(e)


e
-
(Y): f(e) = f

(e) = b

(e) b(e)
f() = f

() - * f

(e
r
) > c()
b) Si = -1 entonces:
c) e
+
(Y): f(e) = f

(e) = c (e) c(e)


e
-
(Y) - {}: f(e) = f

(e) = b

(e) b(e)
f() = f

() - * f

(e
r
) < b().
En ambos casos:
0 =
+
e (Y)
f(e)

-
-
e (Y)
f(e)

>
+
e (Y)
c(e)

-
-
e (Y)
b(e)

de donde podemos concluir que f no factible un cociclo (Y) que no cumple la condicin de Hoffman.
VII.4 FLUJO DE COSTO MNIMO
Se plantea el problema de Flujo de Costo Mnimo de la siguiente manera:
Sea R = (V,E,a,b,c) con a: E , b: E , c: E , b(e) c(e), eE.
Se desea encontrar un vector f tal que:
i) f sea un flujo en G=(V,E)
ii) b(e) f(e) c(e), eE.
iii)
e

E
[a(e) * f(e)] sea mnimo.
As como el problema de Flujo Mximo, el problema de Flujo de Costo Mnimo, tambin puede formularse como un
P.P.L. Si M es la matriz de incidencia de G entonces:
min a
t
* f
s.a.
M.f =0
f b
f c

Antes de ver como resolver este problema, veremos como otros problemas conocidos, pueden plantearse como
problemas de flujo de costo mnimo.
182
a) Camino Mnimo de s a p en R = (V,E,d).
En este caso el planteamiento lo hacemos construyendo una nueva red R = (V, E {e
r
}, a,b,c), donde
e
r
= (p,s), a(e
r
) = 0, b(e
r
) = 1, c(e
r
) =
eE : a(e) = d(e), b(e) = 0, c(e) =
b) El problema de Flujo Mximo de s a p en R = (V, E {e
r
}, b, c), con e
r
=(p,s), se puede reducir al problema de
flujo de costo mnimo como sigue:
Construiremos la nueva red R=(V, E {e
r
}, a,b,c), donde
e
r
= (p,s) a(e
r
) = -1, b(e
r
) = 0, c(e
r
) =
eE : a(e) = 0, b(e) = b(e), c(e) = c(e).
c) Problema de Transporte.
Supongamos N fuentes con capacidades a
i
, M destinos con demandas b
j
, y costos unitarios de transporte c
ij
de
la fuente i al destino j.
La formulacin como P.P.L. de este problema es:
Min
i

j
c
ij
X
ij
s.a.
j
x
ij
a
i
, i

j
x
ij
b
j
, j
x
ij
0, i,j.
Construimos entonces la siguiente red R=(FD{(p,s)},E1E2E3,a,b,c) donde:
F = { cjto. de vrtices correspondientes a cada fuente}
D = { cjto. de vrtices correspondientes a cada destino}
s = super-fuente, p = super-destino o sumidero.
E1 = {(s,Fi) / Fi es una fuente}
E2 = {(Dj,p) / Dj es un destino}
E3 = {(Fi,Dj) / Fi es una fuente, Dj es un destino}

ij i j 3
c si e=(F,D ) E
c(e)=
0 en otro caso


j j 2
b si e=(D ,p) E
b(e)=
0 en otro caso


i i 1
a si e=(s,F ) E
a(e)=
0 en otro caso

e
r
= (p,s): a(e
r
) = 0, b(e
r
) = b
j
, c(e
r
) = a
i
183
Definicin VII.4.1
Dado un flujo f factible en una red R = (V,E,a,b,c), podemos construir una red

R =(V, , d) donde = ,
donde y son construidos como sigue:
Si f(e) < c(e) entonces crear e con :
I(e) = I(e), T(e) = T(e), d(e) = a(e).
Si f(e) > b(e) entonces crear e con :
I(e) = T(e), T(e) = I(e), d(e) = -a(e)
Proposicin VII.4.1
Un flujo factible f en R = (V,E,a,b,c) es de costo mnimo si y slo si la red

R (f) no tiene circuitos absorbentes.


Demostracin.
Supongamos que

R (F) si tiene un circuito absorbente C, llamemos C


+
= C , C
-
= C .
Llamemos
+
= arcos en E asociados a arcos en C
+
,
-
= arcos en E asociados a arcos en C
-
. Por ser C un circuito
absorbente se tiene que
e

C
d(e) < 0.
Pero
e

C
d(e) =
e

C
+ d(e) +
e

C
- d(e) =
e

+ a(e) -
e
- a(e) < 0
Sea = Min { Min
e
+ [c(e) - f(e)], Min
e
- [ f(e) - b(e)] } > 0
Podemos entonces construir un nuevo flujo g como:
g(e) = f(e) + , si e
+
g(e) = f(e) - , si e
-
g(e) = f(e), si e(
+

-
)=.
El costo de este flujo es:
a * g =
e E
a(e)*g(e)

=
e
a(e)*(f(e)+)
+

+
e
a(e)*(f(e)-)

+
e
a(e)*f(e)

=
=
e E e e
a(e)*f(e) a(e) a(e)
+

(
+
(


< a * f
de donde se observa que g tiene menor costo que f.
Por otro lado, si

R (f) no tiene circuitos absorbentes, entonces, agregando los arcos necesarios para que un cierto
vrtice s, escogido arbitrariamente, sea una raz de

R (f) y dando a estos arcos una distancia sufientemente grande M>>0,


podemos asegurar que existen caminos mnimos desde s hasta cada vrtice x de

R (f).
De esta manera, podemos asociar los valores:
(x) = distancia mnima de s a x, xV, tales que:
e: (T(e)) - (I(e)) d(e).
Plantearemos a continuacin el dual del problema de flujo de costo mnimo:
max 0.X + b.Y - cZ
s.a. X.E + Y - Z = a, Y, Z 0
Definamos:
t(e) = (T(e)) - (I(e)) , (e) = Max [0, a(e) - t(e)] y (e) = Max [0, t(e) - a(e)]
As,
184
si e : (T(e)) - (I(e)) = (T(e)) -(I(e)) d(e) = a(e) t(e) a(e)
si e: (T(e)) -(I(e)) = (I(e)) - (T(e)) d(e) = -a(e) t(e) a(e)
Veamos que si las variables duales (X, Y, Z) toman los valores (, , ), esto es una solucin factible.
(e) 0, eE, pues si a(e) - t(e) < 0 entonces (e) = 0.
(e) 0, eE, pues si t(e) - a(e) < 0 entonces (e) = 0.
La restriccin dual se transforma en:
(T(e)) - (I(e)) + (e) - (e) = a(e)
y es fcil verificar que esta igualdad siempre se cumple.
Ahora slo falta ver que las soluciones (, , ), para el dual, y f para el primal, cumplen las condiciones de holgura
complementaria y que por lo tanto ambas son ptimas a sus respectivos problemas:
f(e) > b(e) t(e) a(e) (e) = 0
f(e) < c(e) t(e) a(e) (e) = 0
(e) > 0 a(e) > t(e) f(e) = b(e)
(e) > 0 t(e) > a(e) f(e) = c(e).

El algoritmo que presentamos a continuacin, conocido como algoritmo Primal, encuentra su justificacin en la
Proposicin VII.4.1.
FlujoCostoMin;
{Entradas: V, E, I, T, a, b, c, fi;
Salidas: f, Y, ExisteFCM }.
Variable Circuitabs : Booleana;
Comienzo
FlujoFact (V,E,I,T,b,c,fi; f,Y,ExisteFCM);
Si (ExisteFCM) entonces
Repetir
Construir

R =(V,,d) como en la definicin VIII.4.1, con = ;


{ aplicar CaminoMinGeneral a

R }
CaminoMinGeneral (V,, ,

T , d, s; , A, EsRaiz, CircuitAbs, C);


Si (CircuitAbs) entonces
Comienzo
C
+
C ;
C
-
C ;

+
arcos de E asociados a C
+
;

-
arcos de E asociados a C
-
;
Min {Min
e
+ [c(e)-f(e)],
Min
e
- [f(e)-b(e)]}; { > 0 }
Si ( ) entonces
Para todo e E hacer
Segn e hacer
Comienzo
e
+
: f(e) f(e) + ;
e
-
: f(e) f(e) - ;
e : f(e) f(e);
Fin ;
sino ExisteFCM FALSO;
Fin ;
185
hasta que (no CircuitAbs) (no ExisteFCM);
sino ExisteFCM FALSO
Fin.
VII.5 FLUJO MXIMO DE COSTO MNIMO
Sea R = (V, E {e
r
}, a, c) con e
r
= (p, s) y a: E
+
, c: E
+
, donde
+
representa a los reales no negativos.
El problema de hallar el flujo mximo de costo mnimo en R = (V, E, a, c) consiste en buscar un vector f tal que:
i) f sea un flujo en G(V,E {e
r
})
ii) 0 f(e) c(e), eE.
iii) f(e
r
) sea mximo.
iv)
eE
a(e)*f(e) sea mnimo bajo i), ii) y iii).
Es decir, se busca entre todos los flujos factibles en R = (V,E {e
r
}, a, c) aquellos con f(e
r
) mximo, y entre ellos
aquel que tenga el costo mnimo. Tenemos entonces una mezcla de dos problemas ya vistos: Flujo Mximo y Flujo de
Costo Mnimo.
Sean F = max f(e
r
) sobre R = (V,E {e
r
}, a, c) y A =
eE
a(e) + 1.
Existen dos formas de llevar el problema de Flujo Mximo de Costo Mnimo a un problema de Flujo de Costo
Mnimo :
a) Podemos considerar R=(V, E , a, b, c) donde:
E = E {e
r
}; a(e
r
) = -A; c(e
r
) = ; eE: (a(e) = a(e), c(e) = c(e)); eE: b(e) = 0
As, dando el valor negativo - A << 0 al arco e
r
, al minimizar
eE

a(e)*f(e) se tratar de dar el valor ms
grande a f(e
r
).
b) Otra forma es con R=(V, E, a, b,c) con E = E {e
r
}, donde:
a(e
r
) = 0, a(e) = a(e), eE
b(e
r
) = F, b(e) = 0,eE
c(e
r
) = , c(e) = c(e),eE
Definicin VII.5.1
Dado un flujo factible f en R = (V,E {e
r
}, a, c), llamaremos

R (f) la red

R =(V,,

d ) donde:
= construyendo y como sigue
si eE con f(e) < c(e), entonces e:
I(e) = I(e), T(e) = T(e), d(e) = a(e).
si eE con f(e) > 0, entonces e:
I(e) = T(e), T(e) = I(e), d(e) = -a(e).
Observacin:
En este caso

R (f) no tendr arcos asociados a e


r
.
Definicin VII.5.2
Llamamos una Solucin Parcial al problema de Flujo Mximo de Costo Mnimo, a una solucin ptima al
problema P(v), v
+
definido como:
186
min a * f
s.a.M * f = 0
f(e) c(e), eE
f(e
r
) v
f(e) 0, eE
Donde M es la matriz de incidencias de (V, E {e
r
})
El dual D(v) de este problema sera entonces:
max w = v.(e
r
) -
e
c(e).(e)
s.a. (T(e)) - (I(e)) - (e) a(e), eE
(s) - (p) + (e
r
) = 0
(e) 0,eE
Proposicin VII.5.1
Si (, ) es solucin ptima de D(v) entonces:
(e) = Max eE [0; (T(e)) - (I(e)) - a(e)]
Demostracin:
(e) debe ser mayor o igual a 0, eE, adems, en D(v) cada (e) aparece en una nica restriccin: la restriccin
asociada al arco e. Luego se puede despejar:
(e) (T(e)) - (I(e)) - a(e)
como -c(e)0 es el coeficiente de (e) en la funcin objetivo, concluimos que el mnimo valor que puede tomar (e) es Max
eE

[0; (T(e)) - (I(e)) - a(e)] que corresponde a su cota inferior.

Proposicin VII.5.2
Sea f una solucin factible a P(v), entonces:
f es solucin ptima a P(v) si y slo si

R (f) no tiene circuitos absorbentes si y slo si xV puede hallarse valores


(x) tal que:
(1) 0 < f(e) < c(e) (T(e)) - (I(e)) = a(e)
(2) (T(e)) - (I(e)) > a(e) f(e) = c(e)
(3) (T(e)) - (I(e)) < a(e) f(e) = 0.
Demostracin:
Supongamos que

R (f) tiene un circuito absorbente C, veremos que en ese caso f no puede ser solucin ptima a
P(v).
Por ser C un circuito absorbente:
e

C
[d(e)] < 0.
Sean C
+
= C , C
-
= C

+
= {eE/ eC
+
} ,
-
= {eE/ eC
-
}

e
+ a(e) -
e
- a(e) < 0, adems e
-
f(e) > 0 , y e
+
f(e) < c(e)
luego = Min { Min
e
+ [c(e) - f(e)], Min
e
- [f(e)]} > 0, y entonces el nuevo flujo g:
g(e) = f(e) + , si e
+
187
g(e) = f(e) - , si e
-
g(e) = f(e), si e
+

-
es factible a P(v) y su costo :
a*g =
eE
a(e)*g(e) =
e
a(e)*(f(e)+)
+

+
e
a(e)*(f(e)-)

+
e
a(e)*f(e)

=
e E
a(e)*f(e)

+
e e
a(e)- a(e)
+

(

(


< a * f
Por otra parte si

R (f) no tiene circuitos absorbentes, entonces podemos agregar a

R (f) los arcos necesarios, con


distancia M>>0, de forma que el vrtice s sea una raz y entonces podemos asegurar que existe distancia mnima de s a x,
xV.
En otras palabras, podemos encontrar valores (x), xV tales que:
(T(e)) - (I(e)) d(e), eE
As, si e entonces (T(e)) - (I(e)) d(e) = a(e). (*)
si e entonces (T(e)) - (I(e)) d(e) = -a(e)
(I(e)) - (T(e)) -a(e)
(T(e)) - (I(e)) a(e) (**).
Luego,
si 0 < f(e) < c(e), por (*) y (**): (T(e)) - (I(e)) = a(e) q.e.d. (1)
si (T(e)) - (I(e)) > a(e), negando (*) e f(e) = c(e) q.e.d (2)
si (T(e)) - (I(e)) < a(e), negando (**) e f(e) = 0 q.e.d. (3)
Supongamos por ltimo que disponemos de valores (x), xV, que satisfacen las condiciones (1), (2), (3).
Definamos g(e) = Max [ 0, (T(e)) - (I(e)) - a(e)], eE y g(e
r
) = (s) - (p)
Entonces (,g) es solucin factible de D(v), el dual de P(v).
Las condiciones de holgura complementaria entre P(v) y D(v) seran:
i) f(e) < c(e) g(e) = 0.
ii) f(e) > 0 (T(e)) - (I(e)) - g(e) = a(e)
i) g(e) > 0 f(e) = c(e)
ii) (T(e)) - (I(e)) - g(e) < a(e) f(e) = 0
Al verificar que efectivamente f y (,g) satisfacen estas condiciones, se habr demostrado que cada una de ellas es
solucin ptima a su respectivo problema.
i) Si g(e) > 0 ( por definicin) (T(e)) - (I(e)) > a(e) ( por (2) ) f(e) = c(e)
ii) Si (T(e)) - (I(e)) - g(e) < a(e) ( por definicin) g(e) = 0 (T(e)) - (I(e)) < a(e) ( por (3) ) f(e)
= 0.
i) Negando i ): Si g(e) = 0 f(e) < c(e).
ii) Negando ii ): Si f(e) > 0 (T(e)) - (I(e)) - g(e) = a(e)

VII.5.1 ALGORITMOS PARA EL PROBLEMA DE FLUJO MXIMO DE COSTO MNIMO


Formularemos a continuacin dos versiones del algoritmo de busqueda de Flujo Mximo de Costo Mnimo,
conocido tambin como Primal_Dual y propuesto por Ford & Fulkerson, basadas en cada una de las condiciones de la
Proposicin VII.5.2.
188
Primera Versin.
Se busca partiendo de f
o
: f(e) = 0, eE, construir una secuencia f
1
, f
2
, , f
k
, factibles en R = (V,E {e
r
}, a,
c), donde cada f
i
(e
r
) crezca montonamente hasta alcanzar el valor mximo f
k
(e
r
) = F. Cada solucin parcial f
i
ser
ptima al problema P(f
i
(u
r
)). Al construir

R (f
i
) entonces sta ser sin circuitos absorbentes.
Para pasar de f
i
a f
i+1
, se busca el camino ms corto de s a p en

R (f
i
). Este camino corresponder a una cadena de
aumento de s a p de costo mnimo en R = (V, E {e
r
},a,c) , y su distancia corresponder al aumento mnimo en costo por
unidad de flujo. Si no existe camino de s a p en

R (f
i
), entonces no existe cadena de aumento en R = (V,E {e
r
},a,c),
luego f
i
es ptimo.
El algoritmo, presentado de manera informal, sera el siguiente:
PRIMAL-DUAL (VERSIN 1): {Flujo Mximo de Costo Mnimo I};
{ Entradas: V, E, I, T, s, p, a, c, e
r
;
Salidas: f, ExisteFMCM }.
Comienzo
f(e) 0, eE ;
Camino VERDADERO;
ExisteFMCM VERDADERO;
Mientras ( Camino y ExisteFMCM) hacer:
Comienzo
CONSTRUIR

R (f);
Si ( C tal que C es un Camino Mnimo de s a p (C
s
p
) en

R (f) ) entonces
Comienzo
- Sea el conjunto de arcos que corresponden a C {e
r
} en R=(V,E{e
r
},a,c), con
=
+

-
donde
+
es el conjunto de arcos de con la misma direccin que e
r
;
Min [ Min
e
+ [c(e)-f(e)], Min
e
- [f(e)]]; { >0 }
Si ( = ) entonces ExisteFMCM FALSO
sino
Para todo eE hacer
Segn e hacer
Comienzo
e
+
: f(e) f(e) + ;
e
-
: f(e) f(e) - ;
Fin ;
Fin
sino Camino FALSO;
Fin ;
Fin.
Ejemplo de construccin de

R (f ):
Dada la red de la figura VII.2 donde los pares sobre los arcos son (a(e), c(e)), s=1, p=5.
4
1
(3,, 2)
(8, 10)
(1, 7)
(6, 8)
(2, 3)
(0, )
2
3
(3, 3) 5
(0, 6)
e
r
figura VII.2
189
Para el flujo f(1,2)=f(2,3)=f(3,4)=f(4,5)=f(5,1)=2; f(1,3)=f(3,2)=f(2,4)=0,

R( f ) sera:
Segunda Versin (para el problema de Flujo Mximo de Costo Mnimo).
Veremos a continuacin una presentacin algo distinta del mismo algoritmo ( adems la ms utilizada ). Esta otra
presentacin est basada en la segunda parte de la Proposicin VII.5.2. La diferencia esencial es que la bsqueda del
camino ms corto de s a p en

R (f) se simplifica gracias al conocimiento de los valores de (x) de la iteracin anterior.


Dispondremos en cada iteracin de una solucin f ptima de P(f(e
r
)), con valores de (x) que satisfacen:
(1) 0 < f(e) < c(e) (T(e))- (I(e)) = a(e).
(2) (T(e)) - (I(e)) > a(e) f(e) = c(e).
(3) (T(e)) - (I(e)) < a(e) f(e) = 0.
Cada iteracin consta de dos etapas:
i) Cambio de flujo.
Se construye R=(V,E,c) donde E = { eE/ (T(e)) - (I(e)) = a(e) } y en esta red se busca el flujo mximo. Note
que los arcos sobre esta red son aquellos que estaran en la arborescencia de distancias mnimas en

R (f). Evidentemente f
no es un flujo en R, pero sin embargo, el procedimiento de bsqueda de cadenas de aumento y de modificacin del flujo
permanece vlido al ser trasladado a R.
ii) Cambio de las variables duales ().
Cuando no se puede aumentar ya el flujo ( con f solucin ptima de P(f(u
r
)), sea Y el ltimo conjunto de vrtices
marcados por FlujoMax, tenemos que:
sY, pY.
e
+
(Y) E f(e) = c(e)
e
-
(Y) E f(e) = 0
Sean
A
+
= { e
+
(Y) / (T(e)) - (I(e)) < a(e) }
A
-
= { e
-
(Y)/ (T(e)) - (I(e)) > a(e) }
Si A
+
= e
+
(Y):(T(e)) - (I(e)) a(e) f(e) = c(e)
A
-
= e
-
(Y): (T(e)) - (I(e)) a(e) f(e) = 0
Por lo tanto, si A
+
A
-
= entonces
+
(Y) es un corte saturado y el flujo actual es ptimo a P(F).
Si A
+
A
-
entonces, sea
= Min { Min
e

A
+

[a(e) - (T(e)) + (I(e))] , Min
e

A
-

[(T(e)) - (I(e)) - a(e)]}
4
1
-3
8
3
6
2
2
3
-3
5
0
1
-2
0
figura VII.3
190
Es claro que > 0 y as los valores
(x) = (x), si xY
(x) = (x) + , si xY
satisfacen (1), (2) y (3) y adems representan las distancias mnimas de s a x en la nueva red

R (f).
El segundo algoritmo para resolver el problema del Flujo Mximo de Costo Mnimo es entonces:
FlujoMaxCostoMin (Versin 2):
{Flujo Mximo de Costo Mnimo II};
{ Entradas: V, E, I, T, s, p, e
r
, a, c;
Salidas: f, ExisteFMCM }.
Comienzo
f(e) 0, eE;
Dijkstra ( V,E,I,T,a,s; ,A,EsRaiz); { Valores iniciales de , con a(e) > 0, e }
Si (EsRaiz) entonces
Repetir
ExisteFMCM FALSO;
E { eE/ (T(e)) - (I(e)) = a(e) };
FlujoMax (V, E, I, T, e
r
, s, p, b, c, f; f, Y, MODIF, ExisteFM);
Si (ExisteFM) entonces { Existe un flujo mximo en la red }
Comienzo
A
+
{ e
+
(Y)/ (T(e)) - (I(e)) < a(e) };
A
-
{ e
-
(Y)/ (T(e)) - (I(e)) > a(e) };
ExisteFMCM VERDADERO;
Fin;
Si ( A
+
A
-
) y (no ExisteFMCM) entonces
Comienzo

+
Min
e

A
+
[a(e) - (T(e)) + (I(e))]; { Si A
+
= entonces
+
= }

-
Min
e

A
-
[(T(e)) - (I(e)) - a(e)]; {Si A
-
= entonces
-
= }
Min {
+
,
-
}; { > 0 }
Para todo xV tal que xY hacer:
(x) (x) + ;
Fin ;
hasta que (no ExisteFMCM) (A
+
A
-
= );
sino ExisteFMCM FALSO;
Fin.
La terminacin de ambos algoritmos la justifican los mismos argumentos que el algoritmo de Flujo Mximo en el cual se
basan.
VII.6 EJERCICIOS
1. Use el algoritmo CaminoMinGeneral para encontrar la distancia y el camino ms corto del vrtice 6 a cualquier
vrtice del siguiente grafo:
191
2. Use el algoritmo CaminoMinGeneral para encontrar el camino ms corto del vrtice 6 a cualquier vrtice del grafo
del ejercicio 1 modificando el costo del arco (6,8) por 14. Existe un circuito absorvente?.
3. El siguiente grafo contiene un circuito absorvente?. Aplique el algotirmo CaminoMinGeneral.
4. Determinar una solucin ptima del problema de flujo mximo en la siguiente red. Encontrar un corte de capacidad
mnima.
5. Considere la siguiente red donde las capacidades son los nmeros en las aristas:
1
2
3
4
5
6
7
8
9
1
8
2
-10
5
4
5
6
1
5
4
7
2 5
2
4
figura VII.4
3
-5
0
2
-4 -2
6 -2 -1
-1
5
1
1 3
-1
3
-3
2 -1
-1 4
-3
1
2
-1
8 -2
figura VII.5
10
20
10
10
3
5
4
8
4
5
7
3
6
1
7
5
2
2
3
5
10
10
20
10
u
r
figura VII.6
192
4
1
(3, 0, 2)
(8, 0, 10)
(1, 0, 7)
(6, 0, 8)
(2, 0, 3)
(0, 6, )
figura VII.9
2
3
(3, 0, 3)
a) Determine un flujo mximo de s a p.
b) Proponga una variante simple del algoritmo de Ford y Fulkerson que se aplique de manera directa en el caso
de redes no orientadas.
6. En la red siguiente los dos nmeros asociados a cada arco corresponden el primero y el segundo respectivamente a
una cota inferior y una cota superior del valor del flujo en ese arco.
7. Halle un flujo de costo mnimo en
la siguiente red donde al lado de
cada arco se representa (a(e), b(e),
c(e)):
8. Resuelva el siguiente problema de transporte:
A
ij
B1 = 15 B2 = 20 B3 = 30 B4 = 35
C1 = 25 8 5 6 7
C2 = 25 8 2 7 6
C3 = 50 9 3 4 8
9. Determine un flujo mximo de costo mnimo en la red del ejercicio 7, tomando a s=1, p=4 y reemplazando la terna de
(p,s) por (0,0,6) (todo los b(e) deben ser cero como se muestra). Utilice los dos algoritmos dados.
2
1
3
5
3
3
2
1
1
4
4
u
r
s p
figura VII.7
p
s
(0, 2)
(0, 2)
(1, 2)
(0, 3)
(0, 2)
(0, )
figura VII.8
1
2
a) Determine un flujo factible partiendo del flujo cero.
b) A partir del flujo f(s,1)=f(1,2)=f(2,p)=f(u
r
)=2,
f(1,p)=f(s,2)=0, aplique el algoritmo de Ford y
Fulkerson para hallar un flujo mximo.