Problema de flujo máximo

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 29 de septiembre de 2020; las comprobaciones requieren 11 ediciones .

En la teoría de la optimización y la teoría de grafos , el problema del flujo máximo es encontrar un flujo tal a través de la red de transporte que la suma de los flujos desde la fuente o, de manera equivalente, la suma de los flujos hacia el sumidero, sea máxima.

El problema de flujo máximo es un caso especial de problemas más difíciles, como el problema de circulación .

Historia

Después de la entrada de los Estados Unidos en la Segunda Guerra Mundial en 1941, el matemático George Bernard Dantzig se unió a la oficina de estadísticas de la Fuerza Aérea de los Estados Unidos en Washington DC . De 1941 a 1946 dirigió la Rama de Análisis de Combate, donde trabajó en varios problemas matemáticos. [1] [2] Posteriormente, utilizando el trabajo de Danzig, el problema del flujo máximo se resolvió por primera vez durante la preparación del puente aéreo durante el bloqueo de Berlín Occidental , que tuvo lugar en 1948-1949. [3] [4] [5]

En 1951, George Dantzig formuló por primera vez el problema en términos generales. [6]

En 1955, Lester Ford y Delbert Ray Fulkerson construyeron por primera vez un algoritmo diseñado específicamente para resolver este problema .  Su algoritmo se llamó algoritmo Ford-Fulkerson . [7] [8]

En el futuro, la solución del problema se mejoró muchas veces.

En 2010, los investigadores Jonathan Kelner y Aleksander Mądry del MIT , junto con sus colegas Daniel Spielman de la Universidad de Yale y Shen- Hua Teng de la Universidad del Sur de California demostraron otra mejora del algoritmo por primera vez en 10 años. [3] [9] [10]

Definición

Dada una red de transporte con fuente , sumidero y capacidad .

El valor de flujo es la suma de los flujos de la fuente . En el artículo “ Red de transporte ” se demuestra que es igual a la suma de los caudales al desagüe .

El problema del flujo máximo es encontrar tal flujo, donde el valor del flujo es máximo.

Decisiones

La siguiente tabla enumera algunos algoritmos para resolver el problema.

Método Complejidad Descripción
Programación lineal Depende del algoritmo específico. Para el método simplex, es exponencial. Presente el problema de flujo máximo como un problema de programación lineal. Las variables son los flujos a lo largo de los bordes y las restricciones son la preservación del flujo y la limitación del rendimiento.
Algoritmo de Ford-Fulkerson Depende del algoritmo de búsqueda de ruta de aumento. Requiere tales búsquedas. Encuentre cualquier ruta de aumento. Aumentar el caudal en todos sus bordes al mínimo de sus capacidades residuales. Repita siempre que haya una ruta de aumento. El algoritmo solo funciona para anchos de banda enteros. De lo contrario, puede ejecutarse indefinidamente sin converger a la respuesta correcta.
Algoritmo de Edmonds-Karp Ejecutamos el algoritmo de Ford-Fulkerson, eligiendo cada vez la ruta de aumento más corta (encontrada por búsqueda en amplitud ).
algoritmo de Dinit o para capacidades unitarias utilizando árboles dinámicos de Slethor y Tarjan [11] Mejora del algoritmo de Edmonds-Karp (pero encontrado cronológicamente antes). En cada iteración, utilizando la búsqueda primero en amplitud, determinamos las distancias desde la fuente hasta todos los vértices en la red residual. Construimos un gráfico que contiene solo los bordes de la red residual en los que esta distancia aumenta en 1. Excluimos del gráfico todos los vértices sin salida con bordes incidentes en ellos, hasta que todos los vértices se conviertan en no sin salida. (Un callejón sin salida es un vértice, a excepción de la fuente y el sumidero, que no incluye un solo borde o del que no emanan bordes). En el gráfico resultante, encontramos el camino de aumento más corto (será cualquier camino desde s a t). Excluimos el borde con la capacidad mínima de la red residual, nuevamente excluimos los vértices sin salida, y así sucesivamente hasta que haya una ruta de aumento.
Algoritmo de empuje de preflujo Opera en un preflujo en lugar de una corriente. La diferencia es que para cualquier vértice u, a excepción de la fuente y el sumidero, la suma de los flujos que ingresan para el flujo debe ser estrictamente cero (la condición de conservación del flujo) y para el preflujo debe ser no negativa. Esta suma se llama exceso de flujo al vértice, y un vértice con un exceso de flujo positivo se dice que se desborda . Además, para cada vértice, el algoritmo guarda una característica adicional, la altura , que es un número entero no negativo. El algoritmo utiliza dos operaciones: push , cuando el flujo a lo largo de un borde que va de un vértice superior a un vértice inferior aumenta en la cantidad máxima posible, y lift , cuando se eleva un vértice desbordado, desde el cual es imposible empujar debido a una altura insuficiente. . El empuje es posible cuando un borde pertenece a la red residual, conduce de un vértice superior a uno inferior y el vértice original se desborda. El levantamiento es posible cuando el vértice que se levanta está lleno, pero ninguno de los vértices a los que conducen los bordes de la red residual es más bajo que él. Se realiza hasta una altura superior en 1 al mínimo de las alturas de estos vértices. Inicialmente, la altura de la fuente es V, a lo largo de todos los bordes que emanan de la fuente, fluye el flujo máximo posible y las alturas y flujos restantes son cero. Las operaciones de empuje y elevación se realizan el mayor tiempo posible.
Algoritmo "subir al principio" o usando árboles dinámicos Una variante del algoritmo anterior que define el orden de las operaciones de empujar y levantar de manera especial.
Algoritmo de flujo de bloqueo binario [1]

Para obtener una lista más detallada, consulte [2] y Lista de algoritmos para encontrar el flujo máximo .

Todo el teorema del flujo

Si los rendimientos son enteros, el flujo máximo también es entero.

El teorema se sigue, por ejemplo, del teorema de Ford-Fulkerson .

Generalizaciones que reducen al problema original

Algunas generalizaciones del problema de flujo máximo se reducen fácilmente al problema original.

Número arbitrario de fuentes y/o sumideros

Si hay más de una fuente, agregue un nuevo vértice S, que hacemos la única fuente. Añadimos aristas con capacidad infinita desde S a cada una de las fuentes antiguas.

De manera similar, si hay más de un sumidero, agregamos un nuevo vértice T, que hacemos el único sumidero. Agregamos bordes con capacidad infinita de cada uno de los fregaderos antiguos a T.

Bordes no dirigidos

Cada arista no dirigida (u, v) se reemplaza por un par de aristas dirigidas (u, v) y (v, u).

Límite de ancho de banda de vértice

Dividimos cada vértice v con capacidad limitada en dos vértices v in y v out . Todos los bordes incluidos en v antes de dividir ahora se incluyen en v en . Todos los bordes que se originaron en v antes de dividirse ahora se originan en v out . Agregue un borde (v in , v out ) con capacidad .

Limitando la capacidad de los bordes desde abajo

En esta versión del enunciado del problema, el valor del flujo de cada borde está adicionalmente limitado desde abajo por la función . Por lo tanto, el valor de flujo para cualquier borde no puede exceder su capacidad, pero no puede ser inferior al mínimo especificado, es decir . Para resolver el problema, es necesario transformar la red de transporte original en una red de transporte de la siguiente manera:

  1. Agregar nueva fuente y sumidero .
  2. Para cada borde :
    1. Crea dos nuevos vértices y .
    2. Instalar y .
    3. instalar _
    4. Instalar y .
  3. instalar _

Se define un flujo en B que cumple la condición de limitar el caudal de bordes desde abajo si y sólo si se define un flujo máximo en el que todos los bordes de la forma y están "saturados". Gracias a esta construcción, el algoritmo para encontrar un flujo acotado por abajo será el siguiente:

  1. Desde la construcción .
  2. Encuentre el flujo del gráfico , prefiriendo los bordes de la forma y .
  3. Si , ¿dónde está el flujo del gráfico en el que se omite el ancho de banda de los bordes de abajo, entonces no hay solución.
  4. De lo contrario, calcule el flujo a partir de flow , es decir .

Limitando la capacidad del borde desde abajo con una alternativa

Esta variante del problema es idéntica a la anterior, con la diferencia de que el valor de caudal para cada arista también puede ser igual a , es decir o . A pesar de un ligero cambio en la condición, no hay solución polinomial para este problema si las clases P y NP no son iguales . Como prueba de la afirmación, se puede dar una reducción polinomial al problema Exact-3-SAT .

Véase también

Notas

  1. John J. O'Connor y Edmund F. Robertson . George Dantzig  (inglés)  es una biografía del archivo MacTutor .
  2. Cottle, Richard; Johnson, Ellis; Wets, Roger, "George B. Dantzig (1914-2005)" Archivado el 7 de septiembre de 2015 en Wayback Machine , Notices of the American Mathematical Society , v.54, no.3, marzo de 2007. Cf. p.348
  3. 1 2 Hardesty, Larry, "Primera mejora del algoritmo fundamental en 10 años" Archivado el 28 de marzo de 2014 en Wayback Machine , Oficina de noticias del MIT, 27 de septiembre de 2010
  4. Borndorfer, Ralf; Grotschel, Martín; Löbel, Andreas, "Alcuin's Transportation Problems and Integer Programing" Archivado el 7 de agosto de 2011 en Wayback Machine , Konrad-Zuse-Zentrum für Informationstechnik , Berlín, Alemania, noviembre de 1995. Cf. p.3
  5. Powell, Stewart M., "The Berlin Airlift" , Air Force Magazine , junio de 1998.
  6. Dantzig, GB, "Aplicación del método Simplex a un problema de transporte" Archivado el 19 de julio de 2010 en Wayback Machine , en TC Koopman (ed.): Activity Analysis and Production and Allocation , Nueva York, (1951) 359-373.
  7. Ford, LR, Jr.; Fulkerson, DR, "Flujo máximo a través de una red", Canadian Journal of Mathematics (1956), pp.399-404.
  8. Ford, LR, Jr.; Fulkerson, DR, Flows in Networks , Princeton University Press (1962).
  9. Kelner, Jonathan, "Flujos eléctricos, sistemas laplacianos y aproximación más rápida del flujo máximo en gráficos no dirigidos" Archivado el 24 de junio de 2011 en Wayback Machine , charla en CSAIL, MIT, martes 28 de septiembre de 2010
  10. Flujos eléctricos, sistemas laplacianos y aproximación más rápida del flujo máximo en gráficos no dirigidos Archivado el 29 de noviembre de 2010 en Wayback Machine , por Paul Cristiano et al., 19 de octubre de 2010.
  11. Algoritmo Dinits . Consultado el 28 de octubre de 2010. Archivado desde el original el 7 de mayo de 2015.

Literatura