Flujo en Redes de Transporte Eduardo Uresti Flujo en Redes de Transporte– p.1/55 Red de Transporte Una Red de Transporte es un grafo dirigido con peso (V, E, c) donde hay dos vértices distinguidos: uno llamado fuente y otro llamado sumidero. Se asume que todo vértice del grafo v ∈ V está en un camino s à v à t. El peso de cada lado debe ser no negativo y se considera la / E , c(u, v) = 0. capacidad del lado. Si (u, v) ∈ 16 s 12 v1 v2 t 7 10 4 20 9 13 v4 v3 4 14 Flujo en Redes de Transporte– p.2/55 Un Flujo Un flujo en una red de transporte (V, E, c) es una función f : V × V → < que satisface: Flujo en Redes de Transporte– p.3/55 Un Flujo Un flujo en una red de transporte (V, E, c) es una función f : V × V → < que satisface: 1. Restricción de capacidad: ∀u, v ∈ V : f (u, v) ≤ c(u, v) Flujo en Redes de Transporte– p.3/55 Un Flujo Un flujo en una red de transporte (V, E, c) es una función f : V × V → < que satisface: 1. Restricción de capacidad: ∀u, v ∈ V : f (u, v) ≤ c(u, v) 2. Antisimetría: ∀u, v ∈ V : f (u, v) = −f (v, u) Flujo en Redes de Transporte– p.3/55 Un Flujo Un flujo en una red de transporte (V, E, c) es una función f : V × V → < que satisface: 1. Restricción de capacidad: ∀u, v ∈ V : f (u, v) ≤ c(u, v) 2. Antisimetría: ∀u, v ∈ V : f (u, v) = −f (v, u) 3. Conservación del flujo: ∀u ∈ V − {s, t}: X f (u, v) = 0 v∈V Flujo en Redes de Transporte– p.3/55 Un Flujo Un flujo en una red de transporte (V, E, c) es una función f : V × V → < que satisface: 1. Restricción de capacidad: ∀u, v ∈ V : f (u, v) ≤ c(u, v) 2. Antisimetría: ∀u, v ∈ V : f (u, v) = −f (v, u) 3. Conservación del flujo: ∀u ∈ V − {s, t}: X f (u, v) = 0 v∈V f (u, v) se llamará el flujo de u a v . Flujo en Redes de Transporte– p.3/55 Un Flujo Un flujo en una red de transporte (V, E, c) es una función f : V × V → < que satisface: 1. Restricción de capacidad: ∀u, v ∈ V : f (u, v) ≤ c(u, v) 2. Antisimetría: ∀u, v ∈ V : f (u, v) = −f (v, u) 3. Conservación del flujo: ∀u ∈ V − {s, t}: X f (u, v) = 0 v∈V f (u, v) se llamará el flujo de u a v . El valor del flujo f se define como: X |f | = f (s, v) v∈V Flujo en Redes de Transporte– p.3/55 Ejemplo de Flujo c s v1 v2 v3 v4 t f s v1 v2 v3 v4 t s 0 16 0 0 13 0 s 0 11 0 0 8 0 v1 0 0 12 0 10 0 v1 -11 0 12 0 -1 0 v2 0 0 0 0 9 20 v2 0 -12 0 -7 4 15 v3 0 0 7 0 0 4 v3 0 0 7 0 -11 4 v4 0 4 12 14 0 0 v4 -8 1 -4 11 0 0 t 0 0 0 0 0 0 t 0 0 -15 -4 0 0 11/16 s v1 12/12 10 1/4 v2 15/20 t 7/7 4/9 8/13 v4 v3 4/4 11/14 Flujo en Redes de Transporte– p.4/55 Tarea 1: Suponga una red de transporte (V, E, c) y un flujo en ella f . Si no hay lado de u a v ni de v a u entonces f (u, v) = f (v, u) = 0 Flujo en Redes de Transporte– p.5/55 Red Residual Sea G = (V, E, c) una red de transporte y f un flujo sobre ella. La capacidad residual de lado (u, v) respecto a f se define como: cf (u, v) = c(u, v) − f (u, v) Flujo en Redes de Transporte– p.6/55 Capacidad Residual: Ejemplo c s v1 v2 v3 v4 t f s v1 v2 v3 v4 t s 0 16 0 0 13 0 s 0 11 0 0 8 0 v1 0 0 12 0 10 0 v1 -11 0 12 0 -1 0 v2 0 0 0 0 9 20 v2 0 -12 0 -7 4 15 v3 0 0 7 0 0 4 v3 0 0 7 0 -11 4 v4 0 4 12 14 0 0 v4 -8 1 -4 11 0 0 t 0 0 0 0 0 0 t 0 0 -15 -4 0 0 cf s v1 v2 v3 v4 t s 0 5 0 0 5 0 v1 11 0 0 0 11 0 v2 0 12 0 7 5 5 v3 0 0 0 0 11 0 v4 8 3 15 3 0 0 t 0 0 15 4 0 0 Flujo en Redes de Transporte– p.7/55 Red Residual Dada una red de transporte G = (V, E, c) y un flujo f , la red residual de G inducida por f , Gf = (V, Ef , cf ) donde © ª Ef = (u, v) ∈ V × V : cf (u, v) > 0 Flujo en Redes de Transporte– p.8/55 Red Residual © cf (p) = mı́n cf (u, v) : (u, v) ∈ p cf s v1 v2 v3 v4 t s 0 5 0 0 5 0 v1 11 0 0 0 11 0 v2 0 12 0 7 5 5 v3 0 0 0 0 11 0 v4 8 3 15 3 0 0 t 0 0 15 4 0 0 v1 5 s ª 11 5 8 12 v2 5 4 3 7 11 v4 5 3 v3 15 t 4 11 Flujo en Redes de Transporte– p.9/55 Ejemplo 11/16 s 12/12 v1 10 1/4 v2 15/20 t 7/7 4/9 v4 8/13 v3 4/4 11/14 v1 5 s 11 5 8 12 v2 5 4 3 7 11 v4 5 3 v3 15 t 4 11 Flujo en Redes de Transporte– p.10/55 Extensión de f a pares de conjuntos Sean X y Y subconjuntos de vértices: XX f (X, Y ) = x∈X y∈Y Flujo en Redes de Transporte– p.11/55 Propiedades Sea G = (V, E, c) una red de transporte y f un flujo sobre G: f (X, X) = 0 f (X, Y ) = −f (Y, X) Si X ∩ Y = ∅: f (X ∪ Y, Z) = f (X, Z) + f (Y, Z) Flujo en Redes de Transporte– p.12/55 Resultado Sea G = (V, E, c) una red de transporte con fuente t y sumidero t, y sea f un flujo en G. Sea Gf la red de transporte residual inducida por f , y además sea f 0 un flujo en Gf . Entonces si se define la función f + f 0 : V × V → < como (f + f 0 )(u, v) = f (u, v) + f 0 (u, v) entonces f + f 0 es un flujo sobre G con valor |f + f 0 | = |f | + |f 0 |. Flujo en Redes de Transporte– p.13/55 Caminos aumentados Sea G = (V, E, c) una red de transporte y f un flujo. Un camino aumentado es un camino simple de s a t en la red residual Gf . Por definición, en cada lado (u, v) de un camino residual es posible aumentar el flujo de (u, v) en una cantidad positiva sin violar la restricción de la capacidad en ese lado. La capacidad residual del camino aumentado p se define como © ª cf (p) = cf (u, v) : (u, v) es un lado de p Flujo en Redes de Transporte– p.14/55 Lema Sea G = (V, E, c) una red de transporte,f un flujo en G, p un camino aumentado en Gf . Define la función: fp : V × V → < como si (u, v) es un lado de p cf (p) fp (u, v) = −cf (p) si (v, u) es un lado de p 0 en otro caso. Entonces, fp es un flujo en Gf con valor |fp | = cf (p) > 0. Flujo en Redes de Transporte– p.15/55 Corolario Sea G = (V, E, c) una red de transporte, f un flujo sobre G, y p un camino aumentado sobre Gf . Si fp es el flujo definido anteriormente, entonces f 0 = f + fp es un flujo sobre G cuyo valor es |f 0 | = |f | + |fp | > |f |. Flujo en Redes de Transporte– p.16/55 Corte Un corte (S, T ) de una red de transporte G = (V, E, c) es una partición de V en dos conjuntos S y T = V − S tal que s ∈ S y t ∈ T . La capacidad de un corte (S, T ) es X c(S, T ) = c(u, v) u∈S,v∈T 16 s 12 v1 v2 t 7 10 4 20 9 13 v4 v3 c({s, v1 , v4 } , {v2 , v3 , t}) = 26 4 14 Flujo en Redes de Transporte– p.17/55 Ejemplo 2 de Corte 16 s 12 v1 v2 t 7 10 4 20 9 13 v4 v3 4 14 c({s, v1 , v4 } , {v2 , v3 , t}) = 16 + 4 + 7 + 4 = 31 Flujo en Redes de Transporte– p.18/55 Lema Sea f un flujo en una red de transporte G con fuente s y sumedero t, y sea (S, T ) un corte cualquiera. Entonces, el flujo neto a través de corte (S, T ) es f (S, T ) = |f |. El flujo neto a través de un corte se define como X f (S, T ) = f (u, v) u∈S,v∈T Flujo en Redes de Transporte– p.19/55 Ejemplo de flujo neto 11/16 s v1 12/12 10 1/4 v2 15/20 t 7/7 4/9 8/13 v4 v3 4/4 11/14 f ({s, v1 , v4 } , {v2 , v3 , t}) = f (v1 , v2 ) + f (v4 , v2 ) + f (v4 , v3 ) = 12 + (−4) + 11 = 19 Flujo en Redes de Transporte– p.20/55 Lema Sea f un flujo sobre la red de transporte G = (V, E, c) con fuente s y sumidero t, y sea (S, T ) un corte de G. Entonces, el flujo neto a través del corte (S, T ) es |f |. Flujo en Redes de Transporte– p.21/55 Lema Sea f un flujo sobre la red de transporte G = (V, E, c) con fuente s y sumidero t, y sea (S, T ) un corte de G. Entonces, el flujo neto a través del corte (S, T ) es |f |. Notando que f (S − s, V ) = 0 tenemos: f (S, T ) = = = = = f (S, V ) − f (S, S) f (S, V ) f (s, V ) + f (S − s, V ) f (s, V ) |f | Flujo en Redes de Transporte– p.21/55 Lema El valor de cualquier flujo en una red de transporte está acotado superiormente por la capacidad de cualquier corte de G. Flujo en Redes de Transporte– p.22/55 Lema El valor de cualquier flujo en una red de transporte está acotado superiormente por la capacidad de cualquier corte de G. Sea (S, T ) un corte cualquiera de G y sea f cualquier flujo: por el lema anterior: |f | = = = ≤ = = f (S, T ) P u∈S,v∈T f (u, v) P P f (u, v) u∈S v∈T P P c(u, v) u∈S v∈T P u∈S,v∈T c(u, v) c(S, T ) Flujo en Redes de Transporte– p.22/55 Teorema Fundamental Sea f un flujo sobre la red de transporte G = (V, E, c) con fuente s y sumidero t, entonces las siguientes condiciones son equivalentes: 1. f es un flujo máximo sobre G. 2. La red residual Gf no contiene caminos aumentados. 3. |f | = c(S, T ) para algún corte (S, T ) de G. Flujo en Redes de Transporte– p.23/55 Demostración (1) =>(2) Por contradicción: suponga que Gf es máximo pero que Gf posee un camino aumentado p. Por consiguiente, f + fp es un flujo sobre G cuyo valor es |f + fp | > |f | por tanto f no es máximo. Flujo en Redes de Transporte– p.24/55 Demostración (2) =>(3) Suponga que no existe un camino aumentado de s a t en Gf . Defina S = {v ∈ V : existe un camino de s a v} y T = V − S . Así (S, T ) es un corte para G donde s ∈ S y t ∈ T y para cada par de vértices (u, v), u ∈ S y v ∈ T , f (u, v) = c(u, v) porque de otra forma v ∈ S . Y X X c(S, T ) = c(u, v) = f (u, v) = f (S, T ) = |f | u∈S,v∈T u∈S,v∈T Flujo en Redes de Transporte– p.25/55 Demostración (3) =>(1) Suponga que |f | = c(S, T ) para algún corte (S, T ) de G. Como |f | ≤ c(S, T ) para cualquier corte, entonces |f | es máximo. Pues en caso contrario existiría otro flujo f 0 tal que c(S, T ) = |f | < |f 0 | ≤ c(S, T ) Flujo en Redes de Transporte– p.26/55 Ford-Fulkerson 1. para cada lado (u, v) ∈ E(G) hacer f (u, v) = 0 f (v, u) = 0 2. mientras no exista un camino p de s a t en Gf hacer © cf (p) = mı́n cf (u, v) : (u, v) ∈ p para cada lado (u, v) ∈ p ª hacer f (u, v) = f (u, v) + cf (p) f (v, u) = −f (u, v) Flujo en Redes de Transporte– p.27/55 Ejemplo 16 s 12 v1 v2 t 7 10 4 20 9 v4 13 v3 4 14 16 s 12 v1 v2 t 7 10 4 20 9 13 v4 v3 4 14 Flujo en Redes de Transporte– p.28/55 Ejemplo 16 s 12 v1 v2 t 7 10 4 20 9 v4 13 v3 4 14 v1 12/16 s 12/12 v2 t 7 10 4 12/20 9 13 v4 v3 4 14 Flujo en Redes de Transporte– p.29/55 Ejemplo v1 12/16 s 12/12 v2 t 7 10 4 12/20 9 13 v4 v3 4 14 4 s 12 v1 v2 7 10 12 4 8 12 t 9 13 v4 v3 4 14 Flujo en Redes de Transporte– p.30/55 Ejemplo 4 s 12 v1 v2 7 10 12 4 8 12 t 9 13 v4 v3 4 14 4 s 12 v1 v2 7 10 12 4 8 12 t 9 13 v4 v3 4 14 Flujo en Redes de Transporte– p.31/55 Ejemplo 4 s 12 v1 v2 7 10 12 4 8 12 t 9 13 v4 v3 4 14 4/4 s 12 v1 12 4 v2 8 7 4/10 12 t 9 13 v4 v3 4/4 4/14 Flujo en Redes de Transporte– p.32/55 Ejemplo 4/4 s 12 v1 12 4 v2 8 7 4/10 12 t 9 13 v4 v3 4/4 4/14 12 v1 s 16 8 13 v2 7 6 v4 8 9 10 4 v3 12 t 4 Flujo en Redes de Transporte– p.33/55 Ejemplo 12 v1 s 16 8 13 9 10 v4 16 8 13 4 12 v3 4 v3 t 8 7 9 10 12 4 v2 6 v4 8 7 6 v1 s v2 12 t 4 Flujo en Redes de Transporte– p.34/55 Ejemplo 12 v1 s 16 8 13 9 10 v4 16 8 7/13 4 12 6 v4 8 7 6 v1 s v2 v3 v2 7/7 9 7/10 4 v3 12 t 4 7/8 12 t 4 Flujo en Redes de Transporte– p.35/55 Ejemplo 12 v1 s 16 8 7/13 6 4 12 v1 s 16 8 4 7 v3 11 v3 t 1 7 9 3 12 4 v2 6 v4 7/8 7/7 9 7/10 v4 v2 19 t 4 Flujo en Redes de Transporte– p.36/55 Ejemplo Negativo 1000 s 1000 v 1 1000 1000 t u 1000 s 1000 v 1 1000 1000 t u Flujo en Redes de Transporte– p.37/55 Ejemplo Negativo 1000 s v 1000 1 1000 1000 t u 1000 s 1/1000 v 1/1 1/1000 1000 t u Flujo en Redes de Transporte– p.38/55 Ejemplo Negativo 1000 s 1/1000 v 1/1000 1/1 1000 t u 1000 s v 1 999 1 999 1 1000 t u Flujo en Redes de Transporte– p.39/55 Ejemplo Negativo 1000 s 1000 1 1000 t u v 999 1 999 1 999 1 999 1 s v 1 1000 t u Flujo en Redes de Transporte– p.40/55 Ejemplo Negativo 1000 s 1/1000 999 1 999 1 999 1 s v 1 1000 t u v 1/1 999 1 1/1000 t u Flujo en Redes de Transporte– p.41/55 Ejemplo Negativo 1/1000 s 999 1 999 s v 1/1 1 1/1000 t u v 1 999 1 999 999 1 u 1 999 t 1 Flujo en Redes de Transporte– p.42/55 Ejemplo Negativo 999 s 1 999 1 999 s v 1 v t 999 1 u 1 999 1 u 1 999 1 999 1 999 t 1 Flujo en Redes de Transporte– p.43/55 Ejemplo Negativo 999 s 1 999 1 999 s v 1 1/999 1 999 1 u v 1/1 u 1 999 t 1 1/999 1 999 t 1 Flujo en Redes de Transporte– p.44/55 Ejemplo Negativo 999 s 1 1/999 1 999 s v 1/1 v t 998 1 u 1 999 1 u 1 998 2 1/999 2 999 t 1 Flujo en Redes de Transporte– p.45/55 Ejemplo Negativo 999 s 1 998 2 999 s v 1 v t 998 1 u 2 999 1 u 1 998 2 998 2 999 t 1 Flujo en Redes de Transporte– p.46/55 Edmonds-Karp Estrategia para determinar un Camino Aumentado: Utilizar camino más corto con longitud de cada lado igual con 1. El número total de caminos aumentados construidos por el algoritmo es O(nm). El tiempo total de ejecucción O(n2 m). Flujo en Redes de Transporte– p.47/55 Ejercicio Para el grafo: 10 s 1 2 v1 6 v4 5 3 8 v2 8 t 3 10 v3 10 Determine la capacidad del corte (S = {s, v3 ), V − S). Flujo en Redes de Transporte– p.48/55 Ejercicio Para la red y el flujo: 2/10 s 1/1 2 v1 6 v4 2/5 3 1/8 v2 2/8 3 10 t v3 1/10 Determine el flujo neto sobre el corte (S = {s, v3 ), V − S). Flujo en Redes de Transporte– p.49/55 Ejercicio Para la red y el flujo: 2/10 s 1/1 2 v1 6 v4 2/5 3 1/8 v2 2/8 3 10 t v3 1/10 Determine la red residual. Flujo en Redes de Transporte– p.50/55 Ejercicio Para el grafo y el camino: 10 s 1 2 v1 6 v4 5 3 8 v2 8 t 3 10 v3 10 Determine la red residual. Flujo en Redes de Transporte– p.51/55 Ejercicio Para el grafo: 10 s 1 2 v1 6 v4 5 3 8 v2 8 t 3 10 v3 10 Determine el flujo máximo. Flujo en Redes de Transporte– p.52/55 Ejercicio Indique cómo puede reducirse el problema de una red de transporte con varias fuentes y varios resumideros al problema de una sola fuente y un solo resumidero. Flujo en Redes de Transporte– p.53/55 Ejercicio El grado de conectividad por lado de un grafo no dirigido es el mínimo número de lados que deben ser removidos para que el grafo resultante no sea conexo. Indique cómo puede ser transformado el problema de determinación del grado de conectividad por lado de un grafo en un problema de flujo máximo. Ejemplos: si el grafo no es conexo, el grado es 0; si el grafo es un árbol es 1. Flujo en Redes de Transporte– p.54/55 Ejercicio Un grafo se dice Bipartido si el conjunto de vértices V puede dividirse en dos conjuntos V1 y V2 de manera que los lados del grafo sólo van de V1 a V2 . (No hay lados de un vértice en V1 a otro vértice en V1 y similarmente para V2 ) El problema del máximo apareamiento en un grafo bipartido G = (V1 ∪ V2 , E) consiste en determinar el número máximo de lados no conectados que se pueden tomar con un vértice en V1 y otro vértice en V2 . Flujo en Redes de Transporte– p.55/55