Fundamentos de la teoría de grafos. 3º I.T.I. de Sistemas Mª Teresa Cáceres Sansaloni Tema 4: Redes y flujos • Redes. • Flujos y cortes. • Teorema del flujo máximo – corte mínimo. • Algoritmo para calcular el máximo flujo y determinar un corte mínimo en una red. • Complejidad del algoritmo. 1 Ejemplos: ∏ Un partido de futbol de gran interés tendrá lugar en una isla canaria. Los aficionados del equipo visitante quieren ver el partido y animar a su equipo. Hay varias rutas y vuelos para llegar a la isla, y el número máximo de plazas de las mismas es conocido. ¿Cómo determinar el máximo número de aficionados que pueden ir y las rutas que deben tomar? ∏ Un producto se fabrica en A y se distribuye a varios destinos para la venta D1,D2,…,Dn . Suponiendo demanda ilimitada, conocidas las rutas desde A a cada destino y el máximo número de unidades del producto que pueden ser transportadas. ¿Cuál es el máximo número de unidades que pueden servirse? ∏ Las redes son buenos modelos para sistemas de distribución de oleoductos, tuberias , tráfico, etc. En las conducciones hay estaciones de bombeo. ¿Cuál es el máximo flujo de una estación a otra, dado que las tuberías tienen capacidad finita?. ¿Cuál es el flujo máximo de vehículos por una carretera? 2 Redes Una red N es un digrafo D con dos vértices destacados s (fuente), y t (sumidero) , con una función capacidad c, asociada a los arcos, que toma valores enteros no negativos, o el valor • D es el digrafo subyacente de la red N Si a = (u,v) œ E(D) , entonces c(a)=c(u,v) es la capacidad de a s tiene grado de entrada d+(s) = 0 t tiene grado de salida d-(s) = 0 Para determinar el máximo número de personas que pueden volar de s hasta t usando distintas rutas y aeropuertos. El modelo de red considera: Vértices: Fuente = origen s; Sumidero = destino t; los demás vértices son los aeropuertos intermedios. Arcos: (x,y) representa un vuelo directo de x hasta y c(x,y) = máximo número de asientos disponibles en un vuelo de x a y 3 ¿Cuál es el máximo número de unidades que pueden servirse? Vértices: Fuente = A; Introducimos el sumidero = t; cada vértice Di es adyacente a t. Arcos: (Di , t) con capacidad ilimitada (¶) para 1 § i § n. a los otros arcos (x,y) se les asigna la capacidad igual al máximo número de unidades de producto que pueden transportarse directamente desde x hasta y en un día. 4 Sea N una red con digrafo asociado D, vértices fuente s y sumidero t , y sea c la función capacidad asociada a los arcos. Para x e V(D) definimos los vecinos de x : de salida N+ (x) = {y e V(D) / (x,y) e E(D) } de entrada N- (x) = {y e V(D) / (y,x) e E(D) } Flujos y cortes Un flujo f en N es una función entera f : E(D) ö Z+ que verifica: Restricción de capacidad: (el flujo nunca excede a la capacidad) 0 § f(a) § c(a) para todo a e E(D) Principio de conservación: ∑ f ( x, y ) = ∑ f ( y , x ) y∈N + ( x ) ∀x ∈ V ( D) − {s, t} y∈N − ( x ) 5 Flujo neto de salida de un vértice x es : ∑ f ( x, y ) − ∑ f ( y , x ) y∈N + ( x ) y∈N − ( x ) Flujo neto de entrada de un vértice x es : ∑ f ( y , x ) − ∑ f ( x, y ) y∈N − ( x ) y∈N + ( x ) Flujo en un arco a = (x,y) es denotado por f (a) = f (x,y) y puede ser interpretado como la cantidad de material (o personas, coches, etc...) transportado a lo largo del arco (x,y) El principio de conservación establece que si x ∫s y x ∫t entonces su flujo neto de entrada y su flujo neto de salida son ambos igual a 0 6 El valor f (N) del flujo en la red N , es el flujo neto de salida del vértice fuente s f (N ) = ∑ f ( s , x ) − ∑ f ( x, s ) x∈N + ( s ) x Ejemplo En cada arco figura ( capacidad, flujo) x∈N − ( s ) 3,3 5,3 s y 3,2 z 6,2 1,1 4,2 4,1 u v 4,4 5,3 3,1 t 3,2 f(N) = ?3+2-1 w f(y,z) = 2 c(y,z) = 3 7 Definición: Sean D un digrafo, X e Y subconjuntos no vacíos de vértices. (X,Y) es el conjunto de todos los arcos dirigidos desde algún vértice de X a algún vértice de Y (X,Y) = {(x,y) e E(D) / x e X, y e Y} su flujo y capacidad correspondientes son: f ( X ,Y ) = ∑ f ( x, y ) c ( x, y ) ; c ( X , Y ) = ( x , y∑ )∈( X ,Y ) ( x , y )∈( X ,Y ) donde f ( X , Y ) = c( X , Y ) = 0 si ( X , Y ) = φ En el ejemplo anterior, si X = {x,y,u} e Y = {u,v,z,y} x (X,Y) = {(x,y), (y,u), (y,z),(u,v)} s 5,3 4,2 4, 1 3,3 y 3,2 z 1,1 u 5,3 v 3,1 w 4,4 6, 2 t 3,2 8 Definición: Un corte en N es un subconjunto de arcos (P, P) en D, tal que s e P pero t – P y P = V(D) – P c(P, P) es la capacidad del corte. f(P, P) es flujo desde P hasta P f(P, P) es flujo desde P hasta P En el ejemplo: Calcularlo para P = {s, y, w} Teorema 1: Sea la red N, y f un flujo en N. Si (P, P) es un corte de N, entonces el flujo en N es f (N ) = ∑ f ( x, y ) − ( x , y )∈( P , P ) ∑ f ( y, x) = f ( P, P ) − f ( P , P ) ( y , x )∈( P , P ) 9 Corolario 1: 1 Sea N un red y f un flujo en N , entonces f ( N ) ≤ min { c( P, P ) } donde el mínimo se toma para todos los cortes en N Corolario 2: 2 Sea N un red y f un flujo en N , entonces el valor del flujo en N es igual al flujo neto en el sumidero t. f (N ) = ∑ f ( x, t ) − ∑ f (t , x) x∈N − ( t ) x∈N + ( t ) 10 Teorema del flujo máximo y corte mínimo Un flujo f en una red N es un flujo máximo si f ( N ) ≥ f ' ( N ) para todo flujo f ' en N Un corte (P,P) es un corte mínimo de N si c( P, P ) ≤ c( X , X ) para todo corte ( X , X ) en N Teorema (Ford y Fulkerson) En cualquier red, el valor de un flujo máximo es igual a la capacidad de un corte mínimo. 11 Ejemplo: En la figura, el dato de cada arco es su capacidad f1 y f2 son flujos máximos u 1 2 1 1 4 s x 1 t v 4 3 5 2 w 3 y El valor del flujo f1 y f2 para N es 6 igual al flujo neto en t. f(x,t) +f(y,t) = 1 + 5 Ningún flujo puede exceder a 6. arco a f1(a) f2(a) (s,u) 1 2 (s,v) 4 1 (s,w) 1 3 (u,x) 1 1 (u,v) 0 1 (v,y) 4 2 (w,y) 1 3 (w,s) 0 0 (x,v) 0 0 (x,t) 1 1 (y,t) 5 5 Sea P={s,u,v,w,y}, entonces c(P, P) = c(u,x) + c(y,t)= 1 + 5 = 6 Por tanto, es un corte mínimo 12 Demostración del Teorema : Sea N un red y f un flujo en N , por el Corolario 1 f ( N ) ≤ min { c( P, P ) } • El valor del máximo flujo no puede exceder de la capacidad de un corte mínimo. • Para demostrar la igualdad, la estrategia es comprobar que el valor de algún flujo máximo en N tiene al menos la capacidad de algún corte mínimo en N Vamos a considerar algunas definiciones y procedimientos (que se utilizan en la demostración del teorema) para establecer posteriormente el algoritmo. Un u0 – un semicamino en un digrafo D es una secuencia Q alternada finita de vértices y arcos, Q : u0 , a1 , u1 , a2 , u2 , . . . , un-1 , an , un de modo que no se repiten vértices y ai = (ui , ui-1) o ai = (ui-1 , ui) 13 x 3,3 5,3 s y 3,2 z 6,2 1,1 4,2 u v 4,4 5,3 4,1 3,1 t 3,2 w u, (y,u), y, (y,z), z, (z,t), t es un u – t semicamino Sea f un flujo en la red N , con digrafo subyacente D y capacidad c, un semicamino u0 , a1 , u1 , a2 , u2 ,. . ., un-1 , an , un en D se dice que es f-insaturado si, para cada i, 1§ i § n (a) ai = (ui-1 , ui) y f(ai) < c(ai) , o (b) ai = (ui , ui-1) y f(ai) > 0 (a) Establece que se puede aumentar el flujo desde ui-1 hasta ui (b) Establece que se puede disminuir el flujo de retroceso desde ui hacia ui-1 14 Si Q es un s-t semicamino f -insaturado , donde s y t son los vértices fuente y sumidero de N, entonces Q es llamado un f-semicamino aumentante x 3,3 5,3 s y 3,2 z 6,2 1,1 4,2 u 4,1 v 4,4 5,3 3,1 t 3,2 w Q : s,(s,u),(y,u),y,(y,z),z,(z,t),t es un f-semicamino aumentante Condición (a) Condición (b) a1 = (s,u) f(a1) < c(a1) ∆1 = c(a1) -f(a1) = 4 - 2 =2 a3 = (y,z) f(a3) < c(a3) ∆3 = c(a3) -f(a3) = 3 - 2 =1 a4 = (z,t) f(a4) < c(a4) ∆4 = c(a4) -f(a4) = 6 - 2 =4 a2 = (y,u) f(a2) > 0 ∆2 = f(a2) = 1 ∆ = min { ∆i , 1 § i § 4 } = 1 15 Definición: Sean s y t los vértices fuente y sumidero de N . Si D contiene un f-semicamino aumentante , se define el flujo f * sobre el conjunto de arcos de D del siguiente modo: ⎧ f (a ) + ∆ si a = (ui −1 , ui ) para algun i, 1 ≤ i ≤ n ⎪ f * (a ) = ⎨ f (a ) − ∆ si a = (ui , ui −1 ) para algun i, 1 ≤ i ≤ n , ⎪ f (a ) si a ∉ E (Q) ⎩ x Resulta 3,3 5,3 s y 3,3 z 6,3 1,0 4,3 4,1 u v 4,4 5,3 3,1 t 3,2 w f * es un flujo para la red N que verifica f * (N) = f (N) + ∆ > f (N) 16 Teorema 2: Sea N una red con dígrafo subyacente D. Un flujo f en N es un flujo máximo si y solo si no hay ningún f-semicamino aumentante en D. Este resultado establecerá la regla de salida y fin del algoritmo. 17 Algoritmo para calcular el máximo flujo y determinar un corte mínimo en una red. (Edmonds) Proporciona un método sistemático para encontrar un f-semicamino aumentante en la red N, con flujo dado f. Teorema 3: Sea N una red con digrafo subyacente D, fuente s, sumidero t, capacidad c y flujo f. Sea D’ el digrafo con V(D’) =V(D) y conjunto de arcos E(D’) = {(x,y) / (x,y) œE(D) ⁄ c(x,y)>f(x,y) o (y,x)œ E(D) ⁄ f(y,x)>0} Entonces, D’ contiene un s-t camino dirigido si y solo si D contiene un semicamino aumentante. Además, un s-t camino más corto en D’ tiene la misma longitud que un f-semicamino aumentante mas corto en D. 18 Sea N una red con digrafo subyacente D, capacidad c y flujo f. Si f no es un flujo máximo de N, entonces D tiene un f-semicamino aumentante. Q : s=u0 , a1 , u1 , a2 , u2 , . . . , un-1 , an , un=t Sea ∆( ai ) = c(ai) - f(ai) si ai = (ui-1 , ui) f(ai) si ai = (ui , ui-1) Sea ∆ = min {∆(ai) : 1 § i §n} Incrementar el flujo f Ø f * f (a) + ∆ f * (a) = f (a) – ∆ f (a) si si a = (ui-1 , ui) para algún i , 1§ i § n a = (ui , ui-1) para algún i , 1§ i § n si a – E(Q) 19 Algoritmo (para determinar un flujo máximo y un corte mínimo en una red N con dígrafo subyacente D, fuente s, sumidero t, capacidad c y flujo inicial f (puede ser flujo cero). P1.- Construir D’ con V(D’) = V(D) E(D’) = {(x,y) / (x,y) œE(D) ⁄ c(x,y)>f(x,y) (y,x)œ E(D) ⁄ f(y,x)>0 } o P2.- (Determina si D’ tiene un s-t camino y por tanto si D tiene un f- semicamino aumentante) Aplicar el algoritmo BFS de Moore a D’ para determinar un s-t camino más corto. Si D’ no contiene ningún s-t camino, entonces ir al paso P5 en otro caso, sea Q’ : s = u0 , u1 , u2 , . . . , un= t un s-t camino más corto en D’ y continuar. 20 P3.- ( Se realiza un incremento del flujo por el semicamino aumentante) Sea Q : s=u0 , a1 , u1 , a2 , u2 , . . . , un-1 , an , un=t donde ai œ E(D) tal que ai = (ui-1 , ui) y f(ai) < c(ai) , o ai = (ui , ui-1) y f(ai) > 0 Para i=1,2,…,n c(ai) - f(ai) ∆i = f(ai) si ai = (ui-1 , ui) si ai = (ui , ui-1) ∆ = min {∆(ai) : 1 § i §n} Para i=1,2,…,n , si ai = (ui-1 , ui) , entonces f (ai) ≠ f (ai) + ∆ si ai = (ui , ui-1) , entonces f (ai) ≠ f (ai) - ∆ P4.- Ir al paso P1 21 P5.- (Devuelve un máximo flujo y determina un mínimo corte para N) Retorna f(a) para todos los arcos a de D. Retorna P (conjunto de vértices de D’ con etiqueta finita obtenida en el paso P2 después de aplicar el algoritmo de moore a D’) (P,P) es un corte mínimo. Complejidad del algoritmo O(pq2) 22 Ejemplo: Hay tres proveedores A,B,C de un determinado producto, y un agente D que actúa de intermediario para los minoristas L y M. El intermediario tiene limitado el número de pedidos que puede servir por día a 70. L consigue que el proveedor A le sirva directamente hasta un máximo de 30 unidades, y M lo consigue del proveedor C, que le sirva directamente hasta un máximo de 20 unidades. Calcular el máximo número de pedidos que llegan a L y M, si para el agente D, la oferta de A es de 40 unidades, la de C es de 80 y la de B es de 30; y si las demandas son, en L de 60 unidades y en M de 50 unidades. Solución: Lo planteamos como un problema de flujo máximo con el siguiente digrafo 3 A 4 3 B 6 D 5 8 C L 2 M 23 Como el agente intermediario tiene limitado el número de pedidos por día, para limitar el paso de pedidos debemos crear un arco de la forma ( D1, D2) con capacidad máxima 70. Para resolver el problema como flujo máximo, además debemos considerar los vértices ficticios S, T, y los arcos (S,A), (S,B), (S,C), (L,T) y (M,T) con las capacidades correspondientes. 3 A S 4 3 8 4 3 B L 6 D1 7 D2 T 5 8 C Al aplicar el algoritmo el resultado es : 5 M 2 S 6 4,4 3,3 A 4, 1 L 6, 3 3, 3 D1 7, D2 6 5, 3 8, 2 B 8, 4 3, 3 C 2, 2 6,6 T 5,5 M 24