Tema 4: Redes y flujos

Anuncio
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
Descargar