Max-Flow
Jesus, Mager
Algoritmos eficientes para el problemaMax-Flow
Mager, Jesus
1Universidad Autonoma MetropolitanaUnidad Azcapozalco
2015
Max-Flow
Jesus, MagerIntroduccionHay mas informacion aquı
El presente trabajo es un resumen del libro “CombinatorialOptimization. Algorithms and Complexity” escrito porChristos H. Papadimitriou y Kenneth Steiglitz.Si bien el algoritmo Simplex es muy util, pues resuelve problemasde programacion lineal generales, no es muy eficiente en sucomplejidad, que es explonencial. Para la resolucion del problemamax-flow se va a explorar el problema para mejorar esto.Los resultados para max-flow son tambien relevantes para otrosproblemas de optimizacion.
Max-Flow
Jesus, MagerFormulacion Nodo arco del problema Max-Flow
Se busca encontrar un flujo factible de un unico nodo origen (s) aun unico nodo pozo(t), este flujo es el maximo. Considerese unared N = (s, t,V ,E , b) con v = |V | nodos y m = |E | arcos; y seael flujo arc(x , y) sea denotado por f (x , y). Entonces el problemade maximo flujo (max-flow) es la siguiente formulacion deprogramacion lineal, que es pensada como un dual:
max v
Af + dv = 0
f ≤ b
f ≥ 0
donde d ∈ Rn esta definido por:
dt =
-1 si i = s;1 si i = t;0 en otro caso;
Max-Flow
Jesus, Mager
A continuacion se examinara un algoritmo fundamental de grafos,llamado busqueda. Diferentes variantes del algoritmo de busquedaestan en el corazon de diversos algoritmos de graficos.
Max-Flow
Jesus, MagerBusqueda en Grafos
Un Grafo G = (V ,E ) es representado por la lista de adjacenciasA(v), v ∈ V . Como siempre se asume que |E | ≥ 1
2 |V |, como porejemplo que G no tiene nodos aislados.El algoritmo tiene la idea de que se comienza con un vertice v1 ylo marca. Posteriormente se repite este proceso con sus vertices deadjacencia, posterioremente con sus vertices de adjacencia y serepite el proceso.En el conjunto Q se mantiene un alista para todos lo vertices queson posibles para marcar. Esto es, que sean adjacentes y que no seencuentren marcados.
Max-Flow
Jesus, MagerAlgoritmo: Busqueda en grafos
Entrada: Un grafo G , representado por su lista de adjacencias, y un nodo v1.Salida: EL mismo grafo con sus nodos realcionados por caminos desde elnodo v1 marcado.Q ← {v1}while Q 6= ∅ do
sea v un elemento de Q.Remover v de QMarca vfor all v ′ ∈ A(v) do
if v ′ no esta marcado thenAgragar v ′ a Q
end ifend for
end while
Max-Flow
Jesus, Mager
El algoritmo de busqueda marca todos los nodos de G conectadoscon v1 en tiempo O(|E |).
Max-Flow
Jesus, Mager
Entre los usos que se le da a este algoritmo se encunetra saber siun grafo es conexo. Tambien es posible usarlo para encontrarcomponentes como subgrafos maximalment conexos.Sin embargo, aun falta definir como se toman los elementos de lalist Q. Si se tomara a Q como una cola tomando el elemento vcomo el que ha esperado mas, esto se convertirıa en ua busquedaprimero a lo ancho (BFS).
Max-Flow
Jesus, Mager
La busqueda primero a profundidad (DFS) es otra version de labusqueda de grafos donde se utiliza una lista FIFO (Primero enentrar es el primero en salir). Este algoritmo hace un camino tanlargo como es posible y regresa a hacer una nueva busquedaunicamente cuando no se puede avanzar.
Max-Flow
Jesus, Mager
El algoritmo de busqueda tambien puede ser aplicado a digrafos.Se puede respresentar un digrafo mediante D = (V ,A) por su listade adjacencia: A(v) como el conjunto de nodos v ′ ∈ V tales que(v , v ′) ∈ A. Desde ese punto de vista los grafos son unicamente uncaso especial de los digrafos: aquellos que son simetricos en qyeu ∈ A(v) si u ∈ A(u). Por lo tanto BFS y DFS tambien puedenser aplicados a digrafos.
Max-Flow
Jesus, Mager
El algoritmo de busqueda es una plantilla para toda una clase dealgoritmos.Al variar las piesas del algoritmo en cajas se pueden crearnumersos algoritmos que hacen cosas distintas al mismo grafo. Porejemplo, podemos agregar un contador i ← i + 1; orden[v ]← i enves de usar marcas. Entonces obtendremos un algoritmo queregistra el orden en que fue visitado cada nodo.Como otro ejemplo el algoritmo Ford-Fulkerson de etiquetado paramax-flow, es en realidad una variante sofisticada de busqueda.
Max-Flow
Jesus, MagerEncontrar un caminos en digrafos
Supongamos que tenemos un digrafo D y dos conjuntos de nodos,S ,T ⊂ V que son origen y destino respectivamente. Queremosenconrar un camino en D llevando de cualquier nodo en S acualquier nodo en T . Tambien vamos a agegar etiquetas por cadav , que sera mas util a la hora de recuperar el camino, dondeetiqueta[v ′] es un arreglo con |V | entradas. El algogirtmo semuestra a continuacion.
Max-Flow
Jesus, MagerAlgoritmo: Busqueda de caminos en digrafos
Entrada: Un Digrafo D = (V ,A) y S ,T ⊂ V .Salida: Un camino en D de un nodo S a un nodo en T , si este caminoexiste.for all v ∈ S do
etiqueta[v] ← 0if v ∈ T then
return (v)end if
end forwhile Q 6= ∅ do
sea v un elemento de Q.Remover v de Qfor all v ′ ∈ A(v) do
if v ′ no esta etiquetado thenetiqueta[v ′] ← vif v ′ ∈ T then return camino(v ′)else
Agregar v ′ a Qend if
end ifend for
end whilereturn No hay camino S-T en D
Max-Flow
Jesus, MagerPero: ¿Que tiene de malo?
EL algoritmo Ford-Fulkerson para la resolucion del problemaMax-Flow usa la tecnica de etiquetado. La cuestion surge entoncesen el analisis de su complejidad. Tomando una redN = (s, t,V ,E , b) se nota que cada estado toma O(|A|), perodado la complejidad de todo el algoritmo es O(S |A|) donde S es elnumero de incrementos llevados a cabo. EL numero S tiene queser menor que |f | que es el valor del maximo flujo en la red(asumiendo enteros). ¿Puede S ser tan grande como |f |? Larespuesta es si, si se toman decisiones desafortunadas deincrementar caminos. Esto puede llevar a una complejidadexponencial.
Max-Flow
Jesus, Mager
Suponga que queremos implementar una rutina a una redN = (s, t,V ,E , b) con un flujo inicial de cero. No necesitamoexaminar capacidades y flujos en este caso. Poteriormente setendra que todos los arcos seran avanzado y que no hay arcoshacia atras. Por lo tanto la tarea de etiquetar la red es muyparecida al algoritmo pasado. Una vez que se enceuntre un caminode incremento, aumentamos al flujo y continuamos.
Max-Flow
Jesus, Mager
Etiquetar una red con repecto al flujo f es equivalete a labusqueda de camino en una red definida como:Dado una red N = (s, t,V ,A, b) y una flujo factible f de N,definimos la red N(f ) = (s, t,V ,A(f ), ac), donde A(f ) consiste delos sigueintes arcos:
1. Si (u, v) ∈ A y f (u, v) < b(u, v), entonces (u, v) ∈ A(f ) yac(u, v) = b(u, v)− f (u, v).
2. Si (u, v) ∈ A y f (u, v) > 0, entonces (u, v) ∈ A(f ) yac(u, v) = f (u, v).
Llamamos a ac(u, v) la capacidad de incremento de (u, v) ∈ A(f ).Si A contiene ambos arcos (v , u) y (u, v), entonces N(f ) puedetener multiples copias de estos arcos. Podemos evitar esto dediferentes maneras. Podemos remplazar tales arcos (u, v) en A pordos arcos (u,w) y (w , u) de la misma capacidad, donde w es unnodo nuevo. Debemos asumir por lo tanto que N(f ) no tienemultiples nodos.
Max-Flow
Jesus, Mager
I Tomando un corte s − t, (W , W ) de N(f ), el valor de estecorte es la suma de las capacidades de incremento de todoslos arcos de N(f ) que van de W a W . Sin embargo, este acropuede ser tanto uno para adelante o uno para atras.
I En el caso de ser para adelante, ac(u, v) = b(u, v)− f (u− v);si es para tras ac(u, v) = f (u, v).
I Por lo tanto el valor de (W , W ) en N(f ) es el valor de(W , W ) en N menos el flujo para adelante por el corte, masel flujo reverso del corte.
Max-Flow
Jesus, Mager
Poposicion: Si |f | es el valor del maximo flujo en N, entonces elvalor del maximo flujo en N(f ) es |f | − |f |.
Max-Flow
Jesus, Mager
Para mejorar el problema del flujo hay que recordar que estamosinteresados unicamente en los pares s − t mas cortos en N(f ), porlo que podemos realizar simplificaciones.
I El camino mas corto s − t no puede pasar por un vertice enuna capa superior que t.
I Tambien podemos descartar cualquer otro vertice en la mismacapa que t excpeto t.
I Un camino mas corto parte de la capa 0, o sea donde seencuentra s, por lo que para avanzar debera ir a la siguientecapa. De esta manera avanza de capa j a j + 1. Por lo quetambien se podra descartar cualquier acro que vaya de unacapa superior a una inferior, o cualquier arco que junta nodosde una misma capa.
Max-Flow
Jesus, Mager
Esto resultara en una subred llamada AN(f ) de A(f ), llamada redauxiliar respecto a f.Proposicion: Una red de capas L = (s, t,U,A, b) es una red conun conjunto de vertices U igual a la union disjunta de losconjuntos U0, . . . ,Ud tal que U0 = {s},Ud = {t} y
L ⊂d⋃
j=1
(Uj−1 × Uj).
Max-Flow
Jesus, Mager
AN(f ) puede construirse mientras se lleva acabao una busquedaprimero a lo ancho sobre N(f ) dejano unicamente nodos que nosllevas a nuevos nodos, y unicamente nodos que sean inferiores quet. Por lo tanto, crear una red auxiliar puede ser creada enO(|A(f )|) = O(|A|).Esto nos ayudara a encontrar fasilmente el camino mas corto deincremento con respecto al flujo actual y mas aun, mejorar elalgoritmo de etiquetado: llevar acabo tantos incrementos en elmismo estado como se posible.
Max-Flow
Jesus, Mager
Definicion: Sea N = (s, t,V ,A, b) una red de capas, un caminode incremento en N con respecto a cierto flujo g es llamado paraadelante si no utiliza arcos hacia atras. Un flujo g en N es llamadomaximal si no existe un camino de incrementeo ahcia adlenate conrespecto a g .Bajo esta definicion, todos los flujos maximos son maximales, unflujo maximal g , sin embargo, puede no ser el maximo.Encontrar el flujo maximo en la red auxiliar con respecto al flujoactual corresponde a encontrar tantos caminos mas cortos deincrementeo como se pueda en un estado.
Max-Flow
Jesus, MagerUn algoritmo Max-Flow O(|V |3)
Max-Flow, como cualquier otro algoritmo combinatorio opera enestados. En cada estado construimos una red N(f ), donde f es elflujo actual, y del cual encontraremos la red auxiliar AN(f ).Despues de eso encontraremos un flujo maximo g en AN(f ),agregamos g a f y repetimos. Agregar g a f y repetir. Agregarconlleva agregar g(u, v) a f (u, v) para todos los aros haciaadelante (u, v) en AN(f ), y sacar de g(u, v) de f (v , u) de todoslos arcos hacia atras (u, v) en AN(f ). Se termina cuando s y t sedeconectan de N(f ), un signo de que f es optimo.El algoritmo no aumenta a traves de caminos unitarios, sino estavez se intentara hacer un flujo push por nodos a traves de varioscaminos al mismo tiempo.
Max-Flow
Jesus, MagerMax-Flow Algorithm
Entrada: Una red N = (s, t,V ,A, b).Salida: El maximo flujo de f en N.f ← 1; listo ← nowhile listo = no do
g ← 0sea v un elemento de Q.Construir la red auxiliar AN(f ) = (s, t,U,B, ac)if t no se puede alcanzar desde s en AN(f ) then
listo = sielse
while Mientras exista un nodo v con throughput[v ] = 0 doif v = s o t then
go to intrelse
Eleminar v y todos los arcos incidentes de AN(f )end ifsea v el nodo en AN(f )throughput[v ] es el menorpush(()v, throughput[v ])pull(()v, throughput[v ])
end whileend if
end while
Max-Flow
Jesus, MagerMax-Flow Algorithm: Continuacion...
function push(y ,h)Q ← [y ] donde Q es una colafor all dou ∈ U − [y ]
req[u]← 0end forreq[y ] = h
. req[u] define cuantos elementos del flujo deben ser sacados por uend functionwhile Q 6= ∅ do
Sea v un elemento de QEleminar v de Qfor all v ′ tales que (v , v ′) ∈ B do
repeatm← mın(ac[v , v ′], req[v ])ac[v , v ′]← ac[v , v ′]−mif ac[v , v ′] = 0 then
eleminar (v , v ′) de Bend ifreq[v ]← req[v ]−mreq[v ′]← req[v ] + mAgregar v ′ a Qg [v , v ′]← g [v , v ′] + m
until req[v ] = 0end for
end while
Max-Flow
Jesus, MagerConsideraciones
Lema Un arco de AN(f ) se remueve de B en algun estadounicamente si no hay un camino de aumento hacia adelanteresoecto al flujo g en AN(f ) que paso por a.Lema Al final de cada estado, g es un flujo maximal en AN(f ).Lema La distancia s − t en AN(f + g) algun estado esestrictamente superior que s − t en AN(f ) en el estado previo.Teorema El algoritmo resuleve correctamente el porblema demax-flow para una red N = (s, t,V ,A, b), en O(|V |3) operacionesaritmeticas.
Top Related