You are on page 1of 41

PROBLEMAS

de
FLUJO en REDES

PROBLEMAS DE FLUJO EN REDES.


Introducción.

Los problemas de redes surgen en una gran variedad de situaciones. Así las
redes de transporte, eléctricas y de comunicaciones predominan en nuestra vida diaria.
La representación se utiliza ampliamente en áreas tan diversas como producción,
distribución, planificación de proyectos, localización de instalaciones, administración
de recursos, planificación financiera, por nombrar sólo algunos ejemplos. Se puede
decir que los modelos de redes consiguen un gran éxito rotundo en la solución de
problemas del mundo real, ya que no en vano, según algunos estudios recientes indican
que el 70% de los problemas de programación matemática reales pueden tratarse como
redes o como problemas relacionados con redes.

En concreto, los problemas de transporte, asignación y de transbordo, así como


otros , como veremos posteriormente, son también casos particulares del problema de
flujo con coste mínimo, que es un problema general de redes, tienen un algoritmo
propio debido a las estructuras especiales de los mismos, debido a que son más
eficientes, no sólo ya respecto del método simplex general (al tratarse todos ellos de
problemas de programación lineal), sino también respecto al citado algoritmo del
problema de flujo con coste mínimo (del que son casos particulares).

La importancia de considerar el problema general de redes, es que debido a la


estructura especial, permite la simplificación del procedimiento simplex general hasta el
punto en el que se puede aplicar directamente a la red sin necesidad de un tabló
simplex.

Se van a presentar las bases de la metodología de redes, teniendo en cuenta para


ello los conceptos ya contemplados en el problema de transporte. Sin embargo, se dará
una introducción a cinco tipos importantes de problemas de redes y algunas ideas
básicas sobre cómo resolverlos. Los tres primeros tipos de problemas, el problema de la
ruta más corta, el problema del árbol de mínima expansión (o también llamado
problema de recorrido mínimo) y el problema del flujo máximo, tienen una estructura
específica que surge con frecuencia en la práctica.

El cuarto tipo, el problema de flujo de costo mínimo, proporciona un enfoque


unificador de muchas otras aplicaciones por su estructura mucho más general. De
hecho, esta estructura es tan general que incluye como casos especiales los problemas
de transporte, asignación, transbordo (ya vistos), el problema de la ruta más corta y el
problema de flujo máximo. Este cuarto tipo, es decir, el problema más general de flujo
de costo mínimo se va estudiar detenidamente, que aunque se puede resolver por el
método simplex general al ser un problema de programación lineal, sin embargo debido
a su estructura especial, se resolverá en forma más eficiente mediante una versión
simplificada del citado método simplex, llamada método simplex de redes.

La planificación y control de proyectos es el último tipo de problemas que se


resuelve por medio de las técnicas de redes, en especial el PERT ("Program Evaluation
and Review Technique" o técnica de evaluación y revisión de programas) y el CPM
("Critical Path Method" o método de la ruta crítica). Aunque limitados a su área de
aplicación el PERT y el CPM han sido (y probablemente seguirán siendo) las técnicas
más ampliamente usadas en investigación de operaciones.

Se va proponer un ejemplo prototipo, que servirá para ilustrar los fundamentos


de los tres primeros tipos de problemas, así como la descripción de la terminología

2
básica para redes, que en parte ya ha sido definida anteriormente en el problema de
transporte.

Ejemplo prototipo.

Se trata de un parque que tiene una serie de paseos y campamentos, en donde no


se permite la entrada de automóviles, pero existe un sistema de caminos angostos para
autobuses y vehículos todo terreno conducidos por los guardabosques. En la figura
siguiente se muestra este sistema de caminos (sin curvas), en donde O es la entrada al
parque; las otras letras representan la localización de las casetas de los guardabosques (y
otras instalaciones de servicio), y donde los números representan las distancias en
kilómetros de estos caminos sinuosos.

A
2 7 5 T
2
5 4
O B D
1 7
3 1
4
C E
4

El parque tiene un mirador a un hermoso paisaje en la estación T. Unos cuantos


autobuses transportan a los visitantes desde la entrada a la estación T y de regreso.

En el momento actual, el administrador del parque se enfrenta a tres problemas.


Uno consiste en determinar qué ruta, desde la entrada del parque a la estación T, es la
que tiene la distancia total más corta para la circulación de los autobuses. (Este es un
ejemplo del problema de la ruta más corta que se presentará).

El segundo problema reside en que deben de instalarse líneas telefónicas


subterráneas para establecer comunicación entre todas las estaciones (inclusive la
entrada). Como la instalación es cara y además perturba la ecología, se instalarán líneas
que siguen sólo los caminos necesarios para obtener comunicación entre cualquier par
de estaciones. La pregunta es por dónde deben tenderse las líneas para lograr esto con el
mínimo número total de kilómetros de cable instalado. ( Este es un ejemplo del
problema del árbol de mínima expansión o también llamado problema de recorrido
mínimo que se presentará).

3
El tercer problema es que durante la temporada alta, hay más personas que
quieran tomar el autobús a la estación T de las que se pueden acomodar. Para evitar la
perturbación indebida de la ecología y de la vida silvestre de la región, se ha impuesto
un racionamiento estricto en el número de viajes al día que pueden hacer los autobuses
en cada camino. (Estos límites difieren de un camino a otro, como veremos
posteriormente). Así, durante la temporada alta, se pueden seguir varias rutas sin tomar
en cuenta la distancia, para aumentar el número de viajes diarios de los autobuses. La
pregunta es cómo planificar las rutas para los distintos viajes, de manera que se
máximice el número total de viajes que se pueden hacer cada día, sin violar los límites
individuales impuestos sobre cada camino. ( Este es un ejemplo del problema del flujo
máximo que se presentará).

Terminología de redes.

Antes de comenzar a describir los problemas anteriores, es necesario, describir


la terminología existente de redes, que se pasa a definir.

Una gráfica consiste de un conjunto de puntos y un conjunto de líneas que unen


ciertos pares de puntos. Los puntos se llaman nodos ( ó vértices); por ejemplo, la red de
la figura anterior tiene 7 nodos representados por círculos. Las líneas se llaman arcos (o
ligaduras, aristas o ramas); por ejemplo la figura anterior tiene 12 arcos que
corresponden a los 12 caminos del parque.

Los arcos de una red pueden tener un flujo de algún tipo que pasa por ellos, por
ejemplo, el flujo de autobuses sobre los caminos del parque. Si el flujo a través de un
arco se permite sólo en un sentido (como si se tratase de una calle en un sentido), se
dice que el arco es un arco dirigido. Existen diferente anotaciones para indicar el
sentido de un arco, pero que todas ellas indican el sentido del primer nodo hacia el
segundo nodo. Así por ejemplo si tenemos letras en los nodos, AB ó A→B, indica que
el flujo es del nodo A hacia el nodo B (y viceversa, BA ó B→A, sería de B hacia A).
Sin embargo, en general, los nodos se representan por números diferentes, donde la
representación del arco (i, j), indica que el arco es dirigido del nodo i al nodo j, y que
en la gráfica se indica mediante una flecha al final del arco o línea que une ambos
nodos del arco. Al arco dirigido (i,j) se le suele llamar también arco incidente con los
nodos i y j ( nótese que el arco ( j,i) indicaría el sentido contrario del anterior, es decir,
de j hacia i ). En el caso de que el flujo en un arco esté permitido en ambos sentidos
(como en calles de dos sentidos), se dice que el arco es un arco no dirigido. Este caso,
el arco sobre la gráfica se puede indicar con dos flechas, una hacia cada nodo del arco,
o bien simplemente con sólo la línea que une los nodos del arco, de ahí que se
denomine como ligadura a un arco cuando no es dirigido.

Entonces, una red que sólo tiene arcos dirigidos se llama red dirigida. De igual
manera, si todos sus arcos son no dirigidos, se dice que se trata de una red no dirigida.
Una red con una mezcla de arcos dirigidos y no dirigidos ( o incluso una con todos sus
arcos no dirigidos) se puede convertir en una red dirigida, si se desea, sustituyendo
cada arco no dirigido por un par de arcos dirigidos en sentidos opuestas. En resumen, se
puede definir una red dirigida G, como la formada por un conjunto finito de nodos
(puntos) N = {1,...m } y un conjunto de arcos dirigidos (líneas) S = {(i,j), (f,k), ..(r,s) }.

4
Cabe preguntarse ahora que ocurre cuando dos nodos no están unidos
directamente mediante un arco. La respuesta es que dichos nodos pueden estar unidos
por un conjunto de arcos distintos correspondientes a otros nodos que si tienen un arco
con ellos. Esta consideración nos lleva a establecer los conceptos siguientes.

Una trayectoria ( del nodo io al nodo ip ) es una sucesión de arcos P = {(io,i1),


(i1,i2), ..(ip-1,ip) } en los que el nodo inicial de cada arco es el mismo que el nodo
terminal del arco que le precede en la sucesión. Así cada arco en la trayectoria está
dirigido "hacia ip" y "hacia afuera de io ".

Una cadena es una estructura similar a una trayectoria excepto que no todos los
arcos están necesariamente dirigidos hacia el nodo ip .

Un circuito es una trayectoria en la que io = ip . Por lo tanto, un circuito es una


trayectoria cerrada.

5
Un ciclo es una cadena cerrada. Estos conceptos se reflejan en la siguiente figura:

2 2

1 4 1 4

3 3

a)una trayectoria b) una cadena

2
2

1 4
1 4

3
3

d) un ciclo
c)un circuito

1 4

e)un árbol

Se puede decir también, que una trayectoria es una cadena, pero no

6
recíprocamente, o que cada circuito es un ciclo, pero no inversamente. También se
puede decir que una red dirigida G, es conexa si existe una cadena de cada nodo de G a
cualquier otro nodo de G.

Un árbol de expansión es un árbol que incluye a todos los nodos de la gráfica.


Como se puede observar en la figura e anterior, se ilustra un árbol de expansión;
asimismo las figuras a y b también son árboles de expansión, mientras que las figuras c
y d no son árboles. Como se verá posteriormente, un árbol de expansión está formado
por una red conexa para los n nodos que no contiene ciclos no dirigidos, y que tiene
exactamente (n-1) arcos, ya que este es el mínimo número de arcos necesarios para tener
una red conexa y el máximo número posible para que no haya ciclos no dirigidos. Como
se observará, los árboles juegan un papel clave en el análisis de muchas redes, ya que
por ejemplo, forman la base del problema del árbol de mínima expansión, o también,
que los árboles de expansión (factibles) corresponden a las soluciones básicas factibles
en el método simplex de redes, para resolver el problema de flujo de costo mínimo, que
se tratará posteriormente.

Será necesario introducir también la terminología adicional sobre los flujos en


redes. La cantidad máxima de flujo que puede circular en un arco dirigido se conoce
como capacidad del arco (o sea uij ) Entre los nodos, se pueden distinguir aquellos que
son generadores de flujo, absorbedores netos o ninguno de los dos. Un nodo fuente (o
nodo origen) tiene la propiedad de que el flujo que sale del nodo excede el flujo que
entra a él. El caso inverso es un nodo demanda (o nodo destino), en el que el flujo que
llega excede del que sale del nodo. Un nodo de transbordo ( o nodo intermedio)
satisface la conservación del flujo, así el flujo que entra es igual al que sale.

Por último, a la cantidad de flujo que circulará por cada arco (i,j) se le
denominará por xij (variable), mientras que el costo unitario de cada una de las variables
por cij .

Una vez descrito los conceptos básicos para poder desarrollar la teoría de redes
(aunque existen más conceptos que si son necesarios se describirán en su momento), se
pasa a exponer ya los diferentes problemas propuestos anteriormente.

El problema de la ruta más corta.

Considérese una red conexa y no dirigida con dos nodos especiales llamados
origen y destino. A cada una de las ligaduras (arcos no dirigidos) se asocia una
distancia no negativa. El objetivo es encontrar la ruta más corta (es decir, la trayectoria
con la mínima distancia total) que va desde el origen al destino.

Vamos a describir un algoritmo que nos permite obtener la ruta má corta,


utilizamos para ello diferentes ejemplos ilustrativos.
Algoritmo de Dijkstra.

Para el problema de la ruta más corta o también denominado problema del


camino mínimo, es decir, el camino de longitud mínima entre un nodo origen y otro de
destino de la red, vamos a exponer el algorítmo de Dijkstra, que es muy eficiente y
válido tanto para redes dirigidas o no dirigidas, que permite determinar los caminos de
longitud mínima de un nodo origen a “todos” los nodos de una red. Se obtiene una

7
variante del algoritmo de Dijkstra asociando a los arcos de la red alturas en vez de
distancias, lo que permite determinar los caminos de mínima altura.
Para la exposición del citado algoritmo, lo efectuaremos a través de diferentes
ejercicios:

1. Camino de longitud mínima (o ruta más corta entre dos puntos de la red).
La red no dirigida de la figura representa un sistema de carreteras entre
ciudades de una región.

12 8
2 5 8
7
6 9
18 12
9
11 5 6
1 3 6 9 11
7
13 12 8
5 14
15
4
4 7 10

Se desea determinar el camino más corto de la ciudad 1 a la 11:

Solución:

A) Mediante la aplicación del algoritmo de Dijkstra.

El algoritmo consiste en determinar etiquetas ( que expresan distancias) en cada


nodo, las cuales son consideras inicialmente temporales, pero cuando se hacen
permanentes ya no varían su valor.
Se comienza asignando etiqueta permanente igual a 0 al nodo origen (1), ( es
decir, e(1)=0) y etiquetas temporales e(j) iguales a la distancia respectiva directa d 1j
para los restantes nodos j=2,….,11. Estas se recogen en la tabla:

Iteración Nodos j
i 2 3 4 5 6 7 8 9 10 11 mínimo
0 6 ∞ 5 ∞ ∞ ∞ ∞ ∞ ∞ ∞ 4

La menor etiqueta temporal, e(4)=5, pasa a permanente y no vuelve a considerarse, ya


que ésa es la distancia mínima del nodo origen al nodo 4. A continuación se actualiza
las etiquetas temporales de los nodos j que no hayan recibido aún etiqueta permanente
según la fórmula siguiente:

8
A  U  D d n   l eti ies l m t r na i ao no r c d i o
      
e = e m( e ;+tjq t )i   ie qu n q t ue i u mq e pe tu tao ea s t o a
t  p e  p em   a e r l r mp m j o a r a n a n e l e n
 
Así,

e(2) = min{6;5+∞} = 6 e(8) = min{∞;5+∞} = ∞


e(3) = min{∞;5+13} = 18 e(9) = min{∞;5+∞} = ∞
e(10) = min{∞;5+∞} = ∞
e(5) = min{∞;5+∞} = ∞ e(11) = min{∞;5+∞} = ∞
e(6) = min{∞;5+15} = 20

(nota: obsérvese que la distancia entre dos nodos que no están conectados directamente,
se toma como su valor ∞)

lo que lleva a la tabla siguiente:

Iteración Nodos j
i 2 3 4 5 6 7 8 9 10 11 mínimo
0 6 ∞ 5 ∞ ∞ ∞ ∞ ∞ ∞ ∞ 4
1 6 18 - ∞ ∞ 20 ∞ ∞ ∞ ∞ 2

9
La menor etiqueta temporal corresponde al valor 6 del nodo 2, que pasa a permanente,
marcada en negrita, y no vuelve a considerarse. Se actualizan ahora las etiquetas
temporales de los restantes nodos, iteración 2,donde ahora la última etiqueta
permanente es la 2ª, y se reitera el procedimiento hasta que se asigna como etiqueta
permanente al nodo destino. Después de nueve iteraciones se obtiene la tabla final
siguiente:

Iteración Nodos j
i 2 3 4 5 6 7 8 9 10 11 mínimo
0 6 ∞ 5 ∞ ∞ ∞ ∞ ∞ ∞ ∞ 4
1 6 18 - ∞ ∞ 20 ∞ ∞ ∞ ∞ 2
2 - 18 - 18 ∞ 20 ∞ ∞ ∞ ∞ 3
3 - - - 18 29 20 ∞ ∞ ∞ ∞ 5
4 - - - - 27 20 26 27 ∞ ∞ 7
5 - - - - 27 - 26 27 24 ∞ 10
6 - - - - 27 - 26 27 - 38 8
7 - - - - 27 - - 27 - 33 6
8 - - - - - - - 27 - 33 9
9 - - - - - - - - - 33 11
E(J) 6 18 5 18 27 20 26 27 24 33

que contiene la fila E(j) de etiquetas permanentes de cada nodo y constituyen las
distancias mínimas del nodo origen a cada nodo j de la red. En particular, como E(11)=
33, ésta es la distancia mínima buscada. Falta determinar el camino asociado a esta
longitud mínima. Para ello, se parte del nodo destino y se va formando hacia atrás el
camino de arcos que cumplen la condición de que la diferencia entre sus etiquetas
permanentes sea igual a la longitud del arco (arista) que los une. Así, se tienen

E(11)-E(8) = 33 - 26 = 7 = d8,11
E(8)-E(5) = 26 - 18 = 8 = d58
E(5)-E(2) = 18 - 6 = 12 = d25
E(2)-E(1) = 6 - 0 = 6 = d12

La siguiente figura muestra el camino mínimo y los etiquetados permanentes al


lado de cada nodo permitiendo comprobar fácilmente la rutina anterior.
6 18 26
12 8
2 5 8
7
6 9
18 12
9
27 27
11 5 6
0 1 18 3 6 9 11 33
7
13 12 8
5 14
15
4
4 7 10
5 20 24

El camino mínimo anterior es 1 2 5 8 11

10
Se puede observar que existe un camino mínimo alternativo determinado por
1 2 5 9 11

2. Camino más corto de una localidad a otras. La figura siguiente representa el


sistema de carreteras entre las diferentes localidades de una isla, con distancias en
km.
11 1 3
3 14 18
6 2 4
4
4
2 2 5

6 7 3
10
5
7
3
Se desea:
a) Determinar los caminos mínimos de la localidad 1 a las restantes
localidades. Resolverlo utilizando el algoritmo de Dajkstra.
b) Idem, pero suponiendo que los arcos de la red son aristas.
c) Determinar en b) el camino mínimo de la localidad 1 a un punto x situado a
2.5 km de 3 en la carretera de 3 a 6, Idem, si x estuviera a 3.5 km de 3.

Solución:
a) Aplicando el algoritmo de Dijkstra, se designa con e(j) la etiqueta temporal del nodo
j. Se comienza asignando al origen (1) etiqueta permanente igual a 0, ya al resto de
nodos j, etiquetas temporales iguales a la distancia directa del nodo 1 a j. Estas
vienen dadas por

e (2) = 6, e (3) = 11, e (4) = 3, e (5) = ∞, e (6) = 14, e (7) = 18.

La menor, que corresponde al nodo 4, pasa a permanente y no se volverá a considerar,


ya que representa su distancia mínima desde el origen. Actualizamos las etiquetas
temporales que no hayan pasado a permanentes

e (2) = min { 6, 3+2 } = 5


e (3) = min { 11, 3+∞} = 11
e (5) = min { ∞, 3+3 } = 6
e (6) = min { 14, 3+∞ } = 14
e (7) = min { 18, 3+∞ } = 18

La menor vale 5 y corresponde al nodo 2. Esta pasa a ser permanente y no se volverá a


considerar. De nuevo, actualizamos las etiquetas temporales, teniendo

e (3) = 9, e (5) = 6, e (6) = 14, e (7) = 18

siendo la menor 6, que corresponde al nodo 5. Reiterando el procedimiento hasta


conseguir que todas las etiquetas sean permanentes, se obtiene en la siguiente tabla las
etiquetas temporales y permanentes (en negrita), de los nodos de la red.

11
Iteración Nodos j
i 2 3 4 5 6 7 mínimo
0 6 11 3 ∞ 14 18 4
1 5 11 - 6 14 18 2
2 - 9 - 6 14 18 5
3 - 8 - - 14 18 3
4 - - - - 12 18 6
5 - - - - - 15 7
E(j) 5 8 3 6 12 15

La fila E(j) contiene las etiquetas permanentes de cada nodo y, por tanto, las distancias
mínimas del nodo origen a cada nodo j de la red. Para determinar el camino mínimo del
nodo origen a los restantes nudos, se parte de cada uno de los nodos destinos y se forma
los respectivos caminos con arcos que cumplen la condición de que la diferencia entre
sus etiquetas permanentes sea igual a la longitud del arco que los une. Así, para el nodo
7 se tiene

E(7)- E(6) = 15 -12 = 3 = d67


E(6)- E(3) = 12 -8 = 6 = d36
E(3)- E(5) = 8 -6 = 2 = d53
E(5)- E(4) = 6 -3 = 3 = d45
E(4)- E(1) = 3 -0 = 3 = d41

Se ha obtenido el camino mínimo 1 4 5 3 6 7 , que


proporciona, además, los caminos mínimos a todas las localidades excepto a la 2. Para
determinar éste, se repite el proceso anterior partiendo de 2.

E(2)- E(4) = 5 -3 = 2 = d42


E(4)- E(1) = 3 -0 = 3 = d14

que proporciona el camino 1 4 2 . Resumiendo, los caminos mínimos


desde 1 a cada nodo son

1 4 2 1 4 5 3

1 4 1 4 5

1 4 5 3 6 1 4 5 3 6 7

En la figura siguiente se muestra el árbol de caminos mínimos, en negrita, y al lado de


cada nodo aparece su etiqueta permanente ( distancia mínima de cada nodo al nodo 1).

12
0
8
3 3
1
3
4
2
4
2 5 2
12 6 6
3 15
5
7
3

b) Para la misma red, pero suponiéndola con aristas en vez de arcos, la aplicación del
algoritmo de Dijkstra conduce a la tabla siguiente

Iteración Nodos j
i 2 3 4 5 6 7 mínimo
0 6 11 3 ∞ 14 18 4
1 5 11 - 6 14 18 2
2 - 9 - 6 14 18 5
3 - 8 - - 13 16 3
4 - - - - 12 8 7
5 - - - - 11 - 6
E(j) 5 8 3 6 11 8

Los caminos mínimos desde el origen a cada nodo de la red son

1 4 2 1 4 5 3

1 4 1 4 5

1 4 7 6 1 4 7

El correspondiente árbol de caminos mínimos es


0
3
8 1
3 3
4
2
2
5 2 5
11 6 6
3
5
7 8
3

13
c) Para la red no dirigida, se ha obtenido las etiquetas permanentes E(3) = 8 y E(6) =
11. Evidentemente un punto x situado a 2.5 km de la localidad 3 estará a 1.5 km de
la 6. Entonces, como

E(3) + 2.5 = 10,5 < 12.5 = E(6) + 1.5

la distancia mínima del nodo origen a x será 10,5 km, siendo el camino mínimo
1 4 5 3 x
Si ahora x estuviera a 3.5 km de la localidad 3, x estará a 0.5 km de 6 y, por tanto
E(3) + 3.5 = 11.5 = E(6) + 0.5
siendo los caminos 1 4 5 3 x ,y
1 4 7 6 x de igual longitud, 11.5 km.

3. Caminos de mínima altura. En la siguiente red los números representan máximas


alturas de montañas que se deben atravesar entre pares de localidades:

11 1 3
3 14 18
6 2 4
4
4
2 2 5

6 7 3
10
5
7
3

Se pide determinar los camino de mínima altura de la localidad 1 a las restantes


localidades.

Solución:
Se desea determinar el camino desde el nodo 1 a cada uno de los restantes nodos, de
modo que la máxima altura sea la menor posible. Formalmente, la altura de cualquier
ruta será el máximo de los números de esa ruta. El problema es similar al considerado
en el problema del camino mínimo, salvo que aquí, para la actualización de las etiquetas
temporales, se reemplaza la suma de pares de números por el máximo.
El algoritmo comienza asignando etiqueta permanente igual a 0 al nodo origen
(1) y el resto de nodos j, etiquetas temporales iguales a la altura máxima entre el nodo
1 y el j, es decir

e(2) = 6, e(3) =11, e(4) = 3, e(5) = ∞, e(6) = 14, e(7) = 18.

La menor, que corresponde al nodo 4, pasa a permanente y no se volverá a considerar,


ya que representa la altura mínima desde el origen. A continuación se actualizan las
etiquetas temporales que no hayan pasado a permanentes

e(2) = min {6, max {3, 2}} = 3


e(3) = min {11, max {3, ∞}} = 11

14
e(5) = min {∞, max {3, 3}} = 3
e(6) = min {14, max {3, ∞}} = 14
e(7) = min {18, max {3, ∞}} = 18

siendo la menor 3, que corresponde a los nodos 2 y 5. Se rompe el empate de forma


arbitraria ,tomando el 2, su etiqueta se pasa a permanente y no volverá a considerar. De
nuevo, se actualizan las restantes etiquetas temporales

e(3) =4, e(5) = 3, e(6) = 14, e(7) = 18.

Siendo la menor 3, que corresponde al nodo 5. Reiterando el procedimiento, se obtiene


la siguiente tabla donde se resumen las etiquetas temporales y permanente, en negrita,
de los nodos

Iteración Nodos j
i 2 3 4 5 6 7 mínimo
0 6 11 3 ∞ 14 18 4
1 3 11 - 3 14 18 2
2 - 4 - 3 14 18 5
3 - 3 - - 14 10 3
4 - - - - 4 10 6
5 - - - - - 4 7
E(j) 3 3 3 3 4 4

La fila E(j) contiene las etiquetas permanentes de cada nodo y, por tanto, las mínimas
alturas máximas del nodo origen a cada nodo j de la red. Para determinar el camino de
mínima altura del nodo origen a los restantes nodos, se parte de cada uno de los nodos
destino y se forman hacia atrás los respectivos caminos con arcos que cumplen la
condición de que la etiqueta permanente del nodo del extremo inicial del arco y su
medida sean menores o iguales que la etiqueta permanente del extremo final. Aplicando
este procedimiento obtenemos el árbol de alturas mínimas que se muestra en la figura y
que también contiene la etiqueta permanente de cada nodo (en negrita).

0
3
3 3
1
3
4
2
4
2 3 2
4 6 3
3 4
5
7
3

15
Otras aplicaciones

Antes de concluir la presentación del problema de la ruta más corta, es necesario


hacer hincapié en un punto. Hasta aquí, se ha descrito el problema en términos de
minimizar la distancia de un origen a un destino. Sin embargo, en realidad el problema
de redes que se estudia es el encontrar cuál es la ruta que conecta a dos nodos
específicos que minimiza la suma de los valores de las ligaduras sobre esta ruta. Por
ejemplo, las ramas pueden corresponder a actividades de algún tipo y los valores
asociados a cada una pueden representar el costo de esa actividad. Entonces, el
problema sería encontrar qué secuencia de actividades logra el objetivo específico de
minimizar el costo total relacionado. Otra posibilidad consiste en que el valor asociado
a cada ligadura sea el tiempo requerido en realizar esa actividad. En este caso se
desearía encontrar la secuencia de actividades que logra el objetivo específico de
minimizar el tiempo total requerido. Así, algunas de las aplicaciones más importantes
del problema de la ruta más corta nada tienen que ver con caminos en el sentido literal
de la palabra.

Otra versión del problema de la ruta más corta es encontrar las rutas más cortas
del origen a todos demás nodos. Nótese que el algoritmo obtiene las rutas más cortas a
cada nodo que está más cerca del origen que del destino. Entonces, si todos los nodos
son destinos potenciales, la única modificación que se necesita es que el algoritmo no se
detenga, hasta que todos los nodos se hayan resuelto.

Otra versión aún más general del problema de la ruta más corta es encontrar la
ruta más corta desde todos los nodos a todos los demás nodos. Otra opción es eliminar
la restricción de que las "distancias" (valores de los arcos) sean no negativas. Se pueden
poner también restricciones sobre las trayectorias que se pueden seguir. Todas estas
variaciones surgen en ocasiones en la práctica y por esto han sido estudiadas por los
investigadores.

Los algoritmos para una gran variedad de problemas de optimización de análisis


combinatorio- como los problemas de diseño de rutas de vehículos- con frecuencia
utilizan como parte de sus subrutinas, la solución de un gran número de problemas de la
ruta más corta. Puede decirse, que tal vez esta aplicación sea una de las más importantes
de este algoritmo.
Algoritmo de Kruskal.
Este algoritmo permite determinar el árbol de máximo alcance, o también llamado
problema de recorrido mínimo, es decir, el recorrido mínimo que permite comunicar a
todos los nodos de una red.
Se explicará el algoritmo a través de ejemplos de aplicación.

1. Arbol de máximo alcance. Determinar el árbol de máximo alcance para la


siguiente red de distribución en la que los números sobre las aristas representan
distancias.
2 7
9
5 5 8
5
1 11
4
3 7
18
4
16 5
6
3
a)Resolverlo utilizando el algoritmo de Kruskal, con el método gráfico.
b) Idem pero con el método tabular.

Solución:

a)Se consideran inicialmente el conjunto de nodos de la red que suponemos no


conectados o aislado y denominamos U = {1, 2, 3, 4, 5, 7}. Denotamos con C el
conjunto de nodos conectados, que inicialmente es vacio. Comenzamos tomando
arbitrariamente cualquier nodo de U, por ejemplo, el nodo 1, y lo incluimos dentro del
conjunto C excluyéndolo de U, es decir, C = {1} y U = {2, 3, 4, 5, 6, 7}. El nodo no
conectado más próximo a 1 es el 2, con distancia 9. Por tanto, actualizamos el conjunto
de nodos conectados a C = {1, 2} y el de no conectados a U = {3, 4, 5, 6, 7}. La figura
muestra estas dos primeras iteraciones

9 2
5

1
4
7

6
3
Reiterando el procedimiento llegamos, en siete iteraciones, a determinar el árbol de
máximo alcance cuya longitud L* = 31. La tabla siguiente recoge las iteraciones del
algoritmo

Conjunto Longitud L Par de


de nodos de la arista nodos
Iteración conectado elegida conectados
0 φ - -
1 {1} 0 -
2 {1, 2} 9 1-2
3 {1, 2, 4} 5 2-4
4 {1, 2, 4, 5} 5 4-5
5 {1, 2, 4, 5, 6} 3 5-6
6 {1, 2, 4, 5, 6, 7} 4 6-7

17
7 {1, 2, 3, 4, 5, 6, 7} 5 6-3
Σ = 31

El árbol de máximo alcance es

9 2
5 5
5
1
4
3 7

4
5
6
3

b) Para implementar el algoritmo en formato tabular, construimos la tabla de distancias


entre dos nodos, dejando vacías las posiciones de pares de nodos no conectados
mediante una arista.

Desde el Hasta el nodo


nodo 1 2 3 4 5 6 7
1 9 18 11
2 9 5 7
3 18 5
4 11 5 5
5 7 5 3 8
6 5 3 4
7 8 4

Elegimos arbitrariamente un nodo, por ejemplo 1, que incluimos dentro del conjunto de
nodos conectados, y lo indicamos marcando su fila ( ). Tachamos su columna y
determinamos el menor valor de la fila del nodo 1, que corresponde al valor 9 bajo la
columna del nodo 2. Marcamos el valor 9, negrita, y aparecen así conectados los nodos
1 y 2.

2 3 4 5 6 7
1 9 18 11
2 5 7
3 5
4 5 5
5 7 5 3 8
6 5 3 4
7 8 4

Tachamos a continuación la columna del nodo 2 y marcamos su fila. De nuevo, para la


tabla reducida en las columnas de los nodos 1y 2, determinamos el menor valor en
alguna de las filas marcadas. Corresponde al 5, negrita, de la columna 4.

18
3 4 5 6 7
1 18 11
2 5 7
3 5
4 5
5 5 3 8
6 5 3 4
7 8 4

Marcamos la fila del nodo 4 y prescindimos de su columna, quedando ahora conectados


los nodos 2 y 4.

3 5 6 7
1 18
2 7
3 5
4 5
5 3 8
6 5 3 4
7 8 4

De nuevo, para la tabla reducida de los nodos 1, 2 y 4, determinamos el menor valor en


alguna de la filas marcadas. Corresponde al 5, negrita, de la columna de nodo 5.
Marcamos la fila del nodo 5 y prescindimos de su columna, quedando ahora conectados
los nodos 4 y 5. Reiteramos el procedimiento y en siete iteraciones llegamos a la tabla
final

1 2 3 4 5 6 7
1 9 18 11
2 9 5 7
3 18 5
4 11 5 5
5 7 5 3 8
6 5 3 4
7 8 4

El coste total es C* = 9+5+5+3+5+4 = 31 y de la lectura a lo largo de las filas de la tabla


deducimos que conectamos (1,2), (2,4), (4,5), (5,6), (6,3) y (6,7).

2. Interconexión de nodos. Se desea comunicar mediante fibra óptica ocho centros de


investigación. El coste del sistema es función lineal de la longitud de la línea
tendida. La tabla siguiente recoge las distancias entre los centros.

Hasta
Desde 1 2 3 4 5 6 7 8

19
1 - 28 26 41 30 17 19 52
2 28 - 21 17 26 31 18 40
3 26 21 - 27 21 25 26 18
4 41 17 27 - 15 52 36 61
5 30 26 21 15 - 70 81 77
6 17 31 25 52 70 - 66 69
7 19 18 26 36 81 66 - 12
8 52 40 18 61 77 69 12 -

S desea tender la línea de manera que haya una conexión con cada centro, pero sin
ciclos. ¿Cuál es el tendido de línea entre los centros más económico?

Solución
Aplicamos el algoritmo de Kruskal, partiendo del nodo 1. La tabla muestra las
iteraciones del método

Conjunto Longitud L Par de


de nodos del arco nodos
Iter. conectados elegido conectados
0 φ - -
1 {1} 0 -
2 {1, 6} 17 1-6
3 {1, 6, 7} 19 1-7
4 {1, 6, 7, 8} 12 7-8
5 {1, 2, 6, 7, 8} 18 7-2
6 {1, 2, 4, 6, 7, 8} 17 2-4
7 {1, 2, 4,5 6, 7, 8} 15 4-5
8 {1, 2, 3,4,5 6, 7, 8} 18 8-3
∑ = 116
El árbol de máximo alcance tiene una longitud 116 y las conexiones entre pares de
centros son

Del centro Al centro distancia Del centro Al centro Distancia


1 6 17 2 4 17
1 7 19 4 5 15
7 8 12 8 3 18
7 2 18

El problema del flujo máximo.

Recuérdese que el tercer problema que debe de resolver el administrador del


parque, durante la temporada alta es determinar las rutas de algunos viajes de autobús

20
desde la entrada del parque ( nodo O) al mirador ( nodo T), de manera que el número
de viajes diarios sea máximo.(Cada autobús regresará por la misma ruta que tomó de
ida, por lo que el análisis se hará sólo sobre los viajes de ida). Los límites superiores
impuestos estrictos sobre el número de viajes de ida permitidos en cada dirección para
cada ruta individual, se reflejan en la siguiente figura:

3
0 A 0
1 T
5 0 9
1 0
7 0 4 0
O B D
2
4 5 1
0 1
0
0 C E 6
4 0

Como se observa los números próximos a los nodos (estaciones) indican el


límite máximo permitido desde el nodo hasta el próximo según el camino indicado. Así
por ejemplo, se permite un solo viaje al día desde la estación A a la estación B, pero
también un solo viaje al día desde la estación B hacia la estación A. Ahora teniendo en
cuenta los límites superiores se puede obtener, por ejemplo, una solución factible que
consiste en mandar 7 autobuses al día, 5 por la ruta O→B→E→T , 1 por la ruta
O→B→C→E→T y 1 por la ruta O→B→C→E→D→T . Sin embargo es susceptible
mejorar la solución anterior, considerando muchas combinaciones o rutas (y el número
de viajes asignados a cada una) para encontrar la o las que maximicen el número de
viajes al día. Este tipo de problemas se conoce como el problema del flujo máximo.

Pasemos a exponer formalmente el problema del flujo máximo. Considérese una


red dirigida y conexa que tiene un solo nodo origen y sólo un nodo destino, y el resto
son nodos de transbordo. Luego dada la capacidad en los arcos, el objetivo es
determinar el patrón factible que fluye a través de la red que maximiza el flujo total ,
desde el nodo origen al nodo destino.

Para que el problema propuesto del parque se ajuste al formato de red dirigida,
cada ligadura de la figura anterior con 0 en un punto terminal se sustituirá por un arco
dirigido en la dirección factible. Por ejemplo, la ligadura entre los nodos O y B se
sustituye por un arco dirigido del nodo O al nodo B con una capacidad de 7, mientras
que las ligaduras con 1 en los extremos (AB, DE) se sustituyen por un par de arcos
dirigidos en direcciones opuestas, cada uno con capacidad de 1. En el resto de las
ligaduras se realizan los cambios de igual forma.

Como el problema del flujo máximo se puede formular como un problema de


programación lineal, entonces su resolución se puede realizar mediante el conocido
método simplex. Sin embargo, se dispone de un algoritmo de trayectorias aumentadas

21
que es mucho más eficiente que el anterior. Este algoritmo se basa en dos conceptos
intuitivos, el de una red residual y el de una trayectoria aumentada.

En principio, la red residual difiere de la red original sólo en que cada arco
dirigido (i →j) que no tiene un arco dirigido en la dirección opuesta (j →i) ahora se le
agrega con capacidad cero. Después, las capacidades de los arcos en la red residual
(llamadas capacidades residuales )se ajustan de la siguiente forma. Cada vez que se
agrega una cantidad de flujo ∆ aun arco i →j en la red original, la capacidad residual
del arco i →j se disminuye en ∆, pero la capacidad residual del arco j → i se aumenta en
∆. Así, la capacidad residual representa la capacidad del arco que no se usa en la red
original o la cantidad de flujo en la dirección opuesta en esta red que se puede cancelar
( o una combinación de ambas, si la red original tiene arcos en las dos direcciones).
Así, después de asignar los diferentes flujos a la red original, la red residual muestra
qué tanto más se puede hacer ya sea aumentando más los flujos o cancelando los que se
asignaron antes.

Una trayectoria aumentada es una trayectoria dirigida del nodo fuente al nodo
destino en la red residual, tal que todos los arcos en esta trayectoria tienen capacidad
residual estrictamente positiva. El mínimo de estas capacidades residuales se llama
capacidad residual de la trayectoria aumentada porque representa la cantidad de flujo
que es factible aumentar en toda la trayectoria. Por lo tanto, cada trayectoria aumentada
proporciona una oportunidad de aumentar más el flujo a través de la red original.

El algoritmo de la trayectoria aumentada selecciona repetidas veces alguna


trayectoria aumentada y agrega un flujo igual a su capacidad residual en la red original.
Este proceso continúa hasta que ya no hay trayectorias aumentadas, con lo que el flujo
del nodo origen al nodo destino no se puede aumentar. La clave para asegurar que la
solución final es necesariamente óptima es el hecho de que las trayectorias aumentadas
pueden cancelar flujos asignados con anterioridad en la red original; así, una selección
indiscriminada de trayectorias para asignar flujos no puede evitar el uso de una
combinación mejor de asignaciones de flujos.

Resumiendo , cada iteración del algoritmo consiste en los pasos siguientes:

Algoritmo para el problema del flujo máximo 1

1. Se identifica una trayectoria aumentada encontrando alguna trayectoria


dirigida del nodo origen al nodo destino en la red residual tal que cada arco
sobre esta trayectoria tiene capacidad residual estrictamente positiva. ( Si no
existe una, los flujos netos ya asignados constituyen un patrón de flujo
óptimo.)

2. Se identifica la capacidad residual c* de esta trayectoria aumentada


encontrando el mínimo de las capacidades residuales de los arcos sobre esta
trayectoria. Se aumenta en c* el flujo de esta trayectoria.

1 Se supone que las capacidades de los arcos son números enteros

22
3. Se disminuye en c* la capacidad residual de cada arco en esta trayectoria
aumentada. Se aumenta en c* la capacidad residual de cada arco en la dirección
opuesta en esta trayectoria. Se regresa al paso 1.

Al realizar el paso 1, con frecuencia habrá varias alternativa de trayectorias


aumentadas entre las cuales se podrá escoger. Posteriormente se describirá un
procedimiento sistemático para encontrar una trayectoria aumentadas. Sin embargo en
el problema que se va a resolver, la selección se hará en forma arbitraria.

Volviendo al problema del parque que se quiere resolver, se va mostrar cada


iteración la red residual después de completar los tres pasos, en donde se usa una sola
línea para representar el par de arcos dirigidos en direcciones opuestas entre cada par de
nodos. La capacidad residual del arco i →j se muestra junto al nodo i , mientras que la
capacidad residual del arco j →i se muestra junto al nodo j. Utilizando este formato, la
red que se muestra en la figura anterior es en realidad la red residual antes de asignar
ningún flujo. Después de algunas iteraciones, se muestran en negritas (junto a los
nodos O y T) la cantidad total de flujo que se logra.

Iteración 1: con respecto a la última figura, una de las trayectorias posibles aumentadas
es O→B→E→T que tiene la capacidad residual igual al mínimo {7, 5, 6} = 5. Si se
asigna un flujo de 5 a esta trayectoria, la red residual que resulta es :

3
0 A 0 5
1 T
5 0 9
1 5
2 5
5 4 0
O B D
2
4 0 1
0 1
5
0 C E 1
4 0

Iteración 2: se asigna un flujo de 3 a O→A→D→T. La red resultante es la red residual :

23
0
3 A 3 8
1 T
2 3 6
1 5
2 5
8 4 0
O B D
2
4 0 1
0 1
5
0 C E 1
4 0

Iteración 3: se asigna un flujo de 1 a la trayectoria aumentada O→A→B→D→T.

Iteración 4: se asigna un flujo de 2 a la trayectoria aumentada O→B→D→T. La red


residual de estas dos iteraciones resultante es:

0
4 A 6 11
0 T
1 3 3
2 5
0 7
11 1 3
O B D
2
4 0 1
0 1
5
0 C E 1
4 0

Iteración 5: se asigna un flujo de 1 a la trayectoria aumentada O→C→E→D→T.

Iteración 6: se asigna un flujo de 1 a la trayectoria aumentada O→C→E→T. La red


residual resultante es:

0
4 A
0 7 T 13
1 3 2
0 7 2 6
13 O B 1 3 D
2
2 0 2
0 0
5
2 C E 0
2 2

24
Iteración 7: se asigna un flujo de 1 a la trayectoria aumentada O→C→E→B→D→T. La
red residual resultante es:

0
4 A 8 14
0 T
1 2 3 1 6
14 0 7 0 4
O B D
1 2 1 2
0 0
3 C 4 0
E
1 3

Como se puede observar, ya no existen trayectorias aumentadas y entonces el


patrón actual es óptimo.

El patrón de flujo actual se puede identificar al comparar las capacidades


residuales con las capacidades de flujo originales. Luego existe un flujo a través de un
arco si la capacidad residual final es menor que la capacidad original. La magnitud de
este flujo es igual a la diferencia entre estas capacidades. Luego se obtiene la siguiente
figura por la comparación de la red de la figura obtenida en la última iteración con la
figura inicial del problema. O sea la solución óptima para el tercer problema del parque:

A
14
4 3 8 T
1
14 7 4
O B D
6
4 1
3
C E
3

Como se puede observar a lo largo de las iteraciones efectuadas, que


asignaciones en una iteración se cancelan en la siguiente.

En este problema se hicieron las selecciones de las diferentes trayectorias


aumentadas de una forma arbitraria. Sin embargo, este algoritmo, cuando se trabaja con
redes muy grandes, la parte más difícil es encontrar una trayectoria aumentada. Esta
tarea se puede simplificar con un procedimiento sistemático. Se comienza por
determinar todos los nodos que se pueden alcanzar desde el origen con un sólo arco con
capacidad residual positiva. Después, para cada uno de estos nodos alcanzados, se

25
determinan todos nuevos nodos ( entre los que no han sido alcanzados) a los que se
puede llegar desde este nodo con un solo arco con capacidad residual positiva. Esto se
repite con los nuevos nodos conforme se van alcanzando. El resultado será la
identificación de un árbol con todos los nodos a los que se puede llegar desde el origen,
a lo largo de una trayectoria con capacidad de flujo residual positiva. Este
procedimiento de abanico siempre identificará una trayectoria aumentada, si existe,
desde el origen al destino, con capacidad de flujo positiva. Supongamos ahora la red
residual obtenida después de la iteración 6, y utilizando el procedimiento de abanico se
encuentra una nueva trayectoria aumentada, que se indica en la siguiente figura:

0
4 A
0 7 T
1 3 2
0 7 2 6
O B 1 3 D
2
2 0 2
0 0
5
2 C E 0
2 2

Aunque el procedimiento de la figura anterior es relativamente sencillo, será útil


poder reconocer cuándo se tiene un patrón (solución) óptimo sin tener que buscar de
manera exhaustiva una ruta que no existe. A veces es posible esto con el resultado de
un teorema importante de la teoría de redes, conocido como el teorema del flujo
máximo cortadura mínima. Una cortadura se puede definir como cualquier conjunto
de arcos dirigidos que contienen al menos un arco de cada trayectoria dirigida que va
del nodo origen al nodo destino. El valor de la cortadura es la suma de las
capacidades de los arcos (en la dirección específica) de la cortadura. El teorema del
flujo máximo-cortadura mínima establece que para cualquier red con un solo nodo
origen y un solo nodo destino, el flujo máximo factible del origen al destino es igual al
valor de la cortadura mínima para todas las cortaduras de la red. Así, si F denota la
cantidad de flujo del origen al destino para cualquier patrón de flujo factible, el valor de
cualquier cortadura proporciona una cota superior para F, y el menor de los valores de
las cortaduras es igual al máximo valor de F. Entonces, si se puede encontrar, en la red
original, una cortadura cuyo valor sea igual al valor actual de F encontrado en el
procedimiento de solución, el patrón de flujo actual debe ser óptimo. Eventualmente se
alcanza la optimalidad siempre que exista una cortadura cuyo valor se cero en la red
residual.

Para ilustrar esto, consideremos en la figura inicial del problema la cortadura


que se refleja en la siguiente figura:

26
3
0 A 0
1 T
5 0 9
1 0
7 0 4 0
O B D
2
4 5 1
0 1
0
0 C E 6
4 0

Como se puede observar, el valor de la cortadura es (3+4+1+6) = 14, que según


se había encontrado, corresponde al máximo valor de F, por lo que se trata de una
cortadura mínima. También se puede observar que en la red residual obtenida en la
iteración 7, en donde F=14, la cortadura correspondiente tiene valor cero. Si esto se
hubiera observado, no habría sido necesario buscar trayectorias aumentadas adicionales.

El problema del flujo de costo mínimo.

Se trata del cuarto tipo de problema señalado anteriormente, el cual presenta una
posición medular entre los modelos de óptimización de redes, por dos razones; la
primera porque abarca una clase amplia de aplicaciones ( además son casos particulares
del mismo, los problemas de transporte, asignación, transbordo, ruta más corta y el del
flujo máximo); la segunda porque el algoritmo simplex en redes que emplea es muy
eficiente. Se trata entonces de un problema general, en el cual se considera el flujo a
través de una red con capacidades limitadas en sus arcos ( como ocurría en el problema
del flujo máximo); se considera también un costo (o distancia) para el flujo a través de
un arco (como en el problema de la ruta más corta); también considera varios orígenes y
varios destinos para el flujo, con costos asociados ( como en el problema de transporte o
en el de asignación); y por último, puede considerar, al igual que el problema de
transbordo, varios nodos intermedios ( o nodos de transbordo). De ahí, que los citados
problemas sean casos especiales del problema del flujo de costo mínimo, problema que
se va a analizar a continuación.

FORMULACION

Considérese una red conexa dirigida con m nodos ( con al menos un nodo origen
y al menos un nodo destino) y n arcos dirigidos. Luego tenemos los siguientes
conceptos:

27
• Las variables de decisión son xij , donde representa el flujo a través del arco de i a j
• uij es la capacidad máxima de flujo permitido a través del arco de i a j
• cij costo de distribución de una unidad de i a j
• bi es el flujo neto generado en el nodo i. El valor de bi , depende de la naturaleza del
nodo i, es decir:
bi >0 , si i es un nodo fuente (origen) o sea, el nodo i representa los recursos
disponibles de un artículo.
bi < 0, si i es un nodo demanda (destino), o sea, la demanda requerida del
artículo en el destino i.
bi = 0 , si i es un nodo de transbordo ( intermedio), es decir, no se dispone ni
demanda ningún artículo en el nodo i
Luego “el problema del flujo con costo mínimo” se puede enunciar como,
minimizar el costo total de distribución de los recursos disponibles a través de la red
para satisfacer la demanda dada.

Matemáticamente, resulta ( teniendo en cuenta que los siguientes sumatorios se


efectúan sobre arcos existentes) :

m m
Min ∑∑c i=1 j=1
ij x ij
m m
Sujetoa ∑x
j=1
ij - ∑x
k =1
ki = b i; i = 1, . . . , m

xij ≥ 0 ∀i, j = 1, . . . . . . m

NOTA: Vamos a considerar en principio que los flujos son simplemente no negativos.
Posteriormente se generalizará, o sea, consideremos que son lij ≤ xij ≤ uij , es decir los
arcos pueden tener una capacidad mínima y máxima ( ambas positivas).

Las restricciones se denominan “ecuaciones de conservación de flujo “ o “


ecuaciones de Kirchoff”, e indican que, en la red, no se puede crear ni destruir flujo.

La primera suma en las restricciones de los nodos representa “ el flujo total que
sale” del nodo i, mientras que la segunda suma representa “ el flujo total que entra en el
nodo i, así, la diferencia es el flujo neto bi generado en este nodo.

Obviamente, “ el problema del flujo con costo mínimo “ es un problema lineal y


como tal se puede resolver aplicando el método simplex ordinario ( ya visto), pero
vamos a ver que su estructura especial permite una simplificación sin necesidad de
utilizar el tabló simplex. Cabe señalar, que no se garantiza que el problema posea
“soluciones factibles”, ya que esto dependerá en parte, de qué arcos se tengan en la
red, y de sus capacidades. De cualquier manera, para una red diseñada razonablemente,
la condición necesaria más importante para que si exista una solución factible es la
siguiente:

PROPIEDAD DE SOLUCIONES FACTIBLES: una condición necesaria para


que “ un problema de flujo con costo mínimo” tenga soluciones factibles es que

28
m

∑b =
i=1
i 0 ( O sea que la oferta total debe ser igual a la demanda total)

En caso de vulnerarse esta condición, es que habrá recursos o demandas en


exceso. Luego, como se hacia en el problema de transporte, se añade un nodo demanda
(m+1) ficticio si existe exceso de recursos, con bm+1 , igual a la diferencia (exceso) y se
establecen unos arcos orientados desde los nodos “orígenes” hasta el citado nodo
demanda m+1, con costos cij = 0, mientras que si el exceso es debido a una mayor
demanda se crea un nodo origen m+1 ficticio para generar un flujo equivalente al
exceso de demanda, agregando arcos con cij = 0, desde este nodo hasta todos los nodos
demanda.

Propiedades de la matriz de restricciones A

Consideremos por ejemplo la red siguiente:


2

4
1
4

La matriz A de coeficientes asociada al conjunto de restricciones de la figura,


tiene una fila para cada nodo ( es decir 4 filas ) y una columna para cada arco ( o sea 7
columnas). Cada columna de A contiene exactamente dos coeficientes distintos de cero:
un +1 y un -1. La columna asociada con el arco (i,j) contiene un “+1” en la fila i y un “
-1” en la fila j, y todos los elementos restantes son cero. Por lo tanto, la columna de A,
esta dada por :

aij = ei - ej

donde ei y ej son vectores en un espacio euclidiano E m , o sea, con unos en la i-ésima y


j-ésima posiciones, respectivamente. Luego la matriz A, se llama “matriz de
incidencia nodo-arco” , entonces para la gráfica anterior se tiene:

(1,2) (1,3) (2,3) (2,4) (3,2) (3,4) (4,1


)
1 1 0 0 0 0 -1 1
A= -1 0 1 1 -1 0 0 2
0 -1 -1 0 1 1 0 3
0 0 0 -1 0 -1 1 4

a) Rango de la matriz A

Como la suma de todas las filas dan lugar a un vector nulo, esto indica que la
matriz A no es de rango completo, pudiendo encontrarse una matriz cuadrada de
dimensión ( m-1)(m-1) con determinante no nulo, lo que indica que el rango de la
matriz A es m-1, es decir, las variables básicas son m-1. Luego teniendo en cuenta los

29
conceptos vistos anteriormente en el problema de transporte, se puede obtener de la
misma forma un árbol de mínima expansión que tiene m-1 arcos, es decir, es una
gráfica conexa donde no existen ciclos y donde en cada fila y en cada columna existe al
menos una celda básica, entonces de la misma forma como se demostró en el problema
de transporte implica que existe una solución básica, ya que la existencia de una árbol
de mínima expansión implica la existencia de una solución básica, y viceversa. Sin
embargo el hecho que exista una solución básica no nos asegura que la misma sea
factible. Por ejemplo sea una base B:

(1,3) (2,4) (3,4)


1 0 0 1 0 0
B = (a13 , a24 , a34 ) = 0 1 0 = 0 1 0
-1 0 1 -1 0 1
0 -1 -1

Obsérvese que al suprimir la fila 4ª de la matriz B se obtiene una matriz triangular


inferior, o lo que es lo mismo el árbol de mínima expansión m-1 = 4-1 = 3 arcos,
siguiente
2
1 4
4
Como se ha comentado anteriormente
3 la base obtenida no es de rango completo,
pero de la misma forma como se hacia en el problema de transporte es conveniente
utilizar una de rango completo , lo cual se logra añadiendo una variable artificial, que
como veremos va a ser siempre cero (el coste correspondiente ca no va a influir al ser la
variable artificial cero, y lo vamos hacer igual a cero también, aunque podría ser
cualquier valor). A la citada variable artificial la simbolizamos mediante un arco raíz,
luego la nueva matriz de restricciones está formada por (A, em )

raiz
4
1
4

Luego la base de rango completo m:

B = (a13 , a24 , a34 , e4 ) y las variables básicas son (x13 , x24 , x34 , x5 )t

2
1 4
4
3

30
x5 es la variable artificial.

TEOREMA.

Una base para “un problema de flujo con costo mínimo” está caracterizada por un
árbol de expansión enraizado y todo árbol de expansión enraizado es una base
triangular inferior, o sea toda base es triangular. Aunque lo damos sin demostración,
en el ejemplo anterior se probó la certeza de este teorema.

Esta propiedad de la triangularidad permite resolver el sistema de ecuaciones


asociado, B xB = b , de una forma sencilla y eficiente (como ya se vio en el problema
de transporte) pero que aquí se permite además obtenerla de forma gráfica muy
sencilla, lo mismo con respecto de las variables duales asociadas.

Además como los coeficientes de la matriz B son +1, -1 ó 0, luego si son enteros
los bi , entonces la solución es entera.
Por último, al estar formada la matriz A por componentes +1, -1 y 0, o
sea es unimodular, luego, las componentes del vector yij está formado por +1, -1 ó 0,
ya que yij = B-1 aij . Sin embargo los coeficientes se pueden determinar al formar el
ciclo (un arco no básico en función de los arcos básicos que forman el ciclo), veamos
el ejemplo siguiente:

2
1 4
4
3

Los arcos que están en sentido contrario al arco no básico tienen como
coeficiente de representación un +1, mientras que los del mismo sentido tienen un -1,
ya que:

Por ejemplo :

a23 = a24 - a34 = (e2 - a4 ) - ( e3 - e4 )= e2 - e3


NOTA La matriz A tiene las propiedades de triangularidad, enterabilidad y
unimodularidad total , como se ha observado anteriormente

EL METODO SIMPLEX PARA PROBLEMAS DE FLUJO EN REDES

Los pasos a desarrollar son los mismos que se efectúan en el método simplex
ordinario, es decir, dada una solución básica factible inicial, se comprueba si la misma
es la solución óptima, para lo cuál se determinan los zij - cij correspondientes a las
variables no básicas, y si zij - cij ≤ 0 ( en un problema de minimización) , la solución

31
básica actual será entonces óptima; en caso contrario entra en la base xij (la que tenga la
mayor diferencia), y se determina la variable básica de bloqueo que saldrá de la base,
pivoteándose a continuación, y así hasta que todos los sean zij - cij ≤ 0 . Veamos a
continuación un ejemplo ilustrativo que nos va a mostrar los pasos a seguir. Sea el
problema de flujo con costo mínimo de la siguiente figura:
b2=5
cij
2 b4=-4
6
5
-4 b3=1
b1=2 -2 4
1
3 0 4

4
5 2 3
5
Como se observa ∑bi= 0
i=1
⇒ ∃ una solución básica factible, condición
5
establecida anteriormente para la existenciab de =-4una solución factible. (que la demanda
5
total sea igual a la oferta total). Luego si la matriz A es:

A = (a12 , a13 , a15 , a23 , a34 , a42 , a45 , a53 )

Como el rango es m-1, entonces una base tiene m-1 = 5-1 = 4 variables
legítimas, pero como se necesita una base de rango completo, se utiliza una variable
artificial x5 con el vector asociado e5 en un espacio euclidiano E5 , para constituir la
citada base de rango completo. Sea la siguiente base:

B = (a15 , a23 , a34 , a45 , e5 ) , luego

1 0 0 0 0 x15 b1 2
0 1 0 0 0 x23 b2 5
0 -1 1 0 0 x34 = b3 = 1
0 0 -1 1 0 x45 b4 -4
-1 0 0 -1 1 x5 b5 -4

Como se puede observar la matriz básica es una matriz triangular inferior, que se
resuelve fácilmente, obteniéndose el siguiente resultado:

x15 = b1 = 2
x23 = b2 = 5
-x23 + x34 = b3 = 1 ⇒ x34 = 1 + 5 = 6
-x34 + x45 = b4 = -4 ⇒ x45 = 6 - 4 = 2
-x15 - x45 + x5 = b5 = -4 ⇒ x5 = 0b2(=5la variable artificial x5 siempre va a ser
nula).
2
Supongamos ahora el árbol de expansión enraizado correspondiente a la base anterior
b4=-4

b1=2 b3=1 4
1
3 4

5
32 b5=-4
5
b1=2 1
x15soluciones:
Se obtienen las siguientes
⇒ x15 = b1 = 2

b2=5

2
⇒ x23 = b2 = 5
x23

x23 =5
⇒ x34 - x23 = b3 = 1 ⇒ x34 = 1 +x23 = 1+5 = 6

b3=1 3 x34

b4=-4
x34 =6
4 x45 - x34 = b4 = -4 ⇒ x45 = -4 +x34 = -4+6 = 2
4

x45

x15 =2 x45 =2

5 x5 - x15 - x45 = b5 = -4 ⇒ x5 = -4 +2+2 = 0 ( siempre)


5 b5=-4
x5

Se obtiene el mismo resultado anterior, es decir, se obtiene la solución ( valores)


básica resolviendo desde los terminales del árbol hacia la raíz del mismo.. En cambio,
como se verá posteriormente, el proceso de obtener las variables duales asociadas se
invierte el proceso, es decir, desde la raíz hacia los terminales.

33
Cálculo de los zij - cij

Es necesario obtener los diferentes zij - cij , correspondientes de las variables no


básicas para saber si la solución básica actual es óptima. Para ello existen dos
procedimientos como ocurría en el problema de transporte.

1º) El método del ciclo.

zij - cij = cBB-1 aij - cij = cB yij - cij


El vector columna yij tiene como coeficientes de representación +1, -1 , ó 0, según el
arco básico del ciclo que forma con el arco no básico (i,j) tenga sentido contrario, igual,
o no pertenezca al citado ciclo, respectivamente. Así por ejemplo, si se quiere calcular
el valor de z53 - c53 , es decir, para el arco no básico (5,3), se forma el ciclo
correspondiente con los arcos básicos, dando el sentido de giro el correspondiente al
citado arco no básico, como se puede observar en la siguiente figura:

4
1
3 4

5
5

Es decir : z53 - c53 = cB y53 - c53 = (- c34 - c45 ) - c53 = ( - 0 -3 ) - 4 = -7

NOTA. El arco no básico se establece con el sentido del arco que inicialmente estaba
establecido en el esquema inicial (5,3), es decir del nodo 5 al nodo 3.

2º) Método de la variable dual.

zij - cij = cBB-1 aij - cij = w aij - cij

donde: w = cBB-1 , ó bien w B= cB .

Luego al existir cinco restricciones el problema dual tendrá 5 variables duales, o sea:

a15 a23 a34 a45 e5


1 0 0 0 0
0 1 0 0 0
w1 w2 w3 w4 w5 0 -1 1 0 0 = c15 c23 c34 c45 ca =
0 0 -1 1 0
-1 0 0 -1 1

34
= ( 2, -4, 0 , 3 , 0 )

Resolviendo el citado sistema de ecuaciones, se obtiene los siguientes


resultados:

w5 = 0 ( este valor se obtiene siempre)


w4 - w5 = c45 ; ⇒ w4 = 3 + 0 = 3
w3 = 3; w2 = -1; w1 = 2;

Este mismo resultado se puede obtener, poniendo en el nudo de la raíz, la


variable dual igual a cero y procediendo hacia los terminales del árbol, utilizando la
relación wi - wj = cij , a lo largo de los arcos básicos del árbol. Luego sobre celdas no
básicas, se obtiene:

zij - cij = w aij - cij = w ( ei - ej ) - cij = ( wi - wj ) - cij

Si se hace directamente sobre la red:


w2= -1

2
-2
-2
-4 w3=3
w1=2 1 4 w4=3
1
3 4
-7
5
w5=0 5

Como se puede observar, la solución básica actual no es óptima, ya que:

z13 - c13 = 1 > 0

Luego en principio, entra en la base la variable no básica x13 . Ahora es necesario


conocer que variable básica (variable de bloqueo) va a ser reemplazada por la anterior.

Determinación de la variable de bloqueo ( v. básica que va a salir de la base)

Cuando se determina el zij - cij máximo para un arco no básico, esencialmente se


identifica el proceso de pivoteo.

Como z13 - c13 = 1 > 0 es la mayor diferencia, y teniendo en cuenta que las componentes
del vector y13 son +1 para los arcos básicos que tienen el sentido contrario al arco no
básico (1,3) del ciclo , mientras que los que tienen el mismo sentido el componente es
-1 ( 0 para los que están fuera del ciclo), entonces al incrementarse la variable no básica
x13 desde su valor cero, las componentes básicas que tienen como componente +1

35
disminuirán , las que tienen la componente -1 se incrementarán , mientras que las que
las que tienen el valor 0, permanecerán con el valor actual, es decir, las componentes de
la variable básica se modificarán según la conocida ecuación siguiente:

xB = { xij} − y13 . ∆

Donde ∆ es el mínimo valor de las variables básicas que tienen como coeficiente
+1, cantidad que va a tomar la nueva variable básica x 13 y cantidad que incrementará a
las variables básicas con coeficiente -1 , mientras que disminuirá a las con coeficiente
+1, quedando por último la variable de bloqueo ( la que sale), con valor 0, es decir
saliendo de la base. El proceso anterior se ilustra en la siguiente figura:

2
No cambia
x23 =5
+∆ x34 =6 4
1 3
+∆ 4
+∆
-∆ x45 =2
x15 =2
5
5
No cambia

Como se puede observar los vectores básicos del ciclo con componente +1 , restaran de
la correspondiente variable básica ∆, decir figuran en el ciclo con -∆, o sea sólo x15 =2
∆ = mínimo  2  = 2

La única variable que disminuye es la variable básica x15 = 2 -∆ = 2-2= 0 (variable de


bloqueo), x23 no cambia, mientras que las siguientes aumentan su valor, es decir,
x34 = 6+∆ = 6+2= 8; x45 = 2 +2∆ = 2+2= 4, y x13 = ∆ = 2 ( variable que entra). Luego la
nueva solución básica son las anteriores componentes , excepto x15 que se cambia por
x13 , es decir queda según el la gráfica siguiente:
2
x23 =5
x13 =2
x34 =8 4
1 3
4

x45 =4
5
5
x5=0

36
Ahora habría que comprobar si la solución presente es óptima. En caso contrario
el proceso se continuaría del mismo modo señalado anteriormente.
Ejemplo ilustrativo del método simplex para redes

Vamos a mostrar ahora el procedimiento operativo seguido para resolver el


problema siguiente. Sea la red de la figura siguiente:
2
cij
2
2 4
bi
4
4 1 6 -1 -5
4

-5 3
3
-1
7

La matriz de restricciones es:

A = (a12 , a13 , a23 , a24 , a32 , a34 , a41 )

Sea una matriz básica de rango completo ( recordar que el rango de A es m-1, luego
para que sea de rango completo debe de elegirse una variable artificial para lograrlo,
como se ha visto anteriormente ) de la siguiente forma:

B = ( a13 , a24 , a34 , e4 )

Vamos a utilizar el siguiente ordenamiento para ejecutar los pasos de realización del
método simplex para redes:

It. Solución Primal Solución Dual zij - cij Pivoteo


4
2 -8 -∆
0 -2 ∆
2
-7
1 4 0 ∆
3
3 -5
∆ = mínimo { 2}= 2

2
-6 -2
0 -2
2 2 OPTIMO
-5
4 0
5
3 -5
Luego la solución óptima es:
x13 = 4 ; x23 = 2 ; x34 = 5 ; y el resto de xij = 0 ; mientras que z* = -5.4+6.2+3.5=-7
Determinación de una solución básica factible.

37
±
1
±1
A . b
.
±
1
0 ± ±1 . . ± 0
1 1

Se añade una columna artificial por cada fila de A, donde la i-ésima columna
artificial es ± ei dependiendo del signo de bi (es decir, + ei si bi > 0; - ei si bi < 0 en
caso contrario). Asimismo se añade una fila redundante dada por el negativo de la suma
de las filas de la matriz A “extendida” ( la que se obtienen al añadir las columnas
citadas).
Puesto que ahora cada columna de la matriz nueva, tiene exactamente un +1 y
un -1, se puede considerar como una matriz de incidencia nodo-arco de una gráfica.
Esta “nueva gráfica” tiene los nodos y arcos iguales que la gráfica original. Además
tiene un nuevo nodo y m nuevos arcos ( un arco entre cada nodo original y el nuevo
nodo ). Luego una base factible para este nuevo problema está dada por m variables
(arcos) artificiales más una variable (raíz) artificial para la nueva fila (m+1).
Se puede aplicar entonces el método de penalización o el de dos fases, para
eliminar las variables artificiales de la base y el nodo (m+1) y utilizar los arcos
originales (variables) y una variable artificial (raíz) en el nodo m.
NOTA: si se utiliza el método d e de la fase I, los costos de las variables
artificiales es igual a 1, mientras que para las restantes (legítimas) tienen un costo 0. En
el método de penalización las variables artificiales tienen un costo M >> 0 y las
restantes el costo real. El problema anterior se desarrolla de la siguiente forma:

x12 x13 x23 x24 x32 x34 x41 x1 x2 x3 x4 x5 b


1 1 1 0 0 0 0 -1 1 0 0 0 0 4
2 -1 0 1 1 -1 0 0 0 1 0 0 0 2
3 0 -1 -1 0 1 1 0 0 0 -1 0 0 -1
4 0 0 0 -1 0 -1 1 0 0 0 -1 0 -5
0 0 0 0 0 0 0 -1 -1 1 1 1 0

O si se hace sobre la gráfica:


1
5
b2=2
1 cij
2
1
0 0

1
b1=4 4
1 0 0
4
b4=-5
0

b3=-1 3

38
O sea el problema en la fase I, mientras que una solución factible se muestra en
la siguiente figura:

4
1
4

El problema de flujo con costo mínimo con cotas inferiores y superiores.

La resolución se efectúa de una forma similar a cuando se tiene que una variable
es no negativa. Para ello se tiene que una solución básica factible, el valor de las
componentes básicas tiene que estar comprendido entre sus límites superiores e
inferiores, mientras que las variables no básicas tienen asignado el valor o bien en su
límite inferior o bien en su limite superior ( recordar el método simplex para variables
acotadas ). Conviene decir que las cotas inferiores y superiores no tienen efecto sobre el
cálculo de las variables duales y de los valores zij - cij . Sin embargo, el criterio de
optimalidad cuando existen cotas superiores e inferiores se alcanza cuando para todas
las variables no básicas se cumple:

si para todo xij = uij .⇒ zij - cij ≥ 0 y para todo xij = lij .⇒ zij - cij ≤ 0

En el caso de que no se cumplan las relaciones anteriores para todas la variables


no básicas según estén en el límite inferior o superior, entonces la variable no básica
puede ser candidata a entrar en la base, y lógicamente será aquella que tenga el mayor
valor de entre las diferencia zij - cij ≥ 0 para las variables en el límite inferior y las
diferencias cij - zij ≥ 0 para las variables en el limite superior. Ahora para elegir la
variable básica que va a salir ( variable de bloqueo), se hace lo siguiente.
Independientemente de que la variable sea creciente o decreciente, se añade el arco no
básico entrante al árbol básico y se determina e ciclo único formado. Después, si la
variable entrante es creciente, se envía una cantidad ∆ alrededor del ciclo en la dirección
de la variable entrante, en cambio si la variable entrante es decreciente, se envía una
cantidad ∆ alrededor del ciclo en contra de la dirección de la variable entrante. Ver los
dos casos en las siguientes figuras:

-∆ -∆
∆ ∆

∆ ∆
∆ -∆
-∆ ∆

-∆ ∆
(b)Cuando xij es
39
decreciente
(a)Cuando xij es creciente

Para calcular el valor crítico de ∆, se examinan las variables básicas crecientes al igual
que las decrecientes, y la posibilidad de que xij ( variable no básica entrante) pueda
alcanzar su otra cota. Si ocurre la última posibilidad, la variable xij permanece no básica
( en su otra cota) y todas las variables básicas en el ciclo se ajustan de manera
congruente. En caso contrario, la variable no básica entra y alguna variable básica sale
en una u otra de sus cotas, y todas la variables del ciclo se ajustan de manera acorde, es
decir , aumentan o disminuyen la citada cantidad . En clase desarrollaremos diferentes
ejemplos ilustrativos para aclarar el procedimiento de resolución.

Aplicación del problema general de redes para resolver los casos particulares.

Se han tratado diferentes tipos de problemas de redes, con sus correspondientes


algoritmos, que permiten resolverlos tal como se ha visto. Sin embargo, el problema de
flujo con costo mínimo se considera el problema general de redes, ya que una red
conexa es un conjunto de nodos que están enlazados, directa o indirectamente entre si, y
por cuyos arcos pasa un flujo determinado y como los nodos pueden ser fuentes y/o
destinos, transbordo, entonces la red trata de distribuir las unidades demandadas desde
los destinos a las fuentes, es decir, estableciendo un flujo en la red de forma que tal
distribución sea lo más económica. Es decir, por la red fluye un flujo y la distribución
tiene un coste, de ahí la terminología del problema, problema con flujo con costo
mínimo.
Los demás problemas se pueden considerar casos particulares de este. Si al
problema de transporte si le damos a las capacidades de demandas un valor negativo,
entonces aplicando al problema de transporte las ecuaciones de Kirchoff, el problema se
resuelve como el general de redes. Obviamente en el problema de asignación es lo
mismo, donde las capacidades de demanda son -1. En cuanto al problema de
transbordo, que entre los orígenes y los destinos existen nodos intermedios, el
tratamiento es el mismo que el de transporte, la capacidades de demanda son negativas,
mientras que las capacidades de los nodos intermedios son nulas, y la aplicación
entonces de las ecuaciones de Kirchoff en los nodos. Respecto al problema de la ruta
más corta, se considera al nodo de origen como un nodo fuente con capacidad 1 y el
nodo destino con capacidad -1, mientras que el resto de los nodos de la red tienen
capacidad 0, considerando las distancias entre los diferentes nodos como si fueses
costos. El problema de flujo máximo, se considera a todos nodos intermedios con
capacidades 0, en la aplicación de las ecuaciones de Kirchoff (sólo se aplican en esos
nodos), teniendo en cuenta que el flujo máximos de cada arco es la capaciadad uij y que
la función objetivo se considera el flujo saliente del nodo origen, o del flujo del nodo
destino, estableciendo una restricción más ( aparte de las citadas ecuaciones de
Kirchoff, descritas anterioremente) que establezca que el nodo saliente del nodo origen
es igual al flujo del nodo de llegada, o lo que es lo mismo, la diferencia entre los
mismos es 0 teniendo en cuenta que las restricciones figuran en el mismo lado de la
ecuación las variables. Todos estos casos, particularizando el problema general para
contemplar estos casos sin necesidad de aplicar los algoritmos descritos anteriormente,
se verán en las prácticas de laboratorio.

40
41