1. República Bolivariana de Venezuela
Ministerio del Poder Popular para la Defensa
Universidad Nacional Experimental Politécnica de la Fuerza Armada
UNEFA
Núcleo Portuguesa – Extensión Turen
TEORÍA DE GRAFOS
Autores:
Miguel Pérez
Vilmarys Castillo
Jesús Pérez
2. Red de flujo
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 ).
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.
Fuetes
Es un punto de partida del flujo total de una red dirigiéndose por los arcos.
Una Red de Transporte es una gráfica dirigida, simple, con pesos y que debe cumplir las
siguientes:
Poseer una fuente o vértice fijo que no tiene aristas de entrada.
Poseer un sumidero o vértice fijo que no tiene arista de salida
El peso Cij de la arista dirigida de i a j llamado capacidad de “ij” es un número no
negativo.
En otras palabras fuente es el punto de partida del recorrido, donde no posee ninguna
arista de salida, sino un grado de salida el cual será positivo y un grado de entrada que
se determina como nulo.
3. Sumidero
El sumidero es el punto de llegada o punto deseado el cual no posee ninguna
arista de salida y su grado de entrada será positivo ya que es donde llega el flujo que
viene de la fuente.
Problema de la ruta más corta
El problema de la ruta más corta consiste en encontrar un camino entre
dos vértices (o nodos) de tal manera que la suma de los pesos de las aristas que lo
constituyen es mínima. Un ejemplo de esto es encontrar el camino más rápido para ir de
una ciudad a otra en un mapa. En este caso, los vértices representarían las ciudades y las
aristas las carreteras que las unen, cuya ponderación viene dada por el tiempo que se
emplea en atravesarlas.
El problema de la ruta más corta puede ser definida para grafos no dirigidos, dirigidos o
mixtos. En el caso de grafos dirigidos la definición de camino requiere que los vértices
adyacentes estén conectados por una apropiada arista dirigida.
Dos vértices son adyacentes cuando poseen una arista común. Un camino en un grafo no
dirigido es una secuencia de vértices tal que todo vértice es adyacente con el vértice .
Un camino se dice que es de longitud si va desde hasta.
Sea la arista incidente con los vértices y. Dada una función de variable real ponderada y
un grafo no dirigido, el camino más corto desde hasta es el camino (donde y) sobre
todos los posibles que minimiza la suma Cuando cada arista en el grafo tiene un peso
unitario o, hallar el camino más corto es equivalente a encontrar el camino con menor
número de aristas.
4. Árbol de expansión
Un árbol de expansión (aristas azules gruesas) de un grafo de rejilla.
Un árbol de expansión, árbol generador o árbol recubierto T de un grafo conexo, no
dirigido G es un árbol compuesto por todos los vértices y algunas (quizá todas) de
las aristas de G. Informalmente, un árbol de expansión de G es una selección de aristas
de G que forman un árbol que cubre todos los vértices. Esto es, cada vértice está en el
árbol, pero no hay ciclos. Por otro lado, todos los puentes de G deben estar contenidos
en T.
Un árbol de expansión o árbol recubierto de un grafo conexo G puede ser también
definido como el mayor conjunto de aristas de G que no contiene ciclos, o como el mínimo
conjunto de aristas que conecta todos los vértices.
EJEMPLO
N= {1, 2, 3, 4, 5}
A= {(1,2),(1,3),(2,3),(2,5),(3,4),(3,5),(4,2),(4,5)}
Un árbol es una red conectada que puede consistir solo en un subconjunto de todos los
nodos en ella, donde no se permiten ciclos.
Un árbol de expansión es un árbol que enlaza todos los nodos de la red, también sin
permitir ciclos.
5. Algoritmo de flujo máximo
Tenemos el conocido problema de flujo máximo o máxima: ¿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.
Algoritmo de Ford-Fulkerson
El algoritmo de Ford-Fulkerson propone buscar caminos en los que se pueda aumentar el
flujo, hasta que se alcance el flujo máximo. La idea es encontrar una ruta de
penetración con un flujo positivo neto que una los nodos origen y destino.
Consideraremos las capacidades iniciales del arco que une el nodo i y el
nodo j como Cij y Cji. Estas capacidades iniciales irán variando a medida que avanza el
algoritmo, denominaremos capacidades residuales a las capacidades restantes del arco
una vez pasa algún flujo por él, las representaremos como cij y cji.
Para un nodo j que recibe el flujo del nodo i, definimos una clasificación [aj,i] donde aj es
el flujo del nodo i al nodo j.
Los pasos del algoritmo se definen como sigue:
Paso 1: Inicializamos las capacidades residuales a las capacidades iniciales,
hacemos (cij,cji)=(Cij,Cji) para todo arco de la red. Suponiendo el nodo 1 como el nodo
origen, hacemos a1=∞ y clasificamos el nodo origen con [∞,-]. Tomamos i=1 y vamos al
paso 2.
Paso 2: Determinamos Si como un conjunto que contendrá los nodos a los que podemos
acceder directamente desde i por medio de un arco con capacidad positiva, y que no
formen parte del camino en curso. Si contiene algún nodo vamos al paso 3, en el caso de
que el conjunto sea vacío saltamos al paso 4.
Paso 3: Obtenemos kЄSi como el nodo destino del arco de mayor capacidad que salga
de i hacia un nodo perteneciente a Si. Es decir, cik = max{cij} con jЄSi. Hacemos ak=cik y
clasificamos el nodo k con [ak,i]. Si k es igual al nodo destino o sumidero, entonces
hemos encontrado una ruta de penetración, vamos al paso 5. En caso contrario
continuamos con el camino, hacemos=k y volvemos al paso 2.
6. Paso 4 (retroceso): Si i=1, estamos en el nodo origen, y como Si es vacío, entonces no
podemos acceder a ningún nodo, ni encontrar algún nuevo camino, hemos terminado,
vamos al paso 6.
En caso contrario, i≠1, le damos al valor i el del nodo que se ha clasificado
inmediatamente antes, eliminamos i del conjunto Si actual y volvemos al paso 2.
Paso 5: Llegados a este paso tenemos un nuevo camino: Np={1,k1,k2,...,n}, esta será
la p-ésima ruta de penetración desde el nodo origen al nodo destino. El flujo máximo a lo
largo de esta ruta será la capacidad mínima de las capacidades residuales de los arcos
que forman el camino, es decir: fp=min{a1,ak1,ak2,...,an}.
La capacidad residual de cada arco a lo largo de la ruta de penetración se disminuye
por fp en dirección del flujo y se incrementa por fp en dirección inversa, es decir, para los
nodos i y j en la ruta, el flujo residual se cambia de la (cij,cji) actual a (cij-fp,cji+fp)si el flujo
es de i a j, o (cij+fp,cji-fp) si el flujo es de j a i
Inicializamos i=1 y volvemos al paso 2 para intentar una nueva ruta de penetración.
Paso 6 (solución): Una vez aquí, hemos determinado m rutas de penetración. El flujo
máximo en la red será la suma de los flujos máximos en cada ruta obtenida, es
decir: F=f1+f2+...+fm. Teniendo en cuenta que las capacidades residuales inicial y final
del arco (i, j) las dan (Cij,Cji) y (cij,cji) respectivamente, el flujo máximo para cada arco se
calcula como sigue: sea (α, β)=(Cij-cij, Cji-cji), si α>0, el flujo óptimo de i a j es α, de lo
contrario, si β>0, el flujo óptimo de j a i es β. Es imposible lograr que tanto αcomo β sean
positivas.
7. Corte Mínimo
Es un corte cuyo porte es mínimo, es decir, el corte mínimo en una red
corresponde a la capacidad mínima sobre los demás cortes de la red o si dicha capacidad
del corte posee un valor menor, es importante acotar que este córtenos muestra la
mínima capacidad del corte efectuado en un grafo. Los cortes mínimos serán
aquellos cortes cuyo valor de la capacidad coincida con el valor del flujo en este
último paso. Este teorema del corte mínimo se establece como sigue: Sea F un flujo en G
y sea (P, P) un corte en G si la igualdad se cumple entonc es el flujo es máximo y el
corte es mínimo si y solo si se cumple lo siguiente:
1) FIJ =CI J para I ЄP, J Є P
2) Fij=0 para i Є P, J Є P
Una nota importante es que el valor del flujo máximo de una red es igual a la capacidad
del corte mínimo que se puede aplicar a la red. Por consiguiente el corte mínimo se
obtiene por medio del algoritmo anterior.
Capacidad de flujo
Esta la definimos como la cantidad de flujo que entra en la fuente (nodo) y sale por el
nodo (destino).
Capacidad residual
Es la capacidad adicional de flujo que un arco puede llevar:
Dada una red de flujo máximo, plantee la red residual asocia.
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.
8. 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.