Algoritmo de Ford-Fulkerson

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 abril de 2022; las comprobaciones requieren 3 ediciones .

El algoritmo de Ford-Fulkerson resuelve el problema de encontrar el flujo máximo en una red de transporte .

La idea del algoritmo es la siguiente. El valor de flujo se establece inicialmente en 0: para todos . Luego, la cantidad de flujo se incrementa iterativamente buscando una ruta de aumento (una ruta desde la fuente hasta el sumidero a lo largo de la cual se puede enviar más flujo). El proceso se repite hasta que se puede encontrar una ruta de aumento.

Algoritmo

Descripción informal

  1. Restablecemos todas las transmisiones. La red residual coincide inicialmente con la red original.
  2. En la red residual, encontramos cualquier camino desde la fuente hasta el sumidero. Si no existe tal camino, nos detenemos.
  3. Dejamos por el camino encontrado (se llama camino creciente o cadena creciente ) el máximo caudal posible:
    1. En el camino encontrado en la red residual, estamos buscando un borde con la capacidad mínima .
    2. Para cada arista en el camino encontrado, aumentamos el flujo en , y en la dirección opuesta, lo disminuimos en .
    3. Modificamos la red residual. Para todas las aristas del camino encontrado, así como para las aristas opuestas (antiparalelas) a ellas, calculamos la nueva capacidad. Si se vuelve distinto de cero, agregamos un borde a la red residual, y si se vuelve cero, lo borramos.
  4. Volvemos al paso 2.

Es importante que el algoritmo no especifique exactamente qué camino estamos buscando en el paso 2 ni cómo lo hacemos. Por esta razón, se garantiza que el algoritmo convergerá solo para anchos de banda enteros, pero incluso para ellos, para anchos de banda grandes, puede ejecutarse durante mucho tiempo. Si las capacidades son reales, el algoritmo puede ejecutarse indefinidamente sin converger a la solución óptima (ver ejemplo a continuación ).

Si no buscas ningún camino, sino el más corto, obtienes el algoritmo de Edmonds-Karp o el algoritmo de Dinits . Estos algoritmos convergen para cualquier peso real en el tiempo y respectivamente.

Descripción formal

Dado un gráfico con capacidad y flujo para aristas de a . Es necesario encontrar el caudal máximo desde la fuente hasta el sumidero . En cada paso del algoritmo, se aplican las mismas condiciones que para todos los flujos:

La red residual  es una red con ancho de banda y sin flujo.

Entrada Gráfico con ancho de banda , fuente y sumidero Salida Caudal máximo de a

  1. para todos los bordes
  2. Siempre que haya una ruta de a a tal que para todos los bordes :
    1. Encontrar
    2. Para cada borde

La ruta se puede encontrar, por ejemplo, mediante la búsqueda en anchura ( algoritmo de Edmonds-Karp ) o la búsqueda en profundidad en .

Dificultad

En cada paso, el algoritmo agrega un flujo de ruta de aumento al flujo existente. Si las capacidades de todos los bordes son números enteros, es fácil demostrar por inducción que los flujos a través de todos los bordes siempre serán números enteros. Por lo tanto, en cada paso, el algoritmo aumenta el flujo en al menos uno, por lo que convergerá en la mayoría de los pasos, donde f es el flujo máximo en el gráfico. Es posible completar cada paso en el tiempo , donde está el número de aristas en el gráfico, entonces el tiempo total de ejecución del algoritmo es limitado .

Si la capacidad de al menos uno de los bordes es un número irracional, entonces el algoritmo puede ejecutarse indefinidamente, sin converger necesariamente a la solución correcta. A continuación se proporciona un ejemplo.

Un ejemplo de un algoritmo no convergente

Considere la red que se muestra a la derecha, con fuente , sumidero , capacidades de borde y la capacidad de todos los demás bordes igual a un número entero . La constante se elige de modo que . Usamos los caminos del gráfico residual dado en la tabla, y , y .

Paso camino encontrado Hilo añadido Capacidades residuales
0
una
2
3
cuatro
5

Tenga en cuenta que después del paso 1, así como después del paso 5, las capacidades residuales de los bordes , y tienen la forma , y , respectivamente, para algunos naturales . Esto significa que podemos usar rutas de aumento , , e infinitas veces, y la capacidad residual de estos bordes siempre será de la misma forma. El flujo total después del paso 5 es . En un tiempo infinito, el flujo total convergerá a , mientras que el flujo máximo es . Por lo tanto, el algoritmo no solo se ejecuta indefinidamente, sino que ni siquiera converge a la solución óptima. [una]

Ejemplo

El siguiente ejemplo muestra los primeros pasos del algoritmo Ford-Fulkerson en una red de transporte con cuatro nodos, fuente A y sumidero D. Este ejemplo muestra el peor de los casos. Cuando se usa la búsqueda primero en amplitud, el algoritmo solo necesita 2 pasos.

Sendero Banda ancha Resultado
Red de transporte inicial


Después de 1998 pasos...
Red de destino

Véase también

Enlaces

Literatura

Notas

  1. Zwick, Uri. Las redes más pequeñas en las que el procedimiento de flujo máximo de Ford-Fulkerson puede fallar al terminar  // Ciencias de la Computación  Teórica : diario. - 1995. - 21 de agosto ( vol. 148 , n. 1 ). - pág. 165-170 . - doi : 10.1016/0304-3975(95)00022-O .