Articulo de referencia

Problema de flujo máximo

i ) is willing to adopt a cat (w i 1) and/or a dog (w i 2). However each pet (p i ) has a preference for only a subset of the humans. Find any matching of pets to humans such th...

Red de flujo para el problema: Cada persona (ri) está dispuesta a adoptar un gato (wi1) y/o un perro (wi2). Sin embargo, cada mascota (pi) tiene preferencia solo por un subconjunto de personas. Encuentra cualquier emparejamiento de mascotas con personas tal que el mayor número posible de mascotas sea adoptado por una de sus personas preferidas.
Red de flujo para el problema: Cada persona (r i ) está dispuesta a adoptar un gato (w i 1) y/o un perro (w i 2). Sin embargo, cada mascota (p i ) tiene preferencia solo por un subconjunto de personas. Encuentra cualquier emparejamiento de mascotas con personas tal que el mayor número de mascotas sea adoptado por una de sus personas preferidas.

En la teoría de la optimización , los problemas de flujo máximo implican encontrar un flujo factible a través de una red de flujo que obtenga el máximo caudal posible.

El problema del flujo máximo puede considerarse un caso especial de problemas de flujo en redes más complejos, como el problema de la circulación . El valor máximo de un flujo st (es decir, el flujo desde la fuente s hasta el sumidero t) es igual a la capacidad mínima de un corte st (es decir, el corte que separa s de t) en la red, como se establece en el teorema del flujo máximo y el corte mínimo .

Historia

El problema del flujo máximo fue formulado por primera vez en 1954 por TE Harris y FS Ross como un modelo simplificado del flujo de tráfico ferroviario soviético. [ 1 ] [ 2 ] [ 3 ]

En 1955, Lester R. Ford, Jr. y Delbert R. Fulkerson crearon el primer algoritmo conocido, el algoritmo de Ford-Fulkerson . [ 4 ] [ 5 ] En su artículo de 1955, [ 4 ] Ford y Fulkerson escribieron que el problema de Harris y Ross se formula de la siguiente manera (véase [ 1 ] pág.  5):

Consideremos una red ferroviaria que conecta dos ciudades a través de varias ciudades intermedias, donde cada enlace de la red tiene asignado un número que representa su capacidad. Suponiendo una condición de estado estacionario, calcule el flujo máximo entre las dos ciudades.

En su libro Flujos en redes , [ 5 ] en 1962, Ford y Fulkerson escribieron:

Fue planteado a los autores en la primavera de 1955 por TE Harris, quien, junto con el general FS Ross (retirado), había formulado un modelo simplificado del flujo del tráfico ferroviario, e identificó este problema en particular como el central sugerido por el modelo [11].

donde [11] se refiere al informe secreto de 1955 Fundamentos de un método para evaluar las capacidades de la red ferroviaria de Harris y Ross [ 3 ] (véase [ 1 ] pág.  5).

A lo largo de los años, se descubrieron diversas soluciones mejoradas al problema del flujo máximo, en particular el algoritmo de camino de aumento más corto de Edmonds y Karp, y de forma independiente Dinitz; el algoritmo de flujo de bloqueo de Dinitz; el algoritmo de reetiquetado de Goldberg y Tarjan ; y el algoritmo de flujo de bloqueo binario de Goldberg y Rao. Los algoritmos de Sherman [ 6 ] y Kelner, Lee, Orecchia y Sidford [ 7 ] [ 8 ] , respectivamente, encuentran un flujo máximo aproximadamente óptimo, pero solo funcionan en grafos no dirigidos.

En 2013, James B. Orlin publicó un artículo que describía unO(|V||mi|){\displaystyle O(|V||E|)}algoritmo. [ 9 ]

En 2022, Li Chen, Rasmus Kyng, Yang P. Liu, Richard Peng, Maximilian Probst Gutenberg y Sushant Sachdeva publicaron un algoritmo de tiempo casi lineal que se ejecuta enO(|mi|1+o(1)){\displaystyle O(|E|^{1+o(1)})}para el problema de flujo de costo mínimo del cual el problema de flujo máximo es un caso particular. [ 10 ] [ 11 ] Para el problema de camino más corto de origen único (SSSP) con pesos negativos – otro caso particular de un problema de flujo de costo mínimo – también se ha informado un algoritmo que se ejecuta en tiempo casi lineal. [ 12 ] [ 13 ] Ambos algoritmos fueron considerados los mejores artículos en el Simposio de 2022 sobre Fundamentos de la Informática . [ 14 ] [ 15 ] Una versión desaleatorizada del algoritmo de 2022 de Chen et al. fue presentada en el Simposio de 2023 sobre Fundamentos de la Informática [ 16 ] , estableciendo que el flujo de costo mínimo podría resolverse de forma determinista en tiempo casi lineal.

Definición

Una red de flujo, con fuente s y sumidero t . Los números junto a las aristas son las capacidades.

Primero establecemos algunas notaciones:

  • Dejarnorte=(V,mi){\displaystyle N=(V,E)}ser una red de flujo cons,tV{\displaystyle s,t\in V}ser la fuente y el sumidero denorte{\displaystyle N}respectivamente.
  • Sigramo{\displaystyle g}es una función en los bordes denorte{\displaystyle N}entonces su valor en(,v)mi{\displaystyle (u,v)\in E}se denota porgramov{\displaystyle g_{uv}}ogramo(,v).{\displaystyle g(u,v).}

Definición. La capacidad de una arista es la cantidad máxima de flujo que puede pasar a través de una arista. Formalmente es un mapa.do:miR+.{\displaystyle c:E\to \mathbb {R} ^{+}.}

Definición. Un flujo es un mapa.F:miR{\displaystyle f:E\to \mathbb {R} }que cumpla con lo siguiente:

  • Restricción de capacidad . El flujo de una arista no puede exceder su capacidad, en otras palabras:Fvdov{\displaystyle f_{uv}\leq c_{uv}}a pesar de(,v)mi.{\displaystyle (u,v)\in E.}
  • Conservación de flujos. La suma de los flujos que entran a un nodo debe ser igual a la suma de los flujos que salen de ese nodo, excepto en el origen y el destino. O bien:
vV{s,t}::(,v)mi,Fv>0Fv=:(v,)mi,Fv>0Fv.{\displaystyle \forall v\in V\setminus \{s,t\}:\quad \sum _{u:(u,v)\in E,f_{uv}>0}f_{uv}=\sum _{u:(v,u)\in E,f_{vu}>0}f_{vu}.}

Nota : Los flujos son asimétricos.Fv=Fv{\displaystyle f_{uv}=-f_{vu}}a pesar de(,v)mi.{\displaystyle (u,v)\in E.}

Definición. El valor del flujo es la cantidad de flujo que pasa desde la fuente hasta el sumidero. Formalmente, para un flujoF:miR+{\displaystyle f:E\to \mathbb {R} ^{+}}es dado por:

|F|=v: (s,v)miFsv=: (,t)miFt.{\displaystyle |f|=\sum _{v:\ (s,v)\in E}f_{sv}=\sum _{u:\ (u,t)\in E}f_{ut}.}

Definición. El problema del flujo máximo consiste en dirigir la mayor cantidad de flujo posible desde la fuente hasta el sumidero, en otras palabras, encontrar el flujo.Fmáximo{\displaystyle f_{\textrm {max}}}con valor máximo.

Nótese que pueden existir varios flujos máximos, y si se permiten valores reales arbitrarios (o incluso racionales arbitrarios) de flujo (en lugar de solo enteros), existe exactamente un flujo máximo, o infinitos, ya que hay infinitas combinaciones lineales de los flujos máximos base. En otras palabras, si enviamosincógnita{\displaystyle x}unidades de flujo en el borde{\displaystyle u}en un flujo máximo, yy>incógnita{\displaystyle y>x}unidades de flujo en{\displaystyle u}en otro flujo máximo, entonces para cadaΔ[0,yincógnita]{\displaystyle \Delta \in [0,yx]}podemos enviarincógnita+Δ{\displaystyle x+\Delta }unidades en{\displaystyle u}y enrutar el flujo en los bordes restantes en consecuencia, para obtener otro flujo máximo. Si los valores de flujo pueden ser cualquier número real o racional, entonces hay infinitos talesΔ{\displaystyle \Delta }valores para cada parincógnita,y{\displaystyle x,y}.

Algoritmos

Las siguientes tablas muestran el desarrollo histórico de los algoritmos para resolver el problema del flujo máximo. Muchas de las publicaciones citadas incluyen tablas similares que comparan sus resultados con trabajos anteriores.

Fuertemente polinómico

Un algoritmo de tiempo fuertemente polinomial tiene límites de tiempo polinomiales que dependen solo del número de entradas, pero no de la magnitud de estos números. Aquí, las entradas son los vértices (numerados a continuación comoV{\displaystyle V}) y bordes (numerados comomi{\displaystyle E}). La complejidad de cada algoritmo se expresa utilizando la notación O grande .

Pseudopolinomio y polinomio débil

Paralelamente al desarrollo de algoritmos de flujo fuertemente polinomiales, ha habido una larga línea de límites de tiempo pseudopolinomiales y débilmente polinomiales, cuyo tiempo de ejecución depende de la magnitud de las capacidades de entrada. Aquí, el valorU{\displaystyle U}Se refiere a la mayor capacidad de arista después de reescalar todas las capacidades a valores enteros . (Si la red contiene capacidades irracionales , este reescalado puede no ser posible y estos algoritmos pueden no producir soluciones exactas o pueden no converger incluso a una solución aproximada). La diferencia entre pseudopolinomio y débilmente polinomial es que una cota pseudopolinomial puede ser polinomial en U{\displaystyle U}, pero para una cota débilmente polinómica puede ser polinómica solo enregistroU{\displaystyle \log U}.

Teorema del flujo integral

El teorema del flujo integral establece que

Si cada arista en una red de flujo tiene capacidad entera, entonces existe un flujo máximo entero.

La afirmación no solo sostiene que el valor del flujo es un número entero, lo cual se deduce directamente del teorema del flujo máximo y el corte mínimo , sino que el flujo en cada arista es entero. Esto es crucial para muchas aplicaciones combinatorias (véase más adelante), donde el flujo a través de una arista puede indicar si el elemento correspondiente a dicha arista debe incluirse o no en el conjunto buscado.

Solicitud

Problema de flujo máximo con múltiples fuentes y múltiples sumideros

Figura 4.1.1. Transformación de un problema de flujo máximo con múltiples fuentes y múltiples sumideros en un problema de flujo máximo con una sola fuente y un solo sumidero.

Dada una rednorte=(V,mi){\displaystyle N=(V,E)}con un conjunto de fuentesS={s1,,snorte}{\displaystyle S=\{s_{1},\ldots ,s_{n}\}}y un conjunto de lavabosT={t1,,tmetro}{\displaystyle T=\{t_{1},\ldots ,t_{m}\}}en lugar de una sola fuente y un solo sumidero, debemos encontrar el flujo máximo a través denorte{\displaystyle N}Podemos transformar el problema de múltiples fuentes y múltiples sumideros en un problema de flujo máximo agregando una fuente consolidada que conecta con cada vértice enS{\displaystyle S}y un sumidero consolidado conectado por cada vértice enT{\displaystyle T}(también conocido como superfuente y supersumidero ) con capacidad infinita en cada borde (véase la figura 4.1.1).

Emparejamiento bipartito de cardinalidad máxima

Figura 4.3.1. Transformación de un problema de emparejamiento bipartito máximo en un problema de flujo máximo.

Dado un grafo bipartitoGRAMO=(incógnitaY,mi){\displaystyle G=(X\cup Y,E)}, debemos encontrar un emparejamiento de cardinalidad máxima enGRAMO{\displaystyle G}, es decir, un emparejamiento que contiene el mayor número posible de aristas. Este problema se puede transformar en un problema de flujo máximo mediante la construcción de una red.norte=(incógnitaY{s,t},mi){\displaystyle N=(X\cup Y\cup \{s,t\},E')}, dónde

  1. mi{\displaystyle E'}contiene los bordes enGRAMO{\displaystyle G}dirigido desdeincógnita{\displaystyle X}aY{\displaystyle Y}.
  2. (s,incógnita)mi{\displaystyle (s,x)\in E'}para cadaincógnitaincógnita{\displaystyle x\in X}y(y,t)mi{\displaystyle (y,t)\in E'}para cadayY{\displaystyle y\in Y}.
  3. do(mi)=1{\displaystyle c(e)=1}para cadamimi{\displaystyle e\in E'}(Véase la figura 4.3.1).

Entonces el valor del flujo máximo ennorte{\displaystyle N}es igual al tamaño del emparejamiento máximo enGRAMO{\displaystyle G}y se puede encontrar una coincidencia de cardinalidad máxima tomando aquellos bordes que tienen flujo1{\displaystyle 1}en un flujo máximo integral.

Cobertura mínima de caminos en un grafo acíclico dirigido

Dado un grafo dirigido acíclicoGRAMO=(V,mi){\displaystyle G=(V,E)}, debemos encontrar el número mínimo de caminos disjuntos en vértices para cubrir cada vértice enV{\displaystyle V}Podemos construir un grafo bipartito.GRAMO=(VafueraVen,mi){\displaystyle G'=(V_{\textrm {out}}\cup V_{\textrm {in}},E')}deGRAMO{\displaystyle G}, dónde

  1. Vafuera={vafueravVv tiene borde(s) saliente(s)}{\displaystyle V_{\textrm {out}}=\{v_{\textrm {out}}\mid v\in V\land v{\text{ has outgoing edge(s)}}\}}
  2. Ven={venvVv tiene aristas entrantes}{\displaystyle V_{\textrm {in}}=\{v_{\textrm {in}}\mid v\in V\land v{\text{ has incoming edge(s)}}\}}
  3. mi={(afuera,ven)Vot×Vinorte(,v)mi}{\displaystyle E'=\{(u_{\textrm {out}},v_{\textrm {in}})\in V_{out}\times V_{in}\mid (u,v)\in E\}}.

Entonces se puede demostrar queGRAMO{\displaystyle G'}tiene un juegoMETRO{\displaystyle M}de tamañometro{\displaystyle m}si y solo siGRAMO{\displaystyle G}tiene una cobertura de caminos disjuntos en vérticesdo{\displaystyle C}que contienemetro{\displaystyle m}bordes ynortemetro{\displaystyle n-m}senderos, dondenorte{\displaystyle n}es el número de vértices enGRAMO{\displaystyle G}Por lo tanto, el problema se puede resolver encontrando el emparejamiento de cardinalidad máxima enGRAMO{\displaystyle G'}en cambio.

Supongamos que hemos encontrado una coincidenciaMETRO{\displaystyle M}deGRAMO{\displaystyle G'}y construyó la portadado{\displaystyle C}de ello. Intuitivamente, si dos vérticesot,vinorte{\displaystyle u_{\mathrm {out} },v_{\mathrm {in} }}se emparejan enMETRO{\displaystyle M}, luego el borde(,v){\displaystyle (u,v)}está contenido endo{\displaystyle C}. Claramente el número de aristas endo{\displaystyle C}esmetro{\displaystyle m}Para ver esodo{\displaystyle C}Si son disjuntos en vértices, considere lo siguiente:

  1. Cada vérticevafuera{\displaystyle v_{\textrm {out}}}enGRAMO{\displaystyle G'}puede no coincidir enMETRO{\displaystyle M}, en cuyo caso no quedan bordes que salganv{\displaystyle v}endo{\displaystyle C}; o puede coincidir , en cuyo caso queda exactamente una arista.v{\displaystyle v}endo{\displaystyle C}En cualquier caso, no más de una arista sale de ningún vértice.v{\displaystyle v}endo{\displaystyle C}.
  2. De manera similar para cada vérticeven{\displaystyle v_{\textrm {in}}}enGRAMO{\displaystyle G'}– si coincide, hay un único borde entrantev{\displaystyle v}endo{\displaystyle C}; de lo contrariov{\displaystyle v}no tiene aristas entrantes endo{\displaystyle C}.

Por lo tanto, ningún vértice tiene dos aristas entrantes o dos salientes endo{\displaystyle C}, lo que significa todos los caminos endo{\displaystyle C}son disjuntos en vértices.

Para demostrar que la portadado{\displaystyle C}tiene tamañonortemetro{\displaystyle n-m}, comenzamos con una cubierta vacía y la construimos incrementalmente. Para agregar un vértice{\displaystyle u}Para la cubierta, podemos agregarla a una ruta existente o crear una nueva ruta de longitud cero que comience en ese vértice. El primer caso es aplicable siempre que(,v)mi{\displaystyle (u,v)\in E}y algún camino en la portada comienza env{\displaystyle v}, o(v,)mi{\displaystyle (v,u)\in E}y algún camino termina env{\displaystyle v}. Este último caso siempre es aplicable. En el primer caso, el número total de aristas en la cobertura aumenta en 1 y el número de caminos permanece igual; en el segundo caso, el número de caminos aumenta y el número de aristas permanece igual. Ahora está claro que después de cubrir todonorte{\displaystyle n}vértices, la suma del número de caminos y aristas en la cubierta esnorte{\displaystyle n}. Por lo tanto, si el número de aristas en la cubierta esmetro{\displaystyle m}, el número de caminos esnortemetro{\displaystyle n-m}.

Caudal máximo con capacidades de vértice

Figura 4.4.1. Transformación de un problema de flujo máximo con restricción de capacidades de vértices en el problema de flujo máximo original mediante división de nodos.

Dejarnorte=(V,mi){\displaystyle N=(V,E)}Sea una red. Supongamos que hay capacidad en cada nodo además de la capacidad de la arista, es decir, una asignación.do:VR+,{\displaystyle c:V\to \mathbb {R} ^{+},}de tal manera que el flujoF{\displaystyle f}debe satisfacer no solo la restricción de capacidad y la conservación de flujos, sino también la restricción de capacidad del vértice.

iVFivdo(v)vV{s,t}.{\displaystyle \sum _{i\in V}f_{iv}\leq c(v)\qquad \forall v\in V\backslash \{s,t\}.}

En otras palabras, la cantidad de flujo que pasa por un vértice no puede exceder su capacidad. Para encontrar el flujo máximo a través denorte{\displaystyle N}, podemos transformar el problema en el problema de flujo máximo en el sentido original mediante la expansiónnorte{\displaystyle N}. Primero, cadavV{\displaystyle v\in V}es reemplazado porven{\displaystyle v_{\text{in}}}yvafuera{\displaystyle v_{\text{out}}}, dóndeven{\displaystyle v_{\text{in}}}está conectado por aristas que entranv{\displaystyle v}yvafuera{\displaystyle v_{\text{out}}}está conectado a los bordes que salen dev{\displaystyle v}luego asignar capacidaddo(v){\displaystyle c(v)}al borde que conectaven{\displaystyle v_{\text{in}}}yvafuera{\displaystyle v_{\text{out}}}(véase la figura 4.4.1). En esta red ampliada, se elimina la restricción de capacidad de los vértices y, por lo tanto, el problema puede tratarse como el problema original de flujo máximo.

Número máximo de caminos de s a t

Dado un grafo dirigidoGRAMO=(V,mi){\displaystyle G=(V,E)}y dos vérticess{\displaystyle s}yt{\displaystyle t}, debemos encontrar el número máximo de caminos desdes{\displaystyle s}at{\displaystyle t}Este problema tiene varias variantes:

1. Los caminos deben ser disjuntos en aristas. Este problema se puede transformar en un problema de flujo máximo mediante la construcción de una red.norte=(V,mi){\displaystyle N=(V,E)}deGRAMO{\displaystyle G}, cons{\displaystyle s}yt{\displaystyle t}ser la fuente y el sumidero denorte{\displaystyle N}respectivamente, y asignando a cada arista una capacidad de1{\displaystyle 1}En esta red, el flujo máximo esk{\displaystyle k}si hayk{\displaystyle k}caminos disjuntos en aristas.

2. Los caminos deben ser independientes, es decir, disjuntos en vértices (excepto pors{\displaystyle s}yt{\displaystyle t}). Podemos construir una rednorte=(V,mi){\displaystyle N=(V,E)}deGRAMO{\displaystyle G}con capacidades de vértice, donde las capacidades de todos los vértices y todas las aristas son1{\displaystyle 1}Entonces, el valor del flujo máximo es igual al número máximo de caminos independientes desdes{\displaystyle s}at{\displaystyle t}.

3. Además de que los caminos sean disjuntos en aristas y/o vértices, también tienen una restricción de longitud: solo contamos los caminos cuya longitud es exactamentek{\displaystyle k}o como máximok{\displaystyle k}La mayoría de las variantes de este problema son NP-completas , excepto para valores pequeños dek{\displaystyle k}. [ 43 ]

Problema de cierre

El cierre de un grafo dirigido es un conjunto de vértices C tal que ninguna arista sale de C. El problema del cierre consiste en encontrar el cierre de peso máximo o mínimo en un grafo dirigido ponderado por vértices. Puede resolverse en tiempo polinomial mediante una reducción al problema del flujo máximo.

Aplicaciones en el mundo real

eliminación de béisbol

Construcción de flujo de red para el problema de eliminación del béisbol

En el problema de eliminación de béisbol hay n equipos compitiendo en una liga. En una etapa específica de la temporada de la liga, w i es el número de victorias y r i es el número de juegos que quedan por jugar para el equipo i y r ij es el número de juegos que quedan contra el equipo j . Un equipo es eliminado si no tiene ninguna posibilidad de terminar la temporada en primer lugar. La tarea del problema de eliminación de béisbol es determinar qué equipos son eliminados en cada punto durante la temporada. Schwartz [ 44 ] propuso un método que reduce este problema a un flujo máximo de red. En este método se crea una red para determinar si el equipo k es eliminado.

Sea G = ( V , E ) una red donde s , tV son la fuente y el sumidero respectivamente. Se agrega un nodo de juego ij , que representa el número de jugadas entre estos dos equipos. También agregamos un nodo de equipo para cada equipo y conectamos cada nodo de juego { i , j } con i < j a V , y conectamos cada uno de ellos desde s mediante una arista con capacidad r ij , que representa el número de jugadas entre estos dos equipos. También agregamos un nodo de equipo para cada equipo y conectamos cada nodo de juego { i , j } con dos nodos de equipo i y j para asegurar que uno de ellos gane. No es necesario restringir el valor de flujo en estas aristas. Finalmente, se crean aristas desde el nodo de equipo i al nodo sumidero t y se establece la capacidad de w k + r kw i para evitar que el equipo i gane más que w k + r k . Sea S el conjunto de todos los equipos que participan en la liga y sea

r(S{k})=i,j{S{k}}i<jrij{\displaystyle r(S-\{k\})=\sum _{i,j\in \{S-\{k\}\} \atop i<j}r_{ij}}.

En este método se afirma que el equipo k no se elimina si y solo si existe un valor de flujo de tamaño r ( S − { k }) en la red G . En el artículo mencionado se demuestra que este valor de flujo es el valor de flujo máximo de s a t .

Programación de vuelos de aerolíneas

En la industria aérea, un problema importante es la programación de las tripulaciones de vuelo. Este problema puede considerarse una aplicación del flujo máximo de red extendido. La entrada de este problema es un conjunto de vuelos F que contiene información sobre dónde y cuándo sale y llega cada vuelo. En una versión de la programación aérea, el objetivo es generar un horario factible con un máximo de k tripulaciones.

Para resolver este problema se utiliza una variación del problema de circulación denominada circulación acotada, que es la generalización de los problemas de flujo en redes , con la restricción adicional de un límite inferior en los flujos de arista.

Sea G = ( V , E ) una red con s , tV como nodos de origen y destino. Para el origen y el destino de cada vuelo i , se añaden dos nodos a V , el nodo s i como origen y el nodo d i como destino del vuelo i . También se añaden las siguientes aristas a E :

  1. Una arista con capacidad [0, 1] entre s y cada s i .
  2. Una arista con capacidad [0, 1] entre cada d i y t .
  3. Una arista con capacidad [1, 1] entre cada par de s i y d i .
  4. Una arista con capacidad [0, 1] entre cada d i y s j , si la fuente s j es alcanzable con una cantidad razonable de tiempo y costo desde el destino del vuelo i .
  5. Una arista con capacidad [0, ] entre s y t .

En el método mencionado, se afirma y se demuestra que encontrar un valor de flujo k en G entre s y t es igual a encontrar un programa factible para el conjunto de vuelos F con como máximo k tripulaciones. [ 45 ]

Otra versión de la programación de aerolíneas es encontrar las tripulaciones mínimas necesarias para realizar todos los vuelos. Para encontrar una respuesta a este problema, se crea un grafo bipartito G' = ( AB , E ) donde cada vuelo tiene una copia en el conjunto A y en el conjunto B . Si el mismo avión puede realizar el vuelo j después del vuelo i , iA está conectado a jB . Un emparejamiento en G' induce una programación para F y obviamente el emparejamiento bipartito máximo en este grafo produce una programación de aerolínea con el número mínimo de tripulaciones. [ 45 ] Como se menciona en la parte de Aplicación de este artículo, el emparejamiento bipartito de cardinalidad máxima es una aplicación del problema del flujo máximo.

Problema de circulación-demanda

Existen fábricas que producen bienes y pueblos a los que se deben entregar. Están conectados por una red de carreteras, cada una con una capacidad c para el flujo máximo de mercancías. El problema consiste en determinar si existe una circulación que satisfaga la demanda. Este problema puede transformarse en un problema de flujo máximo.

  1. Agregue un nodo fuente s y agregue aristas desde él a cada nodo de fábrica f i con capacidad p i donde p i es la tasa de producción de la fábrica f i .
  2. Agregue un nodo sumidero t y agregue aristas desde todas las aldeas v i a t con capacidad d i donde d i es la tasa de demanda de la aldea v i .

Sea G = ( V , E ) esta nueva red. Existe una circulación que satisface la demanda si y solo si  :

Valor máximo de flujo ( G )=ivdi{\displaystyle =\sum _{i\in v}d_{i}}.

Si existe circulación, analizar la solución de flujo máximo daría la respuesta sobre cuántos bienes deben enviarse por una ruta determinada para satisfacer la demanda.

El problema se puede extender agregando un límite inferior al flujo en algunos bordes. [ 46 ]

Segmentación de imágenes

Imagen original de tamaño 8x8.
Red construida a partir del mapa de bits. La fuente está a la izquierda, el sumidero a la derecha. Cuanto más oscuro sea un borde, mayor será su capacidad. a i es alto cuando el píxel es verde, b i cuando el píxel no es verde. Las penalizaciones p ij son todas iguales. [ 47 ]

En su libro, Kleinberg y Tardos presentan un algoritmo para segmentar una imagen. [ 48 ] Presentan un algoritmo para encontrar el fondo y el primer plano en una imagen. Más precisamente, el algoritmo toma como entrada un mapa de bits modelado de la siguiente manera: a i ≥ 0 es la probabilidad de que el píxel i pertenezca al primer plano, b i ≥ 0 es la probabilidad de que el píxel i pertenezca al fondo, y p ij es la penalización si dos píxeles adyacentes i y j se colocan uno en el primer plano y el otro en el fondo. El objetivo es encontrar una partición ( A , B ) del conjunto de píxeles que maximice la siguiente cantidad

q(A,B)=iAai+iBbii,j adyacente|A{i,j}|=1pagij{\displaystyle q(A,B)=\sum _{i\in A}a_{i}+\sum _{i\in B}b_{i}-\sum _{\begin{matrix}i,j{\text{ adjacent}}\\|A\cap \{i,j\}|=1\end{matrix}}p_{ij}},

En efecto, para los píxeles en A (considerados como primer plano), ganamos a i ; para todos los píxeles en B (considerados como fondo), ganamos b i . En el borde, entre dos píxeles adyacentes i y j , perdemos p ij . Esto equivale a minimizar la cantidad

q(A,B)=iAbi+iBai+i,j adyacente|A{i,j}|=1pagij{\displaystyle q'(A,B)=\sum _{i\in A}b_{i}+\sum _{i\in B}a_{i}+\sum _{\begin{matrix}i,j{\text{ adjacent}}\\|A\cap \{i,j\}|=1\end{matrix}}p_{ij}}

porque

q(A,B)=iABai+iABbiq(A,B).{\displaystyle q(A,B)=\sum _{i\in A\cup B}a_{i}+\sum _{i\in A\cup B}b_{i}-q'(A,B).}
Recorte mínimo mostrado en la red (triángulos frente a círculos).

Ahora construimos la red cuyos nodos son el píxel, más una fuente y un sumidero (véase la figura de la derecha). Conectamos la fuente con el píxel i mediante una arista de peso a i . Conectamos el píxel i con el sumidero mediante una arista de peso b i . Conectamos el píxel i con el píxel j con un peso p ij . Ahora, queda calcular un corte mínimo en esa red (o, equivalentemente, un flujo máximo). La última figura muestra un corte mínimo.

Extensiones

1. En el problema del flujo de costo mínimo , cada arista ( u ,v) tiene un coeficiente de costo a uv además de su capacidad. Si el flujo a través de la arista es f uv , entonces el costo total es a uv f uv . Se requiere encontrar un flujo de tamaño d dado con el menor costo. En la mayoría de las variantes, los coeficientes de costo pueden ser positivos o negativos. Existen varios algoritmos de tiempo polinomial para este problema.

2. El problema del flujo máximo puede ampliarse mediante restricciones disyuntivas : una restricción disyuntiva negativa indica que un par de aristas no puede tener simultáneamente un flujo distinto de cero; una restricción disyuntiva positiva indica que, en un par de aristas, al menos una debe tener un flujo distinto de cero. Con restricciones negativas, el problema se vuelve fuertemente NP-difícil incluso para redes simples. Con restricciones positivas, el problema es polinomial si se permiten flujos fraccionarios, pero puede ser fuertemente NP-difícil cuando los flujos deben ser enteros. [ 49 ]

Referencias

  1. 1 2 3 Schrijver, A. (2002). "Sobre la historia de los problemas de transporte y flujo máximo". Programación matemática . 91 (3): 437– 445. CiteSeerX 10.1.1.23.5134 . doi : 10.1007/s101070100259 . S2CID 10210675 .  
  2. Gass, Saul I.; Assad, Arjang A. (2005). «Desarrollos matemáticos, algorítmicos y profesionales de la investigación operativa de 1951 a 1956». Cronología anotada de la investigación operativa . Serie internacional en investigación operativa y ciencias de la gestión. Vol. 75. pp. 79–110 . doi : 10.1007/0-387-25837-X_5 (inactivo el 1 de julio de 2025). ISBN   978-1-4020-8116-3.{{cite book}}: CS1 maint: DOI inactivo desde julio de 2025 ( enlace )
  3. 1 2 Harris, TE ; Ross, FS (1955). "Fundamentos de un método para evaluar las capacidades de la red ferroviaria" (PDF) . Memorando de investigación . Archivado del original (PDF) el 8 de enero de 2014.
  4. 1 2 Ford, LR ; Fulkerson, DR (1956). "Flujo máximo a través de una red" . Revista Canadiense de Matemáticas . 8 : 399–404 . doi : 10.4153/CJM-1956-045-5 .
  5. 1 2 Ford, LR, Jr.; Fulkerson, DR, Flujos en redes , Princeton University Press (1962).
  6. Sherman, Jonah (2013). «Flujos casi máximos en tiempo casi lineal». Actas del 54.º Simposio Anual del IEEE sobre Fundamentos de la Informática . págs. 263–269 . arXiv : 1304.2077 . doi : 10.1109/FOCS.2013.36 . ISBN  978-0-7695-5135-7. S2CID 14681906 . 
  7. Kelner, JA; Lee, YT; Orecchia, L.; Sidford, A. (2014). "Un algoritmo de tiempo casi lineal para el flujo máximo aproximado en grafos no dirigidos y sus generalizaciones multicommodity" (PDF) . Actas del vigésimo quinto simposio anual ACM-SIAM sobre algoritmos discretos . pág. 217. arXiv : 1304.2338 . doi : 10.1137/1.9781611973402.16 . ISBN  978-1-61197-338-9. S2CID 10733914 . Archivado del original (PDF) el 3 de marzo de 2016. 
  8. Knight, Helen (7 de enero de 2014). "Un nuevo algoritmo puede simplificar drásticamente las soluciones al problema del 'flujo máximo'" . Noticias del MIT. Archivado del original el 26 de febrero de 2014. Consultado el 8 de enero de 2014 .
  9. 1 2 Orlin, James B. (2013). "Flujos máximos en tiempo O(nm), o mejor". Actas del cuadragésimo quinto simposio anual de la ACM sobre Teoría de la Computación . págs. 765–774 . CiteSeerX 10.1.1.259.5759 . doi : 10.1145/2488608.2488705 . ISBN   9781450320290. S2CID 207205207 . 
  10. 1 2 Chen, L.; Kyng, R.; Liu, YP; Gutenberg, MP; Sachdeva, S. (2022). "Flujo máximo y flujo de costo mínimo en tiempo casi lineal". arXiv : 2203.00671 [ cs.DS ].
  11. Klarreich, Erica (8 de junio de 2022). "Investigadores logran un algoritmo 'absurdamente rápido' para el flujo de red" . Quanta Magazine . Consultado el 8 de junio de 2022 .
  12. Bernstein, Aaron; Nanongkai, Danupon; Wulff-Nilsen, Christian (30 de octubre de 2022). "Caminos más cortos de una sola fuente con peso negativo en tiempo casi lineal". arXiv : 2203.03456 [ cs.DS ].
  13. Brubaker, Ben (18 de enero de 2023). "Finalmente, un algoritmo rápido para caminos más cortos en grafos negativos" . Quanta Magazine . Consultado el 25 de enero de 2023 .
  14. "FOCS 2022" . focs2022.eecs.berkeley.edu . Consultado el 25 de enero de 2023 .
  15. Santosh, Nagarakatte. "FOCS 2022 Best Paper Award for Prof. Aaron Bernstein's Paper" . www.cs.rutgers.edu . Consultado el 25 de enero de 2023 .
  16. Brand, Jan Van Den; Chen, Li; Kyng, Rasmus; Liu, Yang P.; Peng, Richard; Gutenberg, Maximilian Probst; Sachdeva, Sushant; Sidford, Aaron (2023-11). "Un algoritmo determinista de tiempo casi lineal para flujo de costo mínimo" . 2023 IEEE 64th Annual Symposium on Foundations of Computer Science (FOCS) : 503–514 . doi : 10.1109/FOCS57990.2023.00037 .{{cite journal}}: Compruebe los valores de fecha en: |date=( ayuda )
  17. Edmonds, Jack; Karp, Richard M. (abril de 1972). "Mejoras teóricas en la eficiencia algorítmica para problemas de flujo de red". Journal of the ACM . 19 (2): 248– 264. doi : 10.1145/321694.321699 .Anunciado previamente en la Conferencia Internacional sobre Estructuras Combinatorias y sus Aplicaciones, Calgary, Alberta, 1969, MR 0266680 . 
  18. Dinic, EA (1970). "Un algoritmo para la solución del problema del flujo máximo en una red con estimación de potencia". Doklady Akademii Nauk SSSR . 194 : 754– 757. MR 0287976 . 
  19. Karzanov, AV (1974). "El problema de encontrar el flujo máximo en una red mediante el método de preflujos". Doklady Akademii Nauk SSSR . 215 : 49– 52. MR 0343879 . 
  20. Čerkasskiĭ, BV (1977). "Un algoritmo para la construcción del flujo máximo en una red con un gasto laboral deO(norte2pag){\displaystyle O(n^{2}{\sqrt {p}})}acciones". Métodos matemáticos para la solución de problemas económicos . 7 : 117–126 . MR 0503654 . 
  21. Malhotra, VM; Kumar, M. Pramodh; Maheshwari, SN (1978). "UnO(|V|3){\displaystyle O(|V|^{3})}algoritmo para encontrar flujos máximos en redes" (PDF) . Information Processing Letters . 7 (6): 277– 278. doi : 10.1016/0020-0190(78)90016-9 .
  22. Galil, Zvi (1980). "UnO(V5/3mi2/3){\displaystyle O(V^{5/3}E^{2/3})}algoritmo para el problema del flujo máximo". Acta Informatica . 14 (3): 221– 242. doi : 10.1007/BF00264254 . MR 0587133 . Versión preliminar, "Un nuevo algoritmo para el problema del flujo máximo", XIX Simposio Anual sobre Fundamentos de la Informática (FOCS) , 1978.
  23. Galil, Zvi ; Naamad, Amnón (1980). "UnO(miV(registroV)2){\displaystyle O{\bigl (}EV(\log V)^{2}{\bigr )}}algoritmo para el problema del flujo máximo". Journal of Computer and System Sciences . 21 (2): 203– 217. doi : 10.1016/0022-0000(80)90035-5 .Circuló como manuscrito inédito en 1978 y se publicó en forma preliminar como "Network flow and generalized path compression", 20th Annual Symposium on Foundations of Computer Science (FOCS) , 1979, doi : 10.1145/800135.804394 .
  24. Shiloach, Yossi. UnO(norteIregistro2I){\displaystyle O(nI\log ^{2}I)}Algoritmo de flujo máximo (Informe técnico STAN-CS-78-802). Departamento de Ciencias de la Computación de la Universidad de Stanford.Según lo citado por Galil y Naamad (1980)
  25. Sleator, Daniel D. ; Tarjan, Robert Endre (1983). "Una estructura de datos para árboles dinámicos". Journal of Computer and System Sciences . 26 (3): 362– 391. doi : 10.1016/0022-0000(83)90006-5 . MR 0710253 . Versión preliminar, 13.º Simposio ACM sobre Teoría de la Computación (STOC) , 1981, doi : 10.1145/800076.802464
  26. Goldberg, AV ; Tarjan, RE (1988). "Un nuevo enfoque al problema del flujo máximo" . Journal of the ACM . 35 (4): 921. doi : 10.1145/48014.61051 . S2CID 52152408 . Versión preliminar, 18.º Simposio Anual de la ACM sobre Teoría de la Computación (STOC) , 1986, doi : 10.1145/12130.12144
  27. Cheriyan, Joseph; Hagerup, Torben (1995). "Un algoritmo de flujo máximo aleatorio". SIAM Journal on Computing . 24 (2): 203– 226. doi : 10.1137/S0097539791221529 . MR 1320205 . Versión preliminar en el 30.º Simposio Anual sobre Fundamentos de la Informática (FOCS) , 1989, doi : 10.1109/SFCS.1989.63465
  28. Alon, Noga (1990). "Generación de permutaciones pseudoaleatorias y algoritmos de flujo máximo" (PDF) . Information Processing Letters . 35 (4): 201– 204. doi : 10.1016/0020-0190(90)90024-R . MR 1066123 . Citado como manuscrito de 1989 por Cheriyan, Hagerup y Mehlhorn en 1990.
  29. ^ Cheriyan, José; Hagerup, Torben; Mehlhorn, Kurt (1996). "Uno(norte3){\displaystyle o(n^{3})}-algoritmo de flujo máximo en tiempo". SIAM Journal on Computing . 25 (6): 1144– 1170. doi : 10.1137/S0097539791278376 . hdl : 11858/00-001M-0000-0014-B08A-3 . MR 1417893 . Versión preliminar, "¿Se puede calcular un flujo máximo eno(nortemetro){\displaystyle o(nm)}tiempo?", XVII Coloquio Internacional sobre Autómatas, Lenguajes y Programación (ICALP), 1990, doi : 10.1007/BFb0032035
  30. King, Valerie ; Rao, S.; Tarjan, Robert Endre (1992). "Un algoritmo de flujo máximo determinista más rápido" . En Frederickson, Greg N. (ed.). Actas del Tercer Simposio Anual ACM/SIGACT-SIAM sobre Algoritmos Discretos, 27-29 de enero de 1992, Orlando, Florida, EE . UU . pp. 157–164 . 
  31. Phillips, Steven J. ; Westbrook, Jeffery R. (1998). "On-line load balance and network flow". Algorithmica . 21 (3): 245– 261. doi : 10.1007/PL00009214 .Versión preliminar, 25º Simposio ACM sobre Teoría de la Computación (STOC) , 1993, doi : 10.1145/167088.167201 .
  32. King, V. ; Rao, S. ; Tarjan, R. (1994). "Un algoritmo de flujo máximo determinista más rápido". Journal of Algorithms . 17 (3): 447– 474. doi : 10.1006/jagm.1994.1044 . MR 1300259 . 
  33. Orlin, James B.; Gong, Xiao-yue (2021). "Un algoritmo rápido de flujo máximo". Networks . 77 (2): 287– 321. doi : 10.1002/net.22001 . hdl : 1721.1/134021 . MR 4264487 . 
  34. Ford, LR Jr. ; Fulkerson, DR (1956). "Flujo máximo a través de una red". Revista Canadiense de Matemáticas . 8 : 399– 404. doi : 10.4153/CJM-1956-045-5 . MR 0079251 . 
  35. Goldberg, AV ; Rao, S. (1998). "Más allá de la barrera de descomposición del flujo" . Journal of the ACM . 45 (5): 783. doi : 10.1145/290179.290181 . S2CID 96030 . 
  36. Kathuria, T.; Liu, YP; Sidford, A. (16–19 de noviembre de 2020). Capacidad unitaria de flujo máximo en casiO(metro4/3){\displaystyle O(m^{4/3})}Tiempo . Durham, Carolina del Norte, EE. UU.: IEEE. págs. 119–130 . 
  37. Madry, Aleksander (9–11 de octubre de 2016). Cálculo del flujo máximo con flujos eléctricos aumentados . New Brunswick, Nueva Jersey: IEEE. págs. 593–602 . 
  38. ^ Marca, J. vd; Lee, YT; Nanongkai, D.; Peng, R.; Saranurak, T.; Sidford, A.; Canción, Z.; Wang, D. (16 a 19 de noviembre de 2020). "Emparejamiento bipartito en tiempo casi lineal en gráficos moderadamente densos" . Durham, Carolina del Norte, Estados Unidos: IEEE. págs. 919-930 . 
  39. Brand, J. vd; Lee, YT; Liu, YP; Saranurak, T.; Sidford, A; Song, Z.; Wang, D. (2021). "Flujos de costo mínimo, MDP y regresión ℓ1 en tiempo casi lineal para instancias densas". arXiv : 2101.05719 [ cs.DS ].
  40. Gao, Y.; Liu, YP; Peng, R. (2021). "Flujos eléctricos totalmente dinámicos: flujo máximo disperso más rápido que Goldberg-Rao". arXiv : 2101.07233 [ cs.DS ].
  41. Brand, Jan Van Den; Chen, Li; Kyng, Rasmus; Liu, Yang P.; Peng, Richard; Gutenberg, Maximilian Probst; Sachdeva, Sushant; Sidford, Aaron (2023-11). "Un algoritmo determinista de tiempo casi lineal para flujo de costo mínimo" . 2023 IEEE 64th Annual Symposium on Foundations of Computer Science (FOCS) : 503–514 . doi : 10.1109/FOCS57990.2023.00037 .{{cite journal}}: Compruebe los valores de fecha en: |date=( ayuda )
  42. ^ Bernstein, A.; Blikstad, J.; Saranurak, T.; Tu, T. (2024). "Flujo máximo mediante el aumento de rutas ennorte2+o(1){\displaystyle n^{2+o(1)}}Tiempo". arXiv : 2406.03648 [ cs.DS ].
  43. Itai, A.; Perl, Y.; Shiloach, Y. (1982). "La complejidad de encontrar caminos disjuntos máximos con restricciones de longitud". Networks . 12 (3): 277– 286. doi : 10.1002/net.3230120306 . ISSN 1097-0037 . 
  44. Schwartz, BL (1966). "Posibles ganadores en torneos parcialmente completados". SIAM Review . 8 (3): 302– 308. Bibcode : 1966SIAMR...8..302S . doi : 10.1137/1008062 . JSTOR 2028206 . 
  45. 1 2 Thomas H. Cormen , Charles E. Leiserson , Ronald L. Rivest y Clifford Stein (2001). «26. Flujo máximo». Introducción a los algoritmos, segunda edición . MIT Press y McGraw-Hill. págs. 643–668 . ISBN  978-0-262-03293-3.{{cite book}}: CS1 maint: varios nombres: lista de autores ( enlace )
  46. Carl Kingsford. "Extensiones de caudal máximo: circulaciones con demandas" (PDF) .
  47. "Proyecto imagesegmentationwithmaxflow, que contiene el código fuente para producir estas ilustraciones" . GitLab . Archivado del original el 22 de diciembre de 2019. Recuperado el 22 de diciembre de 2019 .
  48. "Diseño de algoritmos" . pearson.com . Consultado el 21 de diciembre de 2019 .
  49. Schauer, Joachim; Pferschy, Ulrich (1 de julio de 2013). "El problema del flujo máximo con restricciones disyuntivas". Journal of Combinatorial Optimization . 26 (1): 109– 119. CiteSeerX 10.1.1.414.4496 . doi : 10.1007/s10878-011-9438-7 . ISSN 1382-6905 . S2CID 6598669 .   

Lecturas adicionales

  • Joseph Cheriyan y Kurt Mehlhorn (1999). "Análisis de la regla de selección de nivel más alto en el algoritmo de flujo máximo con empuje de preflujo". Information Processing Letters . 69 (5): 239– 242. CiteSeerX 10.1.1.42.8563 . doi : 10.1016/S0020-0190(99)00019-8 . 
  • Daniel D. Sleator y Robert E. Tarjan (1983). "Una estructura de datos para árboles dinámicos" (PDF) . Journal of Computer and System Sciences . 26 (3): 362– 391. doi : 10.1016/0022-0000(83)90006-5 . ISSN 0022-0000 . 
  • Eugene Lawler (2001). «4. Flujos de red». Optimización combinatoria: redes y matroides . Dover. págs. 109–177 . ISBN  978-0-486-41453-9.