La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Flujo en redes Def: una red N es un grafo orientado conexo que tiene dos nodos distinguidos una fuente s con grado de salida positivo y un sumidero t con.

Presentaciones similares


Presentación del tema: "Flujo en redes Def: una red N es un grafo orientado conexo que tiene dos nodos distinguidos una fuente s con grado de salida positivo y un sumidero t con."— Transcripción de la presentación:

1 Flujo en redes Def: una red N es un grafo orientado conexo que tiene dos nodos distinguidos una fuente s con grado de salida positivo y un sumidero t con grado de entrada positivo. Def: Una función de capacidades en la red es una función c(e)0 definida para todo eXN.

2 2 5 s 3 6 t 4 7

3 2 5 9 10 15 4 15 10 s 3 6 t 5 8 10 4 15 15 Capacidad 6 10 30 4 7

4 (ley de conservación de flujo)
Def: Un flujo factible en una red N con capacidades, es una función f: XN  R+ que verifica: i) 0 f(e)c(e) para todo eje e. ii) eIn(v) f(e)=eOut(v) f(e) para todo nodo v salvo s y t, donde In(v)={eXN, e=wv con w otro nodo de N} Out(v)={eXN, e=vw con w otro nodo de N} (ley de conservación de flujo) Valor del flujo: F=eIn(t) f(e)- eOut(t) f(e)

5 2 5 9 4 10 15 4 4 15 10 4 4 s 3 6 t 5 8 10 4 15 15 Capacidad 6 10 30 Flujo 4 7 F = 4

6 Problema: determinar el flujo de máximo valor F que se puede definir en la red.
Def: un corte en la red N es un subconjunto S V , tal que sS y t S. Def: SS={ejes que tienen la cola en S y la cabeza en S} SS={ejes que tienen la cola en S y la cabeza en S} donde S=V \S Proposición: Sea f un flujo definido en una red N y sea S un corte, entonces F=eSS f(e)-eSS f(e)

7 2 5 9 4 10 15 4 4 15 10 4 4 s 3 6 t 5 8 10 4 15 15 6 10 30 4 7 F = 4

8 2 5 9 4 10 15 4 4 15 10 4 4 s 3 6 t 5 8 10 4 15 15 6 10 30 4 7 F = 4

9 2 5 9 4 10 15 4 4 15 10 4 4 s 3 6 t 5 8 10 4 15 15 6 10 30 4 7 F = 4

10 2 5 9 4 10 15 4 4 15 10 4 4 s 3 6 t 5 8 10 4 15 15 6 10 30 4 7 F = 4

11 Def: la capacidad de un corte S se define como
c(S)=eSS c(e) Lema: si f es una función de flujo con valor F y S es un corte en N, entonces Fc(S). Corolario (certificado de optimalidad): Si F es el valor de un flujo y S un corte en N tal que F=c(S) entonces F es un flujo máximo y S es un corte de capacidad mínima.

12 2 5 9 10 15 4 15 10 s 3 6 t 5 8 10 4 15 15 6 10 30 4 7 C(S) = 30

13 2 5 9 10 15 4 15 10 s 3 6 t 5 8 10 4 15 15 6 10 30 4 7 C(S) = 62

14 2 5 9 10 15 4 15 10 s 3 6 t 5 8 10 4 15 15 6 10 30 4 7 C(S) = 28

15 6 2 5 9 10 6 10 15 4 4 15 10 8 8 s 3 6 t 5 4 8 10 10 4 15 15 6 10 10 30 4 7 10 F = 24 C(S) = 28

16 9 2 5 9 10 1 9 10 15 4 15 10 8 9 s 3 6 t 5 3 8 10 5 10 4 15 15 6 10 15 30 4 7 15 F = 28 C(S) = 28

17 Algoritmo de Ford y Fulkerson
Def: Dado un camino no orientado en N P=s=v0,e1,v1...vk-1,ek,vk=t, a) ei es un eje “hacia delante” si está orientado desde vi-1 hasta vi, es decir ei=(vi-1,vi) b) ei es un eje “hacia atrás” si está orientado desde vi hasta vi-1, es decir ei=(vi,vi-1) Def: Un camino de aumento en N es un camino P entre s y t tal que el flujo en un eje “hacia delante” puede crecer y en un eje “hacia atrás” puede decrecer, o sea para todo eje e de P se verifica que: f(e)<c(e) si e es “hacia delante” o f(e)>0 si e es “hacia atrás”

18 Algoritmo de camino de aumento
Input: una red N y una función de flujo definida en ella. Inicialización: S = {s}. Poner a s el label 0. Poner i = 1. Mientras sea posible y S no contenga al sumidero t hacer si existe . un eje e=vw tal que v está marcado y w no está marcado y tal que f(e )<c(e) o . un eje e=wv tal que v está marcado y w no está marcado y tal que f(e )>0 entonces poner ant(w)=v marcar a w con el label i poner S=S{w}, i = i+1 Fin “mientras” Si S no contiene a t Return S corte de V Sino Reconstruir el único camino de aumento marcado P entre s y t usando los valores de ant a partir de t. Return P camino aumentado. Fin

19 Proposición: El algoritmo de camino de aumento es correcto, o sea determina un camino de aumento si lo hay, y si no llega a marcar t es porque no hay camino de aumento. (el algoritmo de camino de aumento no dice en que orden deben marcarse los nodos)

20 Algoritmo de Ford y Fulkerson
Input: una red N con capacidades en los ejes. Inicialización: Definir un flujo inicial en N. Por ejemplo poner f(e)=0 para todo eXN . Mientras exista un camino de aumento en N hacer .Encontrar un camino de aumento P. . Poner M=mineP {(e)} donde (e)=c(e)-f(e) si e es “hacia delante” en P f(e) si e es “hacia atrás” en P .Para cada eje e de P poner f(e)=f(e)+M si e es “hacia delante” en P f(e)-M si e es “hacia atrás” en P Fin (el flujo final es máximo)

21 4 2 5 1 3 1 1 2 2 s 4 t 3 2 1 3

22 4 2 5 1 3 1 1 2 2 s 4 t 3 2 1 3

23 4 2 5 1 3 1 1 2 1 2 s 4 t 1 2 3 2 1 1 1 3

24 4 2 5 1 3 1 1 2 1 2 s 4 t 1 2 3 2 1 1 1 3

25 4 2 5 1 3 1 1 2 1 1 1 s 4 t 1 1 2 3 2 1 2 1 1 1 1 3

26 4 2 5 1 3 1 1 2 1 1 1 s 4 t 1 1 2 3 2 1 2 1 1 1 1 3

27 4 2 5 1 3 1 1 1 1 1 s 4 t 2 1 1 2 3 2 1 1 1 1 1 3

28 4 2 5 1 3 1 1 1 2 1 1 s 4 t 2 1 2 1 3 2 1 1 1 1 1 3

29 4 2 5 1 3 1 1 2 1 1 1 s 4 t 2 1 1 2 1 2 1 1 1 2 1 1 2 3

30 4 2 5 1 3 1 1 2 1 1 1 s 4 t 1 2 2 1 2 1 1 1 2 1 2 1 3

31 4 3 2 5 1 1 2 3 1 1 1 1 s 4 t 2 1 1 2 2 1 1 1 2 1 2 1 3

32 4 3 2 5 1 1 2 3 1 1 1 1 s 4 t 2 1 1 2 2 1 1 1 2 1 2 1 3

33 3 4 2 2 5 5 1 1 3 2 1 1 1 1 s s 4 4 t 2 1 1 2 2 1 1 1 2 1 1 2 3 3

34 1 2 s 4 5 3 t

35 Teorema: Si los valores del flujo inicial y las capacidades de los ejes son enteras el método de Ford y Fulkerson termina en un número finito de pasos (i.e. es un algoritmo!!) y determina un flujo máximo en N. Corolario: El valor del flujo máximo en una red N es igual a la capacidad de un corte mínimo. (problemas duales)

36 Qué pasa si las capacidades o los valores del flujo son números irracionales?.
En este caso el método de Ford y Fulkerson puede no parar, o sea realizar un número infinito de pasos. A continuación mostramos un ejemplo, donde el método no para si el camino de aumento se elige en cada iteración de acuerdo a lo que se indica en la tabla.

37 Sea para todo Vale que En la siguiente red todos los arcos tienen capacidad salvo 3 arcos:

38 Complejidad de Ford y Fulkerson
Cuál es el número máximo de iteraciones que requiere Ford y Fulkerson cuando las capacidades y los flujos iniciales son enteros?. Si no se especifica el orden en el que se eligen los ejes y nodos a marcar en al algoritmo de camino de aumento, el número de iteraciones puede ser no ser polinomial respecto del tamaño del problema.

39 Modificación de Edmonds y Karp:
Usar BFS en el algoritmo de camino de aumento para marcar nodos y ejes. En este caso se puede demostrar que la complejidad del algoritmo queda O(m2 n). (ejercicio) Hay otros algoritmos más eficientes (más complicados). (Esto es suficiente para ver que el problema de flujo tal cual lo definimos esta computacionalmente bien resuelto, sin embargo hay otros algoritmos más eficientes).

40 eout(v)xe - ein(v) xe = 0 para todo v t,s
Formulación del problema de flujo como un problema de programación lineal max F sujeto a eint(t) xe - eout(t) xe = F eout(v)xe - ein(v) xe = 0 para todo v t,s 0  xe  c(e) para todo eX. (Esta formulación nos permite usar otros métodos para resolver los problemas de flujo que escapan a la temática de este curso.)

41 Como usar flujo para determinar un matching máximo en un grafo bipartito G?,
Sea V = V1 U V2 una partición según la definición de grafo bipartito. Armar una red Nst agregando a G una fuente s y un sumidero t y un eje entre s y cada nodo de V1, y entre cada nodo de V2 y t. Asignar capacidad 1 a todos los ejes del nuevo grafo Nst .

42 Teorema de Hall: Si G es un grafo bipartito con partición (V1, V2)
entonces G tiene un matching que satura a V1 si y sólo si para todo W  V1, |W|  |(W)|, donde (W) es el conjunto de vecinos de los nodos de W.

43 Dem: (resumen) < = Si existe un matching que satura a V, cada nodo de W es vecino de un nodo distinto de V2, y por lo tanto |W|  |(W)|. = > Un matching que satura a V1 corresponde a un flujo máximo en Nst con valor | V1 | , entonces es suficiente mostrar que un corte mínimo tiene capacidad | V1|. El corte definido por {s} tiene capacidad |V1|. Hay que ver que cualquier otro corte tiene capacidad mayor. Sea <S, S > el conjunto de ejes de un corte cualquiera y W = S  V1 . Se puede escribir <S, S > = <{s}, S  V1 >  <W, S  V2 >  < S  V2 , {t}>

44 Usando esto y la hipótesis del teorema para W, y mirando un gráfico de Nst se puede demostrar que
cap(S) = | < |{s}, S  V1 > | + | <W, S  V2 > | + | < S  V2 , {t}> | = (todas las capacidades son 1) = | V1 -W | + | <W, S  V2 > | + | S  V2 | ≥ (por construcción de Nst) ≥ | V1 -W | + | V2  (W)| + | S  V2 | = ( por definición de (W)) = | V1 -W | + | (W)| - | S  (W)| + | S  V2 | ≥ ≥ | V1 -W | + | (W)| - |S  V2 | + | S  V2 | = (porque (W)  V2) = | V1 -W | + | (W)| ≥ ≥ | V1 -W | + | W| ≥ (por hipótesis) ≥ | V1|.

45 Problema del matrimonio:
Dado un conjunto de mujeres, cada una de las cuales conoce a un subconjunto de los hombres, bajo que condiciones es posible que cada mujer se case con uno de los hombres que conoce? Usar teorema de Hall.


Descargar ppt "Flujo en redes Def: una red N es un grafo orientado conexo que tiene dos nodos distinguidos una fuente s con grado de salida positivo y un sumidero t con."

Presentaciones similares


Anuncios Google