Está en la página 1de 40

101

CAPÍTULO 4

4. ALGORITMO DE FLUJO DE COSTO MÍNIMO

4.1. Planteamiento del Problema de Flujo de Costo Mínimo

Sea G=(N,A) una red dirigida con un costo c ij y una capacidad u ij

asociada con cada arco (i, j )  A. El problema que se plantea es:

Minimizar

c ij
( j :( i , j ) A )
x ij
sujeto a

x ij
( j :( i , j ) A )
 x ij
( j :( j , i ) A )
 b(i ); i  N

l ij  x ij  u ij (i, j )  A

Se representará con C la mayor magnitud de los costos asociados

a los arcos y con U la mayor magnitud de la demanda u oferta de

algún arco o a la capacidad finita de dicho arco.


102

Se supondrá que el límite inferior de capacidad de cada arco (i, j )

, l ij es cero. Además se harán las siguientes suposiciones:

1.-Todos los costos, ofertas, demandas y capacidades de los arcos

son enteros.

2.-La red es dirigida

3.-Las ofertas y las demandas de los nodos satisfacen la condición

 b(i)  0
i N
y el problema de flujo de costo mínimo posee una

solución factible

4.- Supondremos que la red posee una ruta con una capacidad

ilimitada entre cada par de nodos de los arcos que la componen.

5.-Todos los costos de los arcos son no negativos.

Los algoritmos a ser analizados emplean el concepto de redes

residuales. En tales redes se ha reemplazado cada arco (i, j ) por

dos arcos (i, j ) y ( j , i ) . El arco (i, j ) posee un costo c ij y una

capacidad residual rij  u ij  xij , y el arco ( j , i ) tiene un costo

cij  c ji y una capacidad residual rij  xij . La red residual está

compuesta de los arcos que posean una capacidad residual

positiva.
103

4.2. Algoritmo de Descomposición de Flujo

En la formulación de problemas de flujo en redes existen dos

formas de definir el flujo, la primera es definiendo el flujo sobre los

arcos y la segunda definiendo el flujo sobre rutas y ciclos.

Para analizar la definición de flujo sobre arcos, empleamos el

vector x  {xij } que satisface las siguientes restricciones:

x ij
( j :( i , j ) A )
 x ij
( j :( j , i ) A )
 e(i ); i  N

0  x ij  u ij (i, j )  A

donde,

 e(i)  0
i 1

Se observa que en este modelo hemos reemplazado la

oferta/demanda b(i ) , por el término  e(i) , al que denominaremos

como el desequilibrio del nodo i. Este término representa la

diferencia entre el flujo que llega al nodo i y el flujo que sale del

nodo. Por lo tanto si e(i )  0 , se dice que i es un nodo de exceso.

Caso contrario, si e(i)  0 diremos que i es un nodo de déficit. Si


104

e(i)  0 afirmaremos que i es un nodo balanceado. La

formulación del problema sobre flujos en rutas y ciclos, comienza

con la enumeración de todas las rutas dirigidas P, entre algún par

de nodos y de todos los ciclos dirigidos en la red. Al conjunto de

todas las P, lo denotaremos con P y al conjunto de todos los ciclos

W con W. Las variables de decisión en esta formulación son el

flujo sobre la ruta P, f(P) y el flujo sobre el ciclo W f(W). Estas

variables están definidas para todos los elementos de P y W.

El flujo x ij sobre el arco (i, j ) , es igual a la suma de los flujo f(P) y

f(w) de todos las rutas y ciclos que contienen al arco (i, j ) . De

manera formal definiremos a δij(P) igual a 1 si la ruta P contiene al

arco (i, j ) y 0 sino lo contiene, y a δij(W) igual a 1 si el ciclo W

contiene al arco (i, j ) y 0 sino lo contiene. Por lo tanto:

x ij    ij ( P) f ( P)   ij (W ) f (W )
pP wW

En relación a este razonamiento se establece el siguiente teorema:

4.2.1. Teorema de Descomposición de Flujo


105

Cada flujo en una ruta y en un ciclo tiene una única

representación como flujo no negativo sobre un arco.

Inversamente cada flujo no negativo x puede ser representado

como un flujo sobre una ruta y un ciclo, aunque no

necesariamente de manera única, con las siguientes

propiedades:

a) Cada ruta dirigida con flujo positivo conecta un nodo de

déficit con un nodo de exceso.

b) Siendo n el número de nodos de una red y m el número

de arcos, a lo sumo n+m rutas y ciclos tiene un flujo no

nulo, de tal cantidad, a lo sumo m ciclos tienen flujo no

nulo.

4.2.1.1. Prueba

La demostración consistirá en una prueba algorítmica de cómo

descomponer un flujo x sobre arcos en flujo sobre rutas y

ciclos. Para lo cual supongamos la existencia de un arco

(i0 , i1 ) que lleva una cantidad de flujo positiva desde un nodo

de déficit i0, hacia otro nodo i1. Nos detenemos si i1 es un nodo

de exceso, caso contrario existe otro arco (i1 , i 2 ) con un flujo


106

positivo. Este proceso es repetido hasta que encontremos un

nodo de exceso ik, o hasta que visitemos el nodo de partida,

por lo que este paso se repetirá a lo sumo en n ocasiones. En

el primer caso habremos encontrado una ruta P, y en el

segundo un ciclo dirigido W.

En ambos casos, la ruta P y el ciclo W se componen de arcos

con flujo positivo. En la situación de que hayamos encontrado

una ruta P, definiremos al flujo f(P) de la siguiente manera:

f ( P)  min{ e(i0 ), e(i k ), min{ xij : (i, j )  P}}

y redefiniremos,

e(i 0 )  e(i 0 )  f ( P)
e(i k )  e(i k )  f ( P)
x ij  x ij  f ( P) (i, j )  P

Si hubiésemos obtenido un ciclo dirigido W, definiremos al flujo

W de la siguiente forma:

f (W )  min{ xij : (i, j ) W }


107

y cambiando la variable:

xij  xij  f (W ) (i, j ) W

Este proceso será repetido hasta que los desequilibrios de

cada nodo sean igual a cero. Luego se selecciona un nodo,

del que por lo menos emane un arco con flujo positivo, como el

nodo de partida y repetimos el proceso, el cual en este caso

debe encontrar un flujo positivo. Este proceso termina cuando

el flujo x es igual a cero para el problema redefinido. Se

observa que el flujo original es la suma de los flujos

identificados sobre las rutas y ciclos por este método. En cada

ocasión en que se identifica una se reduce el exceso o el

déficit de un nodo a cero, y cada vez que se identifica el flujo

sobre una ruta dirigida se reduce el flujo sobre algún arco a

cero. Como consecuencia se tiene que la representación en

base a rutas y ciclos de un flujo positivo x , contiene a lo sumo

m+n rutas y ciclos dirigidos, de los cuales a lo sumo m son

ciclos dirigidos.

Dada una circulación x , para la cual e(i )  0 para cada i  N.

Al aplicar el algoritmo de descomposición de flujo a una

circulación x , cada iteración descubre un ciclo dirigido


108

consistiendo solamente de arcos con flujo positivo y

subsecuentemente reduce el flujo de por lo menos un arco a

cero. Por lo que una circulación se descompone en flujos entre

a lo sumo m ciclos dirigidos. Debido a esto se enuncia la

siguiente propiedad.

4.2.2. Propiedad de la Circulación

Una circulación x puede ser representada flujo sobre ciclos

en a lo sumo m ciclos dirigidos.

El teorema de descomposición de flujo nos permite

comparar dos soluciones de flujo en una red, nos permite

construir una solución a partir de otra mediante una

secuencia de operaciones simples. A continuación se

presenta la forma de cómo se establece un teorema

importante denominado Teorema del ciclo Aumentado.

Para ello se introduce el concepto de ciclo aumentado con

respecto a un flujo x .

4.2.3. Ciclo Aumentado


109

Un ciclo W, no necesariamente dirigido, es llamado un

ciclo aumentado con respecto a un flujo x , si aumentando

una cantidad positiva e flujo f(W) en torno al ciclo, el flujo

permanece factible. Tal operación incrementa el flujo de

los arcos dirigidos hacia delante, y decrementa el flujo de

los arcos dirigidos hacia atrás. Por lo tanto W es un ciclo

aumentado en G si x ij  u ij para cada arco (i, j ) hacia

delante y xij  0 para cada arco hacia atrás. Definiremos a

δij(W) igual a 1 si el arco (i, j ) es un arco hacia delante y

δij(W) será igual a –1 si el arco (i, j ) es un arco hacia atrás,

y 0 en otro caso.

El costo sobre el ciclo aumentado W viene definido como:

c(W )  c 
( i , j )W
ij ij (W )

El cambio en el costo del flujo por aumentar f(W) unidades

de flujo es f(W)c(W). El teorema de descomposición de flujo

será empleado para enunciar otro teorema acerca de los

ciclos aumentados en términos de residuales. Para lo cual


110

supongamos que x y x 0 son dos soluciones factibles del


problema de flujo de costo mínimo.

De acuerdo a las redes residuales se tiene que para alguna

circulación factible x I en G(xl) satisface la propiedad de

que x  x0  x I . Además es posible representar a la

circulación xl como flujos sobre ciclos

f (W1 ), f (W2 ), f (W3 ),..., f (Wr ) con r  m . Además se

tiene que:

c
( i , j ) A
ij x ij  c
( i , j ) A
ij x ij0   c ij x ijl
( i , j )G ( x )
*

 r  (W ) f (W )
  cij xij0 
( i , j ) A
 ij  c
k 1
ij k k

( i , j )G ( x )
*

r
 c
( i , j ) A
ij x ij   c(Wk ) f (Wk )
0

k 1

Por lo que se ha establecido el siguiente resultado:

4.2.4. Teorema del Ciclo Aumentado

Suponga que x y que x 0 son dos soluciones factibles de

un problema de flujo en una red. Entonces x equivale a x0


111

más el flujo sobre a lo sumo m ciclos dirigidos en G(x0).

Además, el costo de x equivale el costo de x 0 más el costo


de flujo sobre esos ciclos aumentados.

4.3. Condiciones de Optimización

Dado un nodo fuente s y para cada nodo j N, definamos a

d ( j ) , con j  s, como la longitud de la ruta más corta desde el

nodo s al nodo j. Por lo que para cada arco (i, j ) se debe

satisfacer la siguiente desigualdad:

d ( j )  d (i)  cij

Esta condición nos provee de un medio para verificar si una

ruta es la de menor longitud desde un nodo fuente s hacia

otros nodos. A continuación presentamos dos condiciones de

optimización equivalentes para el problema de flujo de costo

mínimo.

4.3.1. Condiciones de Optimización de Ciclo Negativo

Esta condición proviene de las propiedades del teorema de

descomposición de flujo en redes y de la redes residuales.


112

La condición de optimización de ciclo negativo viene dada

por el siguiente teorema:

4.3.1.1. Teorema de Condiciones de Optimización de Ciclo

Negativo

Una solución factible x * es una solución óptima del

problema de flujo de costo mínimo, sí solo sí satisface las

condiciones de optimización de ciclo negativo, es decir la

red residual G(x*) contiene ciclos dirigidos con costos no

negativos.

4.3.1.1.1. Prueba.

Asumamos que x es un flujo factible y que G(x) contiene

un ciclo negativo. Si sucede esto x no puede ser una

solución óptima, debido a que si aumentamos una

cantidad positiva de flujo en el ciclo, lo que logramos es

mejorar el valor de la función objetivo. Debido a esto si

x * es una solución óptima se debe cumplir que G(x*) no


contenga ciclos negativos.
113

Ahora supongamos que x * es un flujo factible y que

G(x*) contiene ciclos no negativos. Además definamos a

x 0 como un flujo óptimo. De acuerdo a la propiedad de


ciclo aumentado es posible descomponer el vector

diferencia x 0  x * en a lo sumo m ciclos aumentados


con respecto al flujo x * , la suma de costos de esos

ciclos es igual cx 0  cx * , como la longitud de todos los


ciclos en G(x*) son no negativos se tiene que esta

diferencia de costos es mayor o igual a cero o en forma

equivalente se tendría:

cx 0  cx *

Debido a que x 0 es un flujo óptimo se cumple que,

cx 0  cx *

Por lo que se concluye que cx 0  cx * y x * es también

una solución óptima. Finalmente este argumento

muestra que si G(x*) contiene ciclos no negativos

entonces x * debe ser una solución óptima.

4.3.2. Condición de Optimización de Costo Reducido


114

La condición de optimización antes descrita se la puede

escribir de la siguiente manera:

c ijd  c ij  d (i )  d ( j )  0 para todos los arcos (i, j )  A

c ijd es un costo reducido óptimo para el arco (i, j ) en el

sentido que mide los costos del arco relativo a las distancias

d (i ) y d ( j ) . Se observa que los costos reducidos de cada

arco son no negativos.

El costo reducido es igual a cero si el arco (i, j ) forma parte

de la ruta de menor longitud desde el nodo s al nodo j. Por

lo que si se conocen las distancias más cortas d ( j ) , la ruta

de mínimo costo estará conformada por los arcos con costo

reducido igual a cero. Pero falta verificar si esta condición

es aplicable a los problemas más generales de flujo de

costo mínimo.

Supongamos que se asocia un número real  (i ) , sin

restricción de signo, con cada nodo i  N. A dicho nodo lo


115

denominaremos el potencial del nodo i. Se definirá al costo

reducido del arco (i, j ) como:

cij  cij   (i)   ( j )

Este costo es aplicable a las redes residuales y a red

original. Los costos en las redes residuales se definirán

empleando cij en lugar de c ij . A continuación se presentan

dos propiedades importantes de los costos reducidos.

4.3.2.1. Propiedad

a) Para alguna ruta dirigida P, desde el nodo k al nodo l,

se tiene que:

 c
( i , j )P
ij  c
( i , j )P
ij   (k )   (l )

b) Para algún ciclo dirigido W,  c


( i , j )P
ij  c
( i , j )P
ij

En base a estas propiedades es posible obtener una forma

alternativa de la condición de optimización de ciclo

negativo.

Una solución factible x * es una solución óptima del

problema de flujo de costo mínimo sí solo sí algún conjunto


116

de nodos potenciales  satisface las siguientes

condiciones de optimización de costo reducido:

cij  0 para cada arco (i, j ) en G(x*)

4.3.2.1.1. Prueba

Supongamos que una solución x * satisface las

condiciones mencionadas. Por lo tanto  c


( i , j )W
ij  0 para

cada ciclo dirigido W en G(x*). Debido a las propiedades

anteriores se cumple que:

 c
( i , j )W
ij  c
( i , j )W
ij 0

de esta forma se comprueba que G(x*) contiene ciclos no

negativos.

Para demostrar lo inverso, supondremos que para la

solución x * , G(x*) contiene ciclos no negativos.

Supongamos que d (.) las distancias de las rutas más

cortas, desde el nodo l hacia los demás nodos en G(x*).


117

Hay que tomar en cuenta que si la red contiene ciclos no

negativos, las distancias d (.) están bien definidas y

satisfacen las condiciones d ( j )  d (i )  c ij para cada

arco (i, j ) en G(X*) . Estas desigualdades se pueden

escribir como cij  (d (i))  (d ( j ))  0 o c ij  0 , si


es que se define   d . Por lo que la solución x *


satisface las condiciones de optimización de costo

reducido.

Las condiciones de optimización de costo reducido

tienen una interesante interpretación económica.

Supongamos que se interpreta a c ij como el costo de

transportar una unidad de un artículo desde el nodo i al

nodo j a través del arco (i, j ) . A  (i)   (i) se lo

interpretará como el costo de obtener una unidad del

artículo en el nodo i.

De acuerdo a esto se tiene que c ij   (i ) es el costo del

artículo en el nodo j, si se lo obtiene en el nodo i y se lo

transporta al nodo j. La condición de optimización de


118

costo reducido, c ij   (i)   ( j )  0 o de forma

equivalente  ( j )  cij   (i) , establece que el costo de

obtener el artículo en el nodo j, no es mayor que si

obtuviéramos el artículo en el nodo i y lo transportáramos

del nodo i al nodo j. El costo en el nodo j podría ser más

pequeño que c ij   (i ) debido a que es posible que

exista otra forma de transportar un artículo del nodo i al

nodo j a través de otros nodos.

4.3.3. Condiciones de Optimización Complementarias

A continuación se presenta una condición de optimización

en términos de la red original.

4.3.3.1. Teorema de Condiciones de Optimización

Complementarias

Una solución factible x* es una óptima solución del

problema de flujo de costo mínimo sí solo sí para un

conjunto de nodos potenciales  , los costos reducidos y


los valores de los flujos satisfacen las siguientes

condiciones de optimización para cada arco (i, j )  A:


119

1.- Si c ij  0 , entonces x ij  0
 

2.- Si 0  x ij  u ij , entonces c ij  0
 

3.- Si c ij  0 , x ij  u ij
 

4.3.3.1.1. Prueba

En la prueba se demostrará que las condiciones

anteriores son equivalentes a las condiciones de

optimización de costo reducido.

Para establecer este resultado probaremos que si los

potenciales de los nodos  y el vector de flujo x

satisfacen las condiciones de optimización de costo

reducido entonces ellos deben satisfacer las condiciones

expresadas en este teorema. Para esto consideraremos

las tres posibilidades para algún arco (i, j )  A.

Caso 1. Si c ij  0 , la red residual no puede contener al


arco (j,i), porque c ji  c ij  0 para ese arco, lo que


 
120

contradice las condiciones de optimización de costo

reducido. Por lo tanto x ij  0 .


Si 0  x ij  u ij , la red residual contiene a



Caso 2.

ambos arcos (i, j ) y ( j , i ) . Las condiciones de

optimización de costo reducido implican que c ij  0 y


c ji  0 . Pero debido a que c ji  c ij , esas

desigualdades implican que c ji  c ij  0 .


 

Caso 3. Si c ij  0 , la red residual no puede contener al


arco (i, j ) porque c ij  0 para ese arco, lo que

contradice a las condiciones de optimización de costo

reducido. Por lo tanto x ij  u ij .


De esta manera se concluye la demostración del

teorema.

4.4. Dualidad del Problema de Flujo de Costo Mínimo

Los problemas de programación lineal son denominados

problemas primales y a cada uno es posible asociar otro problema

relacionado o dual. Por ejemplo el máximo valor de la función


121

objetivo del problema dual equivale al mínimo valor de la función

objetivo para el problema primal. A continuación se establecerán

los resultados de la dualidad correspondientes al problema de flujo

de costo mínimo.

Al formular el problema dual de un problema primal es necesario

asociar una variable dual con cada restricción del problema primal,

excepto con las restricciones de no negatividad de flujo en los

arcos. Con cada restricción de balance de masa del problema de

flujo de costo mínimo se asocia la variable dual  (i ) y la variable

 i con cada restricción de capacidad de los arcos (i, j ) . Por lo

que el problema dual de flujo de costo mínimo queda establecido de

la siguiente forma.

w( ,  )   b(i ) (i )  u  ij ij
iN ( i , j )N

Sujeto a:

 (i)   ( j )   ij  cij para cada arco (i, j )  A

 ij  0 para cada arco (i, j )  A y  (i ) es irrestricto en signo


122

para j  N

A continuación se presentan dos teoremas acerca de la teoría de

dualidad en el problema de flujo de costo mínimo.

4.4.1. Teorema de Dualidad Débil

Sea z (x) el valor de la función objetivo para alguna solución factible x

del problema de flujo de costo mínimo y sea w( ,  ) el valor de la

función objetivo para alguna solución factible de su problema dual.

Entonces w( , )  z ( x) .

4.4.1.1. Prueba

Si se multiplica a ambos miembros de la siguiente desigualdad.

 (i)   ( j )   ij  cij

Por x ij y se suman para cada arco (i, j )  A se obtiene la

expresión:

 ( (i)   ( j )) x
( i , j ) A
ij  
( i , j ) A
ij xij  c
( i , j ) A
ij xij
123

Se tiene que cx  c x 

 ( (i)   ( j)) x
( i , j )A
ij
, debido a que

cij  cij   (i )   ( j ) . Además cx  c  x   b(i ) (i ) . Por lo


iN

tanto la desigualdad queda de la siguiente manera

 b(i) (i)   
( i , j ) A ( i , j ) A
ij u ij  c
( i , j ) A
ij xij

Se observa que el lado izquierdo de la desigualdad es la función

objetivo dual y el lado derecho es la función objetivo primal, por

lo que se ha demostrado el teorema. A partir del resultado

anterior, se puede concluir que si para alguna solución dual

w( , ) y para una solución primal x las funciones objetivo

tienen el mismo valor, entonces son soluciones óptimas del

problema dual y del problema primal respectivamente. La

interrogante que se plantea es la existencia de tales soluciones,

para responderla en primer lugar se deben eliminar las variables

duales  ij . De acuerdo a la definición de costo reducido es

posible escribir la desigualdad  (i)   ( j )   ij  cij , de la

siguiente manera:

 ij  cij
124

En la función objetivo dual el coeficiente asociado a la variable

dual es  u ij y nuestro propósito es maximizar el valor de la

función objetivo, por lo que la variable dual debería tener el

valor más pequeño posible, entonces:

 ij  max{ 0,cij }

Si se conocen los valores de las variables  (i ) es posible

calcular los valores de las variables  ij . Según lo anterior la

función objetivo dual queda de la siguiente manera:

Maximizar

w( )   b(i) (i)   max{0,c  }u ij ij


iN ( i , j )N

El problema dual consiste en encontrar el vector  que optimice


esta función. El siguiente teorema demostrará la existencia de

las soluciones óptimas mencionadas.

4.4.2. Teorema de Dualidad Fuerte


125

El problema de flujo de costo mínimo siempre tiene una solución x * y

el problema de flujo de costo mínimo dual tiene una solución que

satisface la propiedad que z ( x*)  w( )

4.4.2.1. Prueba

En esta prueba se emplean las condiciones de optimización

complementarias. Sea x * una solución óptima del problema de

flujo de costo mínimo. Según tales condiciones, esta solución junto

con un vector  satisfacen las condiciones de optimización


complementarias. Como consecuencia se tiene que la solución

satisface la siguiente condición:

 c ij x ij  max{ 0,c ij }u ij

Consideremos los siguientes casos:

1) c ij  0

2) c ij  0

3) c ij  0

126

Según las condiciones de optimización complementarias, en los dos

primeros casos los miembros de la condición anterior son iguales a

cero y en el tercer caso ambos son iguales a  c ij u ij


Sustituyendo la expresión  c ij x ij  max{ 0,c ij }u ij en la función

objetivo dual:

w( )   b(i) (i)   max{0,c  }u ij ij


iN ( i , j )N

Se obtiene como resultado:

w( )   b(i) (i)   c x ij ij * c ij xij *  z ( x*)


iN ( i , j )N ( i , j )A

Por lo que se demuestra el teorema.

4.5. Algoritmo de la Ruta Sucesiva más Corta

Este algoritmo en cada paso selecciona un nodo s con exceso

de oferta, es decir, una cantidad de oferta que todavía no es

enviada a un nodo de demanda, y un nodo t con demanda

insatisfecha y envía flujo desde el nodo s al nodo t a través de

la ruta con la distancia más corta. El algoritmo termina cuado

la solución actual satisface todas las restricciones.


127

Para describir el algoritmo, introduciremos el concepto de

pseudoflujos. Un pseudoflujo es una función x: A


 R 
que satisface solo las restricciones de capacidad y no

negatividad. No necesita satisfacer las restricciones de

balance de masa.

Para algún pseudoflujo x , definimos el desequilibrio del nodo i

como sigue:

e(i )  b(i )  x ji
´ j :( j , i ) A
 x ij
 j :( i , j ) A
para cada i  N

Si e(i )  0 para algún nodo i, nos referimos a e(i ) como el

exceso del nodo i; si e(i )  0 denominamos a  e(i ) como el

déficit del nodo i. Uno nodo está balanceado si e(i )  0 .

Sean E y D los conjuntos de los nodos con excesos y déficit

de flujo en la red respectivamente.

Se observa que:

 e(i)   b(i)  0
iN iN

y
128

 e(i)   e(i)
iE iD

Por lo tanto si la red contiene un nodo de exceso, también

debe contener un nodo de déficit. La red residual

correspondiente a un pseudoflujo es definida de la misma

manera que para un flujo.

A continuación se presenta un lema, el cual se plantea

utilizando las condiciones de optimización de costo reducido.

4.5.1. Lema

Suponga que un pseudoflujo (o un flujo) x satisface las

condiciones de optimización de costo reducido con respecto

a algunos potenciales de los nodos  . Supongamos que el


vector d representa las rutas más cortas desde el nodo s a


todos los otros nodos en la red residual G(x) con c ij como la

longitud de una arco (i, j ) . Entonces las siguientes

propiedades son válidas:


129

a) El pseudoflujo x también satisface las condiciones de

optimización de costo reducido con respecto a los

potenciales de los nodos ' .


b) Los costos reducidos c ij son cero para todos los arcos (i, j )

en las rutas más cortas desde el nodo s a cada uno de los

otros nodos.

4.5.1.1. Prueba

Ya que el flujo x satisface las condiciones de optimización

de costo reducido con respecto a  , c ij  0 para cada

arco (i, j ) en G(x). Además ya que el vector representa


las distancias de las rutas más cortas con c ij como

longitudes de los arcos, satisface las condiciones de

optimización de la ruta más corta, es decir:

d ( j )  d (i )  c ij para todos los arcos (i, j ) en G(x)

Substituyendo c ij  c ij   (i )   ( j ) en la expresión

anterior, obtenemos:
130

d ( j )  d (i)  cij   (i)   ( j )

Alternativamente, cij  ( (i)  d (i))  ( ( j )  d ( j ))  0 ,

o c ij  0 . Esta conclusión establece la parte a) del lema.


Consideremos la ruta más corta desde el nodo s hasta

algún nodo i. Para cada arco (i, j ) , en esta ruta

d ( j )  d (i )  c ij . Substituyendo c ij  c ij   (i )   ( j )

en esta ecuación obtenemos c ij  0 .



Esta conclusión

establece la parte b) del lema.

4.5.2. Lema

Suponga que un pseudoflujo (o un flujo) satisface las

condiciones de optimización de costo reducido y obtenemos

x I a partir de x , enviando flujo a lo largo de la ruta más

corta desde el nodo s a algún nodo k; entonces x I también


satisface las condiciones de optimización de costo reducido.

4.5.2.1. Prueba
131

Definamos los potenciales  y  ' como en el lema


anterior. La demostración de tal lema implica que para

cada arco (i, j ) en la ruta más corta P desde el nodo s

hasta el nodo k.

Aumentando flujo a través de algún arco, añadiría el arco

inverso a la red residual. Pero ya que c ij  0 para cada


arco (i, j )  P , c ji  0 y el arco (i, j ) también satisface


las condiciones de optimización de costo reducido.

Los potenciales de los nodos juegan un papel muy

importante en este algoritmo, el cual se describe a

continuación:

4.5.3. Descripción del Algoritmo Ruta Sucesiva más Corta

Comienzo

x =0 y   0

e(i)  b(i) para todo i  N

inicializar los conjuntos E  i : e(i )  0 y

D  i : e(i )  0
132

Mientras E   hacer

Comienzo

Seleccione un nodo k  E y un nodo l  D ;

Determine las distancias de las rutas más cortas

desde el nodo K a todos los otros nodos en G(x)


con respecto a los costos reducidos c ij ;

Defina a P como la ruta más corta desde del nodo k

al nodo l;

Actualice     d;

  min e(k ),e(l ), min( rij ) : (i, j )  P;

incrementar  unidades de flujo a lo largo de la ruta


P;

Actualizar x, G(x), E, D y los costos reducidos;

Fin;

Fin;

A continuación justificaremos el algoritmo de flujo de costo

mínimo. Para iniciar el algoritmo, asignamos x =0, el cual

es un pseudoflujo factible. Para un pseudoflujo de cero se

tiene que G(x)=G. Se observa que esta solución junto con

  0 satisfaces las condiciones de optimización de costo


133

reducido porque c ij  c ij  0 para arco (i, j ) en la red

residual G(x), lo que concuerda con los supuestos del

problema de flujo de costo mínimo. Se observa que con

tal de que algún nodo tenga un desequilibrio diferente de

cero, ambos conjuntos E y D deben ser no vacíos desde

que la suma total de los excesos es igual a la suma total

de los déficit. De esta manera, hasta que todos los nodos

estén balanceados, el algoritmo continua siempre

identificando un nodo de exceso k y un nodo de déficit l.

Uno de los supuestos del problema, indica que la red

residual contiene una ruta dirigida desde el nodo k a cada

uno de los otros nodos, incluyendo el nodo l. Por lo tanto

las distancias de las rutas más cortas d (.) , están bien

definidas. Cada iteración del algoritmo resuelve un

problema de la ruta más corta con longitudes de los arcos

no negativos y estrictamente decrementa el exceso de

algún nodo y también el déficit de algún otro nodo.

Consecuentemente si U es el límite superior sobre la

oferta más grande de algún nodo, el algoritmo terminaría

en a lo mucho nU iteraciones.
134

Este algoritmo selecciona un nodo de exceso k y utiliza el

algoritmo de Dijkstra para identificar las rutas más cortas

desde el nodo k hacia los demás nodos y aumenta el flujo

a través de la ruta más corta desde el nodo k, hasta el

nodo l. No es necesario determinar la ruta más corta

desde el nodo k hasta todos los demás nodos, es

suficiente la ruta más corta desde el nodo k hasta un nodo

de déficit l. Por lo tanto el algoritmo de Dijkstra terminaría

si queda etiquetado permanentemente el nodo de déficit l.

En este punto podemos modificar los potenciales de los

nodos de la siguiente manera:

Si el nodo i es etiquetado
 (i )  d (i ) permanentemente

 (i )  
 (i )  d (l ) Si el nodo i es etiquetado

temporalmente

4.5.4. Algoritmo de Dijkstra

Este algoritmo encuentra las rutas más cortas desde un nodo

fuente s, hasta todos los demás nodos en la red, con costos

asociados a sus arcos no negativos. El algoritmo mantiene


135

una distancia d (i ) con cada nodo i, la cual es un límite

superior sobre la longitud de la ruta más corta al nodo i. En

algún paso intermedio el algoritmo divide al conjunto de

nodos en dos grupos: el primero denominado etiquetados

permanentemente o permanentes y el segundo grupo

denominados etiquetados temporalmente o temporales.

La etiqueta de distancia para algún nodo permanente

representa la distancia más corta desde el nodo fuente a tal

nodo. Para algún nodo temporal la etiqueta de distancia es

el límite superior de la distancia más corta a ese nodo.

La idea del algoritmo es abrirse paso desde el nodo s y

permanentemente etiquetar nodos en el orden de sus

distancias desde el nodo s. Inicialmente se le asigna a s una

etiqueta permanente de cero y a cada uno de los demás

nodos se les asigna una etiqueta igual a infinito.

En cada iteración, la etiqueta de un nodo i es su distancia

más corta desde el nodo fuente a lo largo de una ruta cuyos

nodos interiores están todos, permanentemente etiquetados.

El algoritmo selecciona un nodo i con la mínima etiqueta


136

temporal, la hace permanente y se extiende desde ese nodo,

es decir analiza los arcos en A(i) para actualizar las etiquetas

de distancia de los nodos adyacentes. El algoritmo finaliza

cuando todos los nodos han sido etiquetados como

permanentes. El algoritmo construye un árbol con raíz desde

el nodo fuente que abarca los nodos etiquetados con

distancias finitas. El algoritmo mantiene los nodos

empleando índices o punteros. Es decir si (i, j )  Árbol

entonces pred(j)=i. Además se mantiene la propiedad de que

para cada arco (i, j ) del árbol se tiene que d ( j )  d (i)  cij .

En el algoritmo de Dijkstra nos referimos a la operación de

seleccionar la mínima distancia temporal como operación de

selección del nodo. A la operación de verificar si las

etiquetas de los nodos satisfacen la condición de que

d ( j )  d (i)  cij , si es así se realiza la asignación

d ( j )  d (i)  cij , la que se conoce como la operación de

actualización de distancia. A continuación se presentan los

pasos que conforman el algoritmo de Dijkstra.

4.5.4.1. Descripción del Algoritmo de Dijkstra


137

Comienzo

S   ; S  N;

d (i)   para cada nodo i  N ;

d ( s)  0 y pred ( s)  0 ;

Mientras cardinalidad(S)<n hacer

Comienzo

Sea i  S un nodo para el cual

d (i)  min{ d ( j ) : j  S} ;

S  S  {i} ;

S  S  {i}

Para cada (i, j )  A(i ) hacer

Si d ( j )  d (i )  c ij entonces

d ( j )  d (i)  cij y pred(j)=i

Fin;

Fin;

En ciertos problemas de flujo no es necesario determinar la

ruta más corta desde un nodo fuente s hasta cada uno de

los demás nodos en la red, sino hasta un nodo específico t.


138

Por lo que se presentan las siguientes variantes del

algoritmo de Dijkstra.

4.5.4.2. Algoritmo de Dijkstra hacia Atrás

En el algoritmo de Dijkstra se determina la ruta más corta

E desde un nodo s a cada uno de los nodos en N  {s} .

Suponga que se desea determinar la ruta más corta desde

cada uno de los nodos en N  {t} hasta el nodo de llegada

t. Para resolver este problema se emplea una modificación

del algoritmo de Dijkstra. El algoritmo de Dijkstra hacia

I
atrás mantiene una distancia d ( j ) con cada nodo j, el

cual es el límite superior de la longitud de la ruta más corta

desde el nodo j hasta el nodo t. De forma análoga este

algoritmo designa un conjunto de nodos llamado

permanentemente etiquetado S ' y el conjunto restante de

nodos llamado temporalmente etiquetado S '.

En cada iteración el algoritmo designa con la etiqueta con

la mínima distancia temporal, denominada d ' ( j ) , como

permanente. Se examina cada arco de llegada (i, j ) y

modifica la etiqueta de la distancia del nodo i a


139

min{ d ' (i), c ij  d ' ( j )} . El algoritmo termina cuando

todos los nodos se han convertido en etiquetados

permanentemente.

4.5.4.3. Algoritmo de Dijkstra Bidireccional

Este algoritmo se emplea para determinar la ruta más corta

desde un nodo fuente s hasta un nodo de llegada t. Para

resolver este problema y eliminar algunos cálculos se

podría dar por finalizado el algoritmo de Dijkstra tan pronto

como se haya seleccionado un nodo t S .

En el algoritmo bidireccional de Dijkstra simultáneamente

se aplica el algoritmo de Dijkstra convencional, desde el

nodo s y el algoritmo de Dijkstra hacia atrás desde el nodo

t. Alternativamente designa un nodo en S y un nodo en S '


como permanente hasta que ambos algoritmos hayan

etiquetado permanentemente el mismo nodo, llamado el

nodo k por lo que se tendría que S  S '  {k} .

Supongamos que P(i) denota la ruta más corta desde el

nodo s al nodo i  S encontrada por el algoritmo de


140

Dijkstra tradicional y sea P’(j) la ruta más corta desde el

nodo s al nodo j  S ' al nodo t encontrado por el algoritmo

de Dijkstra. al nodo t encontrado por el algoritmo de

Dijkstra.

También podría gustarte