Your SlideShare is downloading. ×
Problemas de flujos
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Problemas de flujos

418
views

Published on


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
418
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
15
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Problemas de flujos.Existen muchos problemas de flujos en redes. Una red es un sistema de líneas o canalesque conectan diferentes puntos y trasmiten algún tipo de información. Algunosejemplos de redes son las líneas de comunicación, redes de ferrocarril, redes de tuberíasde agua, redes de carreteras, redes de aviación, etc. En todas estas redes estaremosinteresados en enviar alguna mercancía específica desde ciertos puntos de suministro aalgunos puntos de demanda. Por ejemplo, en un sistema de tuberías podríamos enviaragua. Muchos de los problemas de flujos en redes se pueden formular como problemasde programación lineal y obtener su solución mediante el método del simplex. Sinembargo, se han desarrollado otras técnicas más eficientes que varían con el problemaen cuestión. De entre este tipo de problemas destacamos los siguientes:- Problema de flujo máximo.- Problema de flujo a coste mínimo.Problema de flujo Máximo.Se considera el problema de trasladar una cierta mercancía desde un punto específico,llamado fuente a un punto de destino, denominado sumidero. Para ello se considera ungrafo dirigido G = (V,A), en el que se consideran dos nodos o vértices: uno denominadonodo fuente y otro denominado nodo destino. Por supuesto, se considera que no existeun arco directo que conecte el nodo fuente con el nodo destino. Por supuesto, el grafoestará formado por unos nodos intermedios conocidos como puntos de transbordo através de los cuales el flujo (la mercancía) es desviado.SeaV = conjunto de todos los vértices o nodos del grafo.fij = el flujo que circula por el arco (i,j).f = cantidad total de flujo que se lleva desde el nodo fuente al nodo destino.kij = capacidad del arco (i,j). 1Ejemplo: ss = nodo fuente nn = nodo destino 21, 2 = nodos intermedios
  • 2. Objetivo:Determinar el máximo flujo f que se puede enviar desde el nodo fuente s al nododestino n, teniendo en cuenta las capacidades kij sobre el flujo de cada arco (i,j) y que elflujo se debe conservar.Modelo de programación lineal: Max z =f s.a. ∑f ij − ∑f ji =0 ∀i ∈ V - {s, n} (1.1) j∈Γ + ( i ) j∈Γ − ( i ) 0 ≤ f ij ≤ k ij ∀(i, j) ∈ A (1.2)Las ecuaciones (1.1) representan la conservación del flujo en los nodos. Mientras quelas restricciones (1.2) son sobre el flujo que circula por cada arco, para que no seanegativo y no supere la capacidad del arco.En el ejemplo anterior se traduce en Max z= f s.a. f s1 + f s 2 = f f12 + f 1n = f s1 + f 21 f 21 + f 2 n = f s 2 + f12 f1n + f 2 n = f 0 ≤ f s1 ≤ k s1 0 ≤ f s2 ≤ ks2 0 ≤ f 12 ≤ k12 0 ≤ f 21 ≤ k 21 0 ≤ f1n ≤ k1n 0 ≤ f 2n ≤ k 2nVeamos un método eficiente para resolver el problema del flujo máximo directamentesin usar el método del simplex.Conceptos previos:Definición: Dado cualquier nodo i todos los arcos que salen del nodo i se denominanarcos hacia delante con respecto al nodo i.Definición: Dado cualquier nodo i todos los arcos que entran al nodo i se denominanarcos hacia atrás para el nodo i.
  • 3. Definición: Un corte que separa el nodo fuente del nodo destino es una partición de losnodos de la red en dos subconjuntos S y S* tal que el nodo fuente está en S y el nododestino está en S*.Un ejemplo de corte en el ejemplo anterior podría ser (S, S*) dado por S = {s,1,2}. 1 s n 2 CorteOtro corte que separa s y n es el siguiente: 1 s n 2 CorteDefinición:La capacidad de un corte es la suma de todas las capacidades de los arcos procedentesde los nodos de S a los nodos en S*. Se denota K(S, S*). Esto es K (S , S * ) = ∑k ij ( i , j )∈( S , S * )En los cortes anteriores, sus capacidades son:S = {s,1,2}, K(S,S*) = k1n + k2nS = {s,2}, K(S,S*) = ks1 + k21 + k2nDefinición: El corte con la capacidad más pequeña se denomina corte mínimo.A partir de los ejemplos anteriores de cortes se puede apreciar que si todos los arcos deun corte se eliminan de la red entonces no existe un camino que una el nodo fuente conel nodo destino, de aquí que el flujo de s a n no seria posible. En otras palabras,cualquier flujo de s a n debe atravesar los arcos en el corte, y por consiguiente, el flujo festará limitado por la capacidad de ese corte. La relación entre flujos y cortes vendrádada por el siguiente lema:
  • 4. Lema: Para cualquier red dirigida, si f es el flujo desde el nodo fuente al nodo destino,y (S, S*) es un corte, entonces el valor de f es menor o igual que la capacidad de esecorte K(S,S*).Como consecuencia de este lema se tiene que cualquier flujo compatible desde el nodofuente al nodo destino no puede exceder la capacidad de ningún corte. Por tanto, el flujomáximo a través de la red está limitado por la capacidad del corte mínimo. El siguienteteorema establece que siempre es posible encontrar el flujo de s a n igual a la capacidaddel corte mínimo.Teorema de flujo máximo-corte mínimo: (Ford Fulkerson).Para cualquier red el flujo máximo desde el nodo fuente al nodo destino es igual a lacapacidad del corte mínimo.A partir de este teorema el problema de encontrar el flujo máximo en una red se traduceen encontrar las capacidades de todos los cortes y elegir la mínima capacidad. Por otraparte, dado el valor máximo de f no se especifica como este flujo es distribuido a travésde los distintos arcos. Además este método es poco recomendable ya que el número deposibles cortes que separan el nodo fuente del destino son 2n-2.Definición: Dada una red G = (V,A) llamamos Red Residual o Incrementeal R(f), aaquella red formada a partir de G, con el mismo conjunto de nodos que ésta, y dadocada arco dirigido (i,j) ∈ A en la red original, que no tiene arco en la dirección opuesta(es decir, (j,i) ∉ A), tal que 0 ≤ fij ≤ kij se consideran en la Red Incremental dos arcos(i,j) y (j,i) con capacidades rij = kij - fij y rji = fij , respectivamente. A dichascapacidades se las denomina capacidades residuales o incrementales.Al principio que no circula ningún flujo por los arcos de la red original, la red residualdifiere de la original en que para cada arco dirigido de la red original sin arco opuesto,ahora se le añade su opuesto con capacidad nula.Definición: Se denomina Camino Incremental a todo camino dirigido desde el nodofuente al nodo destino en la red incremental.Definición: Llamamos Cuello de Botella y lo denotamos por δ a la menor capacidadresidual de los arcos en un camino incremental, es decir, δ = min (i,j) ∈P rij. Dado elsiguiente camino P ⊂ R(f) 5 2 s a b n δ= 2 3
  • 5. Definición: Un arco se dice saturado sí y solo sí fij = kij ó rij = 0 y kij > 0.El motivo de introducir el concepto de red residual o red incremental sedebe a los siguiente, fijémonos en la red siguiente: 1 1 2 1 2 1 1 s n 1 3Si se elige como primer camino incremental P = {(s,1),(1,3),(3,2),(2,n)}entonces saturo los arcos (1,3),(3,2) y (2,n) y no podemos enviar más flujode s a n consiguiendo un valor para f = 1, cuando el flujo máximo es f = 2.Sin embargo, tomando ahora el camino incremental P’ ={(s,1),(1,2),(2,3),(3,n)} podemos enviar una unidad más de s a n y deshacerel error cometido al enviar una unidad de flujo a través del arco (3,2).Notemos que ahora se ha enviado una unidad de flujo a través del arco(2,3), el cual no existe en la red original.El algoritmo de flujo máximo consiste en encontrar un camino a través delcual se puede enviar un flujo positivo desde el nodo fuente al nodo destino.Tal camino es a lo que denominabamos camino incremental, y se usa paraenviar tanto flujo como sea posible desde s a n. El proceso se repite hastaque no se pueda encontrar ningún otro camino incremental, que mejore elflujo total de s a n. En dicho caso, se ha encontrado el flujo máximo.
  • 6. Proceso de etiquetado:Este proceso se usa para encontrar un camino incremental desde el nodofuente al nodo destino. Comenzando con el nodo fuente s, se dice quecualquier nodo j se puede etiquetar si podemos enviar un flujo positivodesde s a j. En general, desde cualquier nodo i podemos etiquetar el nodo jsi se satisface una de las siguientes condiciones:1.- El arco que conecta los nodos i y j es un arco hacia delante y el flujo enel arco (i,j) es menor que su capacidad ( es decir, fij ≤ kij).2.- El arco que conecta i y j es un arco hacia atrás y el flujo en el arco (j,i)es mayor que 0.Se continúa el proceso de etiquetado hasta que el nodo destino seaetiquetado. Entonces se ha conseguido un camino incremental.Algoritmo del Flujo Máximo:El algoritmo se inicializa con un flujo nulo o cualquier flujo factible entodos los arcos, esto es, satisfaciendo las restricciones de capacidad yconservación de los flujos en todos los nodos. Para mejorar este flujo, seetiqueta inicialmente el nodo s y se aplica el proceso de etiquetado paraetiquetar los otros nodos hasta alcanzar el destino. Cuando esto ocurratendremos un camino incremental desde s a n a través del cual se puedeenviar un flujo positivo. A continuación, volvemos hacia atrás en el caminoincremental con la ayuda de las etiquetas de los nodos y calculamos el flujomáximo δ que puede ser enviado por el camino. Entonces incrementamosel flujo en δ unidades en todos los arcos hacia delante en el caminoincremental y decrementamos el flujo en δ unidades en todos los arcoshacia atrás. Repetimos el proceso de etiquetado para encontrar otro caminoincremental desde s a n. El algoritmo termina cuando no se pueda encontrarningún otro camino incremental, lo que nos conduce al máximo flujoposible de s a n.
  • 7. ALGORITMO:Paso 0:Se inicializa f = 0 ( o cualquier flujo factible) y fij = 0 ∀ (i,j) ∈ A.Se construye la red incremental, que coincide con la original. Esto es,rij = kij para todo arco en la red original y se añade su opuesto con rji = 0.Sea δ = ∝. Sea hace i = s el nodo fuente, se marca con Predi = 0.Paso 1:Se elige un j ∈ Γ(i) no marcado tal que rij > 0 para el arco (i,j) y se marcacon Predj = i.Se asigna δ = min{δ,rPredj j}. En caso de que no exista y si i = s parar ya quese ha alcanzado el máximo flujo posible que se puede enviar desde s a n.Si i ≠ s se hace i = Predi y se busca otro j ∈ Γ(i), no marcado con rij > 0.Paso 2:Si j = n, hacer f = f + δ, e ir al paso 3.En caso contrario, hacer i = j y repetir el paso 1.Paso 3:Cambiamos rPredj j = rPredj j - δ y rj Predj = rj Predj + δ.Hacer j = Predj, si j = s ir al paso 4. En otro caso, repetimos el paso 3.Paso 4:Se borran todas las marcas menos la de s, sea s = i. Se vuelve a asignar δ =∝ y se va al paso 1.
  • 8. Ejemplo: Sea la siguiente red en la cual los números sobre los arcosrepresentan las capacidades. 1 9 7 f=0 f=0 s n 3 9 8 2Camino incremental 7 1 s n 3 8 2 1 9 4 3 f=3 f=3 s n 3 0 3 9 5 2
  • 9. Nuevo camino incremental 1 9 4 s n 1 5 0 7 4 f = 12 f = 12 s n 0 3 0 5 4 8 2 1 5 s n 3 4 2 1 7 0 7 2 f = 15 7 f = 15 s n 3 0 8 8 1 0 2
  • 10. Extensiones:Caso dirigido: Consideremos una red que contiene aristas en lugar de arcos. Dada unaarista que conecta los nodos i y j, con capacidad K lo interpretamos como sigue: fij ≤ K fji ≤ K fij * fji = 0En otras palabras, un máximo de K unidades de flujo es posible entre los nodos i y j encualquier dirección, pero el flujo se permite en una única dirección. Tengamos encuenta que el algoritmo visto anteriormente sólo se puede aplicar a redes dirigidasdonde la dirección del flujo se especifica en todos los arcos. Para encontrar el flujomáximo en una red no dirigida primero convertimos la red en una red equivalentedirigida, y entonces aplicamos el método de etiquetado.Ejemplo:Consideremos una red de calles como se muestra en el grafo 1 30 3 40 50 s s 15 25 20 30 30 2 50 4
  • 11. Problema de flujo a coste mínimo.-Sea G = (V,A) un grafo con dos vértices fijos, s el nodo fuente y t el nodo destino. Cadaarco (i,j) ∈ A tiene asociada una capacidad kij y un coste por unidad de flujo que circulapor cada arco cij. Sea Φ la cantidad de flujo demandada desde el nodo t, para serservida desde el nodo s. Entonces podemos plantear el problema de flujo a costemínimo en los siguientes términos: enviar Φ unidades de flujo desde el nodo s al nodot de G = (V,A) con el patrón de flujo cuyo coste asociado sea el mínimo, satisfaciendolas restricciones de capacidad y conservación en los nodos V – {s,t}.En este caso el patrón de flujo f de ser tal que : ∑f ij − ∑f ij =0 ∀ V − {s , t } j∈Γi + j∈Γi −Conservación del flujo ∑f sj = ∑f jt =Φ j∈Γs + j∈Γt −Restricciones de capacidad 0 ≤ f ij ≤ k ij ∀(i, j) ∈ AMientras que el coste del patrón de flujo viene dado por Z( f ) = ∑c ( i , j )∈ A ij f ijRed residual.-La red residual R(f) correspondiente a un flujo f se define como sigue: Reemplazamoscada arco (i,j) ∈ A por dos arcos (i,j) y (j,i). El arco (i,j) tiene un coste cij y unacapacidad residual de rij = kij – fij, y el arco (j,i) tiene un coste de cji = -cij y unacapacidad residual de rji = fij. En la red residual se consideran sólo los arcos concapacidad positiva.
  • 12. Algoritmo de Busacker.El algoritmo de Busacker y Gowen (1961) intenta enviar las Φ unidades de flujo de s a teligiendo en cada iteración el camino de mínimo coste de s a t, que envía un flujo igualal cuello de botella del camino. El algoritmo termina cuando se han enviado las Φunidades de flujo, o no hay camino de s a t. En este último caso el problema no tienesolución. Denotamos:CT = coste total del camino que envía las Φ unidadesCC = coste del camino mínimo que se calcula en cada iteración.Sea G = (V,A) un grafo dado, y s y t dos vértices fijados a priori.Paso 1:Asignar CT = 0.Construir la red incremental de G, y asignar ⎧k ij si (i, j ) ∈ A ⎧cij si (i, j ) ∈ Arij = ⎨ cij = ⎨ * ⎩0 en otro caso ⎩∞ en otro casoPaso 2:Buscar el camino mínimo de s a t en la red incremental usando elalgoritmo de Ford, y almacenarlo en Predi ∀ i = s,...,t.Asignar a CC el coste de tal camino .Si no existe tal camino Parar, no hay solución factible. Sea δ = ∝ e i = t.Paso 3:Si i = s, hacer i = t e ir al Paso 4.En otro caso , si δ > rPredi,i entonces δ = rPredi,i . Hacer i = Predi y repetir elpaso 3.Paso 4:Si Φ - δ > 0 entonces asignar θ = δ.En otro caso hacer θ = Φ.
  • 13. Paso 5:Si i = s, ir al Paso 6.En otro caso, rPredi,i = rPredi,i - θ, ri,Predi = ri,Predi + θ ci,Predi* = - cPredi,i*y para aquellos arcos tales que rPredi,i = 0 entonces cPredi,i* = ∝.Hacer i = Predi y repetir el Paso 5.Paso 6:Asignar CT = CT + θ * CC.Si Φ - δ > 0 hacer Φ = Φ - δ y buscar un nuevo camino de coste mínimo des a t pero con los nuevos costes asignados a los arcos. Almacenarlo en Predi∀ i = s,...,t y asignar a CC el coste de tal camino.Hacer δ = ∝ e i = t e ir al Paso 3.En otro caso de que no exista tal camino, parar puesto que no existesolución factible.Si Φ - δ ≤ 0, parar hemos encontrado el camino de flujo a coste mínimo.Ejemplo: (5,20) 1 2 (3,18) (5,14) s (4,15) t (8,12) (8,20) (3,17) 3

×