# Red de flujo

En teoría de grafos, una red de flujo es un grafo dirigido donde existen dos vértices especiales, uno llamado fuente, al que se le asocia un flujo positivo y otro llamado sumidero que tiene un flujo negativo y a cada arista se le asocia cierta capacidad positiva. En cada vértice diferente a los dos especiales se mantiene la ley de corrientes de Kirchoff, en donde la suma de flujos entrantes a un vértice debe ser igual a la suma de flujos que salen de él (propiedad de conservación del flujo $\sum f_{i}=\sum f_{o}$). Puede ser utilizada para modelar el tráfico en un sistema de autopistas, fluidos viajando en tuberías, corrientes eléctricas en circuitos eléctricos o sistemas similares por lo que viaje algo entre nodos. Uno de los usos principales de los llamados algoritmos de flujo es encontrar el flujo máximo de la fuente al sumidero, siempre cumpliendo unas determinadas restricciones.

## Descripción matemática

Una red de flujo es un grafo dirigido $G=(V,E)$ en donde cada arco $(u,v)\in E$ tiene una capacidad no negativa $c(u,v)\geq 0$.
Se distinguen dos vértices: la fuente s y el destino t.
Se supone que cada vértice se encuentra en alguna ruta de s a t.
Un flujo en G es una función $f:V\times V\mapsto R$ tal que
* Restricción de capacidad: $\forall \quad u,v\in V,\quad f(u,v)\leq c(u,v)$
* Simetría: $f(u,v)=-f(v,u)\,$
* Conservación: $\forall u\in V-\left\{s,t\right\}\quad \sum _{v\in V}f(u,v)=0$
El valor del flujo es $|f|=\sum _{v\in V}f(s,v)$
El problema del flujo máximo trata de maximizar este flujo.

## Algoritmo de flujo máximo

Tenemos el conocido problema de flujo máximo o maximal: ¿cuál es la tasa mayor a la cual el material puede ser transportado de la fuente al sumidero sin violar ninguna restricción de capacidad?
En otras palabras, el problema consiste en determinar la máxima capacidad de flujo que puede ingresar a través de la fuente y salir por el nodo de destino.
El procedimiento para obtener el flujo máximo de una red, consiste en seleccionar repetidas veces cualquier trayectoria de la fuente al destino y asignar el flujo máximo posible en esa trayectoria.
    Capacidad residual: es la capacidad adicional de flujo que un arco puede llevar:
    $c_{f}(u,v)=c(u,v)-f(u,v)\,$
* Dada una red de flujo máximo, plantee la red residual asociada.
* Encuentre la trayectoria de la fuente al destino con capacidad de flujo estrictamente positivo (si no existe alguno, es porque se ha encontrado el óptimo).
* Examine estas trayectorias para encontrar la rama o arco con la menor capacidad de flujo restante e incremente en éste valor, la capacidad del flujo en sentido contrario.
* Determine todas las trayectorias estrictamente positivas, hasta que no se permita flujo del nodo a un nodo destino.
Podemos, mediante el Algoritmo de Ford-Fulkerson, encontrar el flujo máximo de una red.
Este algoritmo es un método iterativo, el cual, empieza con un flujo nulo y en cada iteración se va obteniendo un valor del flujo que va aumentando el camino, hasta que no se pueda aumentar más. Depende de tres puntos vitales:
* Red residual: camino de la fuente al sumidero, donde cada una de las aristas tiene un flujo residual mayor que cero. Siendo el flujo residual, el flujo que se puede obtener en una arista una vez que haya pasado un flujo por ella.
* Aumento de camino: se basa en ir aumentando el camino, hasta alcanzar el máximo (capacidad residual, definido anteriormente).
* Corte en redes de flujo: consiste simplemente en realizar una partición del conjunto de vértices en dos subconjuntos.

### Restricciones

Las restricciones de capacidad mencionadas son las siguientes:
* Los valores de flujo existentes en cada arista no pueden sobrepasar los valores máximos.
* La suma de las entradas de cada nodo interior tiene que ser igual a la suma de sus salidas.

### Características principales

* El flujo va a ser siempre positivo y con unidades enteras.
* El flujo que entra en un nodo es igual al que sale.
* El flujo que atraviesa un arco nunca será mayor que la capacidad, solo puede ser menor o igual que ella.