Está en la página 1de 6

1.

Redes. Flujo mximo a

Otro de los grandes problemas de optimizacin se da en la bsqueda del ujo mximo en las redes de o u a distribucin. o Denicin 33.- Llamaremos red a un digrafo simple con dos vrtices especiales, un minimal (la fuente) o e s y un maximal (el pozo) t, y que tiene asignada una capacidad no negativa cij a cada arco (vi , vj ) del digrafo. Un ujo f , es una asignacin de un valor fij a cada arco (vi , vj ) del digrafo. Escribiremos f+ (v) o para denotar el ujo total saliente de un vrtice v ; y f (v) para denotar el ujo total entrante. Es decir e f+ (vi ) = fik , la suma de los ujos de los arcos salientes de vi y f (vi ) = fki , la suma de los ujos de los arcos entrantes. El ujo debe cumplir dos condiciones (en ocasiones se distingue denominndolo a ujo factible o vlido): a el ujo en cada arco debe ser no negativo y no exceder la capacidad del arco, 0 fij cij en cada vrtice v = s y v = t, distinto de la fuente y el pozo, debe cumplirse que f (v) = f+ (v) e (Conservacin del ujo o Ley de Kirchho) o Naturalmente es obvio que f (s) = 0 = f+ (t). Y es sencillo comprobar que Demostracin: o En efecto, por ser un digrafo (todo arco sale de un vrtice y llega a otro) se tiene e Lema 34.- Para cualquier ujo (factible) en una red se cumple que f+ (s) = f (t)
k k

.c

om

a1

1.5.1

Recorridos aumentadores

Antes de nada, intentemos explicar cmo puede aumentarse el ujo, ejemplicando sobre los dibujos o siguientes. Sobre cada arco indicamos su capacidad y el ujo actual entre parntesis y para indiciar los e datos, suponemos s = v0 y t = v5 . Supongamos que tenemos un camino de s a t, un camino legal siguiendo las direcciones de las echas, tal que en cada arco del camino el ujo existente no ocupa toda la capacidad del arco, que hay margen en cada arco para aumentar el ujo (como s = v0 v1 v2 v5 = t en el dibujo, con c01 f01 = 2 1 = 1 > 0, c12 f12 = 3 1 = 2 > 0 y c25 f25 = 2 0 = 2 > 0). Entonces, si sumamos el m nimo de los mrgenes m al ujo de cada arco del camino, el nuevo ujo f as construido es vlido y a a tiene mayor valor, val(f ) = val(f ) + m > val(f ) (en nuestro ejemplo 1 = m n{1, 2, 2}, y f01 = 1 + 1, f12 = 1 + 1, f25 = 0 + 1, con val(f ) = val(f ) + m = 1 + 1).
m12 = 1

ww w.

Reconoceremos ms fcilmente ahora que los ujos en redes son de aplicacin en multitud de campos, a a o en redes de ujo elctrico, distribucin de agua, trco en carreteras, redes de transmisin de datos, e o a o distribucin de mercancias del productor al consumidor, etc. o El objetivo de la optimizacin es por tanto maximizar el valor del ujo en la red. Y la manera de hacerlo o es buscar caminos desde el nodo fuente al pozo en los que sea posible aumentar el ujo.

at

em

A ese valor comn del ujo saliente en s y del ujo entrante en t se le llama valor del ujo, es decir, u val(f ) = f+ (s) = f (t).

vs m25 = 2 2 Er (1)2 rr(0) 2 rr (1)1 r st j s s rr B rr (0)1 r s j r E s (1) 1 v3 (1)1 v4


m01 = 1

vs 1 B

(1)3

at

ic

y como por la ley de Kirchho, f (v) = f+ (v) para todo v que no sea s ni t, la igualdad se reduce a f (s) + f (t) = f+ (s) + f+ (t), pero como f (s) = f+ (t) = 0, se tiene que f+ (s) = f (t).

vV

f (v) =

vV

f+ (v),

vs (1+1) 3 E s v2 1 r B (1+1) 2 rr(0+1) 2 rr (1) 1 r st j s s rr B rr (0)1 r s r j E s (1)1 v3 (1)1 v4

El camino de s a t que hemos tomado ser por tanto un camino aumentador del ujo. Pero puede a ocurrir que no dispongamos de estos caminos y sin embargo el ujo pueda aumentarse. Con el nuevo ujo obtenido sobre la red no podemos encontrar otro camino aumentador, pues no podemos aumentar yendo desde s por v1 , y tampoco con el camino s v3 v4 . Existe otra posibilidad, que es considerar recorridos sin tener en cuenta el sentido de las echas (que sern caminos no legales, pero vlidos para nuestros propositos): supongamos que tenemos un a a recorrido de s a t, sin tener encuenta las direcciones de las echas, tal que cada arco de ese camino siguiendo la direccin de las echas (hacia adelante) el ujo existente no ocupa toda la capacidad del o arco que hay margen para aumentar el ujo, y que en cada arco del camino en direccin contraria o de la echa (hacia atrs) el ujo existente es mayor que cero que hay margen para disminuir el ujo a (como s = v0 v3 v2 v5 = t en el dibujo, con c03 f03 = 1 0 = 1 > 0, f23 = 1 > 0 y c25 f25 = 2 1 = 1 > 0). Entonces, si sumamos el m nimo de los mrgenes m al ujo de cada arco a hacia adelante y se lo restamos al ujo de cada arco hacia atrs, el nuevo ujo f as construido es vlido y a a tiene mayor valor, val(f ) = val(f )+m (en nuestro ejemplo 1 = m n{1, 1, 1}, y f03 = 0+1, f23 = 11, f25 = 1 + 1, con val(f ) = val(f ) + m = 2 + 1 = 3). f
vs (2)3 E s v2 m25 = 1 1 rr (1) 2 B (2)2 rr r s (1)1 j r s s r t B m23 = 1 rr (0)1 rr s r j E s (1) 1 v3 (1)1 v4 m03 = 1 vs (2)3 E s v2 1 B (2)2 rrr(1+1) 2 r r s (11) 1 j r s s r t B rr rr (0+1) 1 rs j E s (1)1 v3 (1)1 v4

Demostracin: o P es un recorrido de s a t, como s es minimal y t maximal, el arco de s al primer vrtice y el arco del e ultimo vrtice a t son hacia adelante, por lo que para el nuevo ujo se suma en ambos m (+). En los e vrtices intermedios solo pueden darse 4 situaciones (como en el dibujo): e (i) vi est entre dos arcos hacia adelante, en ambos se suma m (+ y +); a (ii) vj est entre un arco hacia adelante y otro hacia atrs, en el primero se suma m y en el segundo a a se resta m (+ y ); (iii) vk est entre un arco hacia atrs y otro hacia adelante, se resta m y se suma m ( y +); a a (iv) vs est entre dos arcos hacia atrs, en ambos se resta m ( y ). a a s v1 vi1 vi vi+1 vj1 vj vj+1 vk1 vk vk+1 vs1 vs vs+1 vn t a (i) el arco anterior a vi incrementa su ujo en m, luego f (vi ) = f (vi )+m (los dems arcos entrantes en vi no modican su ujo), y el arco siguiente saliente de vi tambin incrementa su ujo en m, e a luego f+ (vi ) = f+ (vi ) + m (los dems arcos salientes de vi no modican su ujo); por lo que se e mantiene la condicin del ujo f (vi ) = f+ (vi ) para el vrtice. o (ii) el arco anterior a vj , que es hacia adelante y entrante en vj , incrementa su ujo en m y el arco siguiente tambin es entrante en vj , pero es hacia atrs, por lo que reduce su ujo en m, luego e a e f (vj ) = f (vj ) + m m = f (vj ) y como los salientes de vj no aparecen invlolucrados, tambin e se mantiene f+ (vj ) = f+ (vj ); por lo que f (vj ) = f+ (vj ) para el vrtice.
+ + + + + +

ww w.

at

Lema 35.- Si P es un recorrido aumentador con margen m nimo m, entonces incrementando el ujo en m en los arcos hacia adelante de P y reduciendo el ujo en m en los arcos hacia atrs de P se obtiene a un ujo vlido con val(f ) = val(f ) + m. a

em

El recorrido de s a t es por tanto un recorrido aumentador, y en este sentido se denen los recorridos (tambin llamados caminos) aumentadores. Todo recorrido aumentador debe comenzar en s y acabar e en t, tener un margen m nimo positivo (sino no ser aumentador) y no pueden repetirse vrtices (sin a e direcciones, un camino no dirigido).

at

ic

a1

.c

om

(iii) Es anlogo al caso (ii) con ambos arcos salientes del vrtice: f+ (vk ) = f+ (vk ) m + m = f+ (vk ) a e (iv) Anlogo al caso (i) con ambos arcos hacia atrs f (vs ) = f (vs ) m y f+ (vs ) = f+ (vs ) m a a luego todos los vrtices distintos del fuente y el pozo verican la condicin de ujo. Adems, es evidente e o a que al tomar como m el m nimo de los mrgenes de holgura hasta la capacidad en los vrtices hacia a e adelante, no superaremos la capacidad de esos arcos al aumentar el ujo con m y, como este valor es tambin el m e nimo de los ujos de arco en los arcos hacia atrs, el ujo de estos arcos seguir siendo no a a negativo al restar m. Luego tambin 0 fij cij en cada arco. e Finalmente, como f+ (s) = f+ (s)+m y f (t) = f (t)+m el valor del nuevo ujo estar incrementado a en m, es decir, val(f ) = val(f ) + m.

1.5.2

Conjuntos de corte

ww w.

Ejemplo En la red que hemos usado antes, los conjuntos de corte [S1 , T1 ], con S1 = {s, v1 , v3 } y T1 = {v2 , v4 , t} (a la izquierda en el dibujo), y [S2 , T2 ], con S2 = {s, v2 , v3 } y T2 = {v1 , v4 , t} (la gura de la derecha): [S1 , T1 ]
v2 Es rr (1)2 (2)2 r rr (1)1 r st j s s r B rr rr (0)1 rs j E (1)1 s v3 (1) 1 v4 vs 1 B (2) 3

at

em

Usando la notacin ya introducida de ujo saliente y entrante, el ujo neto a travs del conjunto de o e corte lo podemos representar por f+ (S) f (S), el ujo saliente de S (de los arcos hacia adelante) menos el ujo entrante en S (de los arcos hacia atrs). a Aunque el conjunto de corte est formado por los arcos, es la eleccin de los conjuntos S y T quien lo e o determina. De hecho, se les denomina de conjuntos de corte porque si eliminamos esos arcos se desconecta el digrafo, pero no cualquier conjunto de arcos que desconecte el digrafo es un conjunto de corte. La unica regla que debe cumplirse para la divisin de los nodos en los conjuntos S y T es que s S y t T . o

El conjunto de corte [S1 , T1 ] est formado por los arcos hacia adelante (v1 , v2 ) y (v3 , v4 ), y el arco a hacia atrs (v2 , v3 ); su capacidad ser cap [S1 , T1 ] = c12 + c34 = 3 + 1 y el ujo a travs de el, a a e f+ (S1 ) f (S1 ) = (f12 + f34 ) (f23 ) = 2 + 1 1 = 2. El segundo conjunto de corte [S2 , T2 ] est formado por los arcos hacia adelante (s, v1 ), (v3 , v4 ) y a (v2 , t), y el arco hacia atrs (v1 , v2 ); su capacidad ser cap [S2 , T2 ] = c01 + c34 + c25 = 2 + 2 + 1 y el a a ujo a travs de el, f+ (S2 ) f (S2 ) = (f01 + f34 + f25 ) (f12 ) = 2 + 1 + 1 2 = 2. e Obsrvese que en los dos casos del ejemplo anterior, las capacidades de los conjuntos de corte son e diferentes, sin embargo el ujo neto a travs de ellos coincide; y, no por casualidad, coincide con val(f ). e Lema 37.- Si U es un conjunto de vrtices de una red, f+ (U ) f (U ) = e
vU

at

ic

[S2 , T2 ] vs (2)3 E s v2 1 rr (1)2 B (2)2 rr r s (1)1 r t j s s r B rr (0)1 rr s j r E s (1)1 v3 (1)1 v4

a1

Denicin 36.- Si dividimos el conjunto de vrtices de la red en dos conjuntos, S conteniendo a s y T o e conteniendo a t, se llama conjunto de corte y se denota por [S, T ], a los arcos que unen nodos de S y T. Se llama capacidad del conjunto de corte a la suma de las capacidades de los arcos hacia adelante (que van de un vrtice de S a un vrtice de T ) y se dice que el ujo neto a travs del conjunto de corte e e e es la suma de los ujos de los arcos hacia adelante menos los ujos de los arcos hacia atrs (que van a de un vrtice de T a un vrtice de S ). e e

.c

om

f+ (v) f (v)

Demostracin: o En efecto, veamos como contribuye cada arco de la red a los dos miembros de esta igualdad. Sea (vi , vj ) un arco del digrafo, entonces: si vi , vj U , el arco no contribuye en ninguno de los dos miembros / si vi , vj U , el arco no contribuye al primer miembro de la igualdad (ni es ujo saliente ni entrante en U ) y en el segundo miembro, contribuye con fij a f+ (vi ) (que suma) y con fij a f (vj ) (que resta), por lo que contribuye en total con 0 si vi U y vj U , fij contribuye a f+ (U ) del primer miembro y con fij a f+ (vi ) en el segundo / miembro si vi U y vj U , fij contribuye a f (U ) del primer miembro y con fij a f (vj ) en el segundo / miembro Como la aportacin de cada arco del digrafo es la misma en ambos trminos, la igualdad se cumple. o e Es muy sencillo ahora probar el interesante resultado siguiente Lema 38.- El ujo neto a travs de cualquier conjunto de corte coincide con val(f ) e Demostracin: o Por el lema anterior, el ujo neto a travs del conjunto de corte es f+ (S) f (S) = e

.c

om

a1

Corolario 39.- El valor del ujo de una red no puede exceder la capacidad de ningn conjunto de corte u Demostracin: o val(f ) = f+ (S) f (S) f+ (S) que es la suma de los ujos de los arcos hacia adelante y como la capacidad del conjunto de corte es la suma de las capacidades de esos arcos y se cumple 0 fij cij , tenemos el resultado propuesto val(f ) f+ (S) cap [S, T ].

Teorema 40.- El valor del ujo de una red es mximo si y slo si no existe ningn recorrido aumentador a o u Demostracin: o Evidentemente, si existe un recorrido aumentador de s a t, el ujo puede aumentarse, por lo que no ser a mximo. a En el otro caso, si no existe un recorrido aumentador de s a t, veamos que el ujo es mximo. No a existe un recorrido aumentador de s a t, pero podr construirse recorridos aumentadores a otros vrtices an e de la red; sea entonces S0 el conjunto formado por s y los nodos a los que s hay un recorrido aumentador, y T0 el resto. Como no hay recorrido aumentador de s a t, t T0 , luego [S0 , T0 ] es un conjunto de corte. Sea (vi , vj ) un arco cualquiera del conjunto de corte, entonces: si vi S0 y vj T0 , debe ser fij = cij , pues como hay un recorrido aumentador de s a vi , s vi , si fuera fij < cij tendr amos un recorrido aumentador s vi vj , lo que no puede ser ya que vj T0 y no hay recorrido aumentador de s a vj . Luego fij = cij . si vj S0 y vi T0 , debe ser fij = 0, pues como hay un recorrido aumentador de s a vj , s vj , si fuera fij > 0 tendr amos un recorrido aumentador s vj vi , lo que no puede ser ya que vi T0 y no hay recorrido aumentador de s a vi . Luego fij = 0.

ww w.

Con el resultado anterior podemos establecer el teorema que nos permitir la creacin de un algoritmo a o ecaz para la obtencin del ujo mximo: o a

at

em

at

ic

Como por la ley de conservacin del ujo f+ (v) = f (v) para todo v = s, t y t S , la suma se reduce a o / f+ (S) f (S) = f+ (s) f (s) = f+ (s) = val(f )

vS

f+ (v) f (v).

En consecuencia, el ujo en los arcos hacia adelante coincide con la capacidad y en los arcos hacia atrs es 0; por lo que val(f ) = f+ (S0 ) f (S0 ) = f+ (S0 ) = cap [S0 , T0 ]. a Ahora bien, como val(f ) cap [S, T ] para cualquier conjunto de corte, en particular para [S0 , T0 ] y en l se da la igualdad, el ujo no puede aumentarse ms por lo que es mximo. e a a Teorema del ujo mximo y corte m a nimo (Ford-Fulkerson) 41.- El ujo mximo en una red es a igual al m nimo de las capacidades de los conjuntos de corte Demostracin: o De la demostracin del teorema anterior, si f es un ujo mximo su valor val(f ) = cap [S0 , T0 ] para un o a cierto conjunto de corte, pero como val(f ) cap [S, T ] para cualquier conjunto de corte, cap [S0 , T0 ] = val(f ) cap [S, T ] para cualquier conjunto de corte, y en consecuencia, [S0 , T0 ] es un conjunto de corte de capacidad m nima.

1.5.3

Algoritmo de Ford-Fulkerson o del Flujo mximo a

P.2.- Si todos los vrtices etiquetados han sido explorados, FIN (no hay recorrido aumentador) e P.3.- Se busca un vrtice etiquetado vi que no haya sido explorado e P.4.- Si todo vrtice adyacente a vi est etiquetado o no tiene holgura, se marca vi como explorado y e a se vuelve al Paso 2 P.5.- Para todo vrtice adyacente vj no etiquetado, e Si el arco es (vi , vj ) hacia adelante y fij < cij , se calcula mj = m n{mi , cij fij } (el margen m nimo acumulado) y se etiqueta vj con (i+ , mj ) Si el arco es (vj , vi ) hacia atrs y fji > 0, se calcula mj = m a n{mi , fji } y se etiqueta vj , m ) con (i j P.6.- Si t no est etiquetado, se vuelve al Paso 2 a P.7.- Si t est etiquetado, hemos construido un recorrido aumentador R. Recorrer hacia atrs el recorrido a a R aumentando el ujo existente con mt P.8.- Eliminar todas las etiquetas y volver al Paso 1.

ww w.

P.1.- Se etiqueta s con (0, ). (Es decir, no proviene de ningn vrtice y el margen es total.) u e

Algoritmo 5.- (de Ford-Fulkerson)

at

Si bien el teorema del Flujo mxino y corte m a nimo es el ms conocido y admirado, no es util para la a obtencin de un ujo mximo (en una red de n nodos tendr o a amos que chequear 2n2 conjuntos de corte y eso slo para conocer el valor del ujo mximo). El algoritmo se basa en el Teorema 40 anterior, se van o a buscando recorridos aumentadores del ujo hasta que no sea posible encontrar ms. a Para la bsqueda del recorrido aumentador, se usan dos procesos que conviene explicar, el etiquetado u de un vrtice y la exploracin de un vrtice. Explorar un vrtice es buscar los vrtices conectados con e o e e e l mediante un arco, saliente o entrante, y son estos vrtices encontrados en la exploracin los que son e e o etiquetados; slo se etiquetan si no lo estaban ya y si tienen margen para aumentar el ujo. En el etiquetado, o debe indicarse el vrtice desde el que ha sido etiquetado y el margen posible de aumento; tambin suele e e indicarse si el arco para llegar a l se recorre hacia adelante o hacia atrs. e a Inicialmente, se etiqueta solo s y se explora s, lo que produce el etiquetado de nuevos vrtices. Para e garantizar que la bsqueda avanza hacia t, se van explorando vrtices ya etiquetados previamente es decir u e para los que ya tenemos un recorrido aumentador y no explorados, y se sigue as hasta llegar a t.

em

at

ic

a1

.c

om

Como puede verse en la estructura, el algoritmo trata unicamente de construir un recorrido aumentador y cuando lo encuentra, vuelve a empezar para construir otro; y as hasta que no sean posibles ms recorridos a aumentadores. Notemos que cada vrtice etiquetado es nal de un recorrido aumentador parcial desde s, luego en e el proceso se van obteniendo multiples recorridos aumentadores parciales, de hecho todos los posibles recorridos aumentadores hasta ese momento, y es slo la eleccin del vrtice a explorar la que determina o o e que avancemos antes por un camino u otro. As cuando en la exploracin de un vrtice se dice que nos limitemos a los nodos no etiquetados (y , o e con holgura claro!), no se estn cercenando posibilidades (a ese vrtice que no puedo etiquetar por que a e ya lo estaba, ya le llega un camino aumentador) y es la manera de garantizar que el recorrido aumentador a construir avanza hacia el pozo y no retrocede (y no se producen ciclos). Slo as se puede garantizar que o el algoritmo termina y con xito. e Veamos la aplicacin del algoritmo sobre la red usada anteriormente, haciendo v1 = s y v6 = t: o
v2 (1) 3 v3 r Er r B (0) rr 2 (1) 1 r r v6 j r rr B rr r E r (1) 1 (0) 1 j v v (1) 2
4

(0, )

(1) 1

v E3 r r (0) rr 2 (1) 1 r r v6 j r rr B rr r Er (1) 1 (0) 1 j v (1) 2

(1+ , 1)(1) 3

(1+ , 1)(1) 1

Er r r (0) 2 B (1) 1 rrr r j r rr B v6 rr r Er (1) 1 (0) 1 j


(1) 2 (1+ , 1)(1) 1 v5 Explorables = { v3 , v4 } 3 r (1 + 1) Er r (0 rr+ 1) 2 (1) 1 rr j r rr B (1) 1 (0) 1 rr j r Er v

(1+ , 1)(1) 3 (2+ , 1)

Explorables = { v1 }

Explorables = { v2 , v4 }

at
(1+ , 1)(1) 1

Er r B rr (0) 2 rr r (1) 1 j v6 r rr B (1) 1 (0) 1 rr jr Er


(1) 2 (1+ , 1)(1) 1 v5 Explorables = { v3 } v2 (2) 3 v3 r Er r B (1) rr 2 (1) 1 r r v6 j r rr B (0) 1 rr jr E r (1) 1 (2) 2 v4 (1) 1 v5

Er r (0) rr 2 (1) 1 r r (3+ , 1 j r rr B (1) 1 (0) 1 rr j r Er v


(1) 2

a1
5

(1+ , 1)(1) 3 (2+ , 1)

(1+ , 1)(1) 3 (2+ , 1)

.c
(1 + 1) 2

om

ic

(1) 1

em

Pozo v6 etiquetado: Aumento!

Recorrido aumentador

(0, )

v2 (2) 3 v3 Er r r B (1) rr 2 (1) 1 r r v6 j r rr B (0) 1 rr j r Er (1) 1 (2) 2 (1+ , 1)(1) 1 v5

v2 (2) 3 (4 , 1) Er r r B (1) rr 2 (1) 1 r r v6 j r rr B (0) 1 rr j r Er (1) 1 (2) 2 (1+ , 1)(1) 1 v5

ww w.

at

Explorables = { v1 }

Explorables = { v4 }

Explorables = { v3 } v E3 r r (2) rr 2 (0) 1 rr j r rr B v6 rr r E r (1) 1 (1) 1 j v v (2) 2

Er r (2) 3 E r r (1) r (1 + 1) 2 B (2) 2 rr 2 (1 1) 1 rrr (1) 1 r r (3+ , 1) r j jr r rr rr B B rr r E r (1) 1 rr r Er (1) 1 (0 + 1) 1 (0) 1 j j v v


(2) 2

(3 , 1)(2) 3 (4 , 1)

v2

(2) 3

v1

(1+ , 1)(1) 1

(1) 1

(1) 1

Pozo v6 etiquetado: Aumento!

Recorrido aumentador

Exploramos v1 y Explorables = {} . FIN

Observaciones 42.Aunque en el estudio de las redes y los ejemplos usados tenemos un ujo dado a la red, no es necesario sino que puede usarse como ujo inicial cero en cada arco. Para nosotros, una red tiene una sola fuente y un slo pozo, pero si tenemos varias fuentes y/o o pozos, puede aplicarse todo lo anterior sin ms que construir una nueva red con una sola fuente y/o a un solo pozo. En efecto si tenemos varias fuentes como s1 y s2 , aadimos un nuevo vrtice s y dos arcos de s n e a s1 y de s a s2 . La capacidad del nuevo arco a s1 ser la suma de las capacidades de los arcos a salientes de s1 y el ujo la suma de los ujos; y lo mismo para el otro arco. Si tenemos varios pozos, aadimos un nuevo pozo conectado desde los otros pozos y de manera similar se obtienen n las capacidades y ujos.

También podría gustarte