You are on page 1of 59

BOLIVAR

UNIVERSIDAD SIMON
Decanato de Estudios de Postgrado
Maestra en Matematicas

TRABAJO DE GRADO

APROXIMACIONES LINEALES A TROZOS USANDO ALGORITMOS


POLINOMIALES PARA FLUJOS EN REDES CON COSTOS NO LINEALES

por

David A. Vasquez Maldonado

Abril 2009

BOLIVAR
UNIVERSIDAD SIMON
Decanato de Estudios de Postgrado
Maestra en Matematicas

APROXIMACIONES LINEALES A TROZOS USANDO ALGORITMOS


POLINOMIALES PARA FLUJOS EN REDES CON COSTOS NO LINEALES

Trabajo de Grado presentado a la Universidad Simon Bolvar por


David A. Vasquez Maldonado

Como requisito parcial para optar al grado


Magster en Matematicas
Realizado con la tutora del Profesor
Bernardo Feijoo Perez

Abril 2009

RESUMEN
En el area de la programacion matematica, el problema de flujo de mnimo costo en
redes (FMC) ha logrado separarse del grupo clasico de problemas lineales, esto debido a
sus aplicaciones en diferentes areas de la industria, la existencia de algoritmos altamente
eficientes para su resolucion y la representacion grafica asociada a ellos; por lo que se ha
generado gran interes en el area. La generalizacion de este problema clasico que consiste
en reemplazar la funcion objetivo por una no lineal tambien es de gran interes por sus
variadas aplicaciones.
Una tecnica desarrollada para la resolucion de estos u
ltimos problemas consiste en
aproximar la funcion no lineal con una funcion lineal a trozos y generar subproblemas
lineales. Estos subproblemas lineales han sido resueltos con un algoritmo cuyo tiempo de
ejecucion teorico no es polinomial. En procura de alcanzar una mejora tanto en el tiempo
de ejecucion como en los resultados, se planteo resolver los subproblemas lineales con un
algoritmo que tenga un tiempo de ejecucion polinomial, manteniendo el procedimiento que
permite aproximar la funcion no lineal.
La tecnica elegida fue la de escalamiento de costos. Se implemento todo el procedimiento de resolucion, desde la obtencion de un punto inicial, el procedimiento para generar las
aproximaciones hasta dos versiones muy distintas de la tecnica de escalamiento; lo que
permitio ademas, realizar una breve comparacion entre dichas tecnicas. Se obtuvieron
resultados aceptables pero no se logro mejorar los tiempos de ejecucion.

Palabras Claves: Flujo en Redes, Escalamiento de Costos, Programacion No Lineal,


Aproximaciones Lineales a Trozos

Indice general
1. Introducci
on

2. Marco Te
orico
2.1. Preliminares . . . . . . . . . . . . . . . . . . . .
2.2. Aproximacion Lineal Separable a Trozos . . . .
2.3. Flujo en Redes . . . . . . . . . . . . . . . . . .
2.3.1. Optimalidad Aproximada . . . . . . . .
2.4. Flujo de Mnimo Costo . . . . . . . . . . . . . .
2.4.1. Tecnica out-of-kilter con Flujo Maximal
2.4.2. Escalamiento de costo . . . . . . . . . .

.
.
.
.
.
.
.

5
5
6
9
11
13
13
23

3. Implementaci
on
3.1. Algoritmo FMC1 (FMC.1) . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2. Algoritmo FMC2 (FMC.2) . . . . . . . . . . . . . . . . . . . . . . . . . . .

25
27
31

4. Resultados Num
ericos
4.1. Problemas Resueltos . . .
4.1.1. Grupo 1 . . . . . .
4.1.2. Grupo 2 . . . . . .
4.1.3. Grupo 3 . . . . . .
4.2. Variantes del FMC.2 . . .
4.3. Resultados . . . . . . . . .
4.3.1. Problema Grupo 1
4.3.2. Problemas Grupo 2
4.3.3. Problemas Grupo 3

34
36
36
37
37
40
40
41
44
44

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

5. Conclusiones y Recomendaciones

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

47

Indice de figuras
2.1.
2.2.
2.3.
2.4.

Aproximacion Lineal por trozos . . . . . . .


Ejemplo de un problema de FMC (Red R) .
Ilustracion de las condiciones de optimalidad
Red R (transformada) . . . . . . . . . . . .

.
.
.
.

7
10
12
19

4.1. Red del Problema del Grupo 1 . . . . . . . . . . . . . . . . . . . . . . . . .


4.2. Ejemplo Red con l = 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

37
39

ii

. . . . . . .
. . . . . . .
para el arco
. . . . . . .

. . .
. . .
(i,j)
. . .

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

Indice de cuadros
4.1.
4.2.
4.3.
4.4.
4.5.
4.6.
4.7.
4.8.

Nomenclatura de los problemas . . .


P1. Mejor Resultado . . . . . . . . .
P1. Prueba con diferentes valores h .
P2. Mejor Resultado . . . . . . . . .
P3. Mejor Resultado . . . . . . . . .
P8 FMC.1. Con y Sin Escalamiento .
P4 al P12. Mejores Resultados . . . .
FMC.2.2 con = 0,8 para P4 a P12

iii

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

42
43
43
44
44
45
46
46

Captulo 1
Introducci
on
En el area de la Programacion Matematica, el problema de flujo de mnimo costo en
redes (FMC) ha logrado destacarse del grupo clasico de problemas lineales, esto debido a
sus aplicaciones en diferentes areas de la industria, la existencia de algoritmos altamente
eficientes para su resolucion y la representacion grafica asociada a ellos (lo que permite un
rapido entendimiento del problema), lo que los hace de gran interes en el area. Resolver
un problema FMC consiste en determinar una distribucion de un insumo a traves de una
red, satisfaciendo las demandas y ofertas de los nodos y respetando las capacidades de los
arcos, de manera de minimizar el costo total de distribucion. Para obtener un tratamiento
completo sobre este problema y sus aplicaciones se puede consultar, por ejemplo, Ahuja,
Magnanti y Orlin [1].
La generalizacion de este problema clasico que consiste en reemplazar la funcion objetivo por una no lineal, tambien es de gran interes por sus variadas aplicaciones. En
particular, nos interesan problemas de la forma:
mn f (x)
s.a. Ax = b
x0

(FMCNL)

donde f : Rn R es una funcion convexa, continuamente diferenciable, A es una matriz


de incidencia nodo-arco m n, x Rn y b Rm .

Para resolver estos problemas se han desarrollado diversos metodos que tratan de
aprovechar la estructura de red presente en las restricciones. Uno de los primeros fue el
metodo de Frank-Wolfe, que es un proceso iterativo que usa la linearizacion de la funcion
objetivo alrededor del iterado actual. Los subproblemas que se generan son todos de
tipo FMC y se resuelven eficientemente. A pesar de su sencillez, no se considera practico
aplicarlo en problemas de gran escala por su muy lenta convergencia.
Posteriormente se desarrollan metodos con tecnicas ligeramente mas complejas, como
la de aproximaciones lineales a trozos y otras que utilizan informacion de primer orden y
tambien de segundo orden.
La primera de dichas tecnicas se ha usado con el proposito de mejorar la calidad de la
aproximacion y mantener los subproblemas dentro de la clase FMC. Aqu se encuentran
las aproximaciones globales lineales a trozos y las aproximaciones locales lineales a trozos.
En la de aproximaciones globales, la funcion objetivo se aproxima por una funcion
lineal a trozos, basada en el iterado actual y cubriendo todo el dominio de la funcion.
Dicha aproximacion se va refinando en cada iteracion reduciendo el tama
no de paso. Esto
trae como consecuencia que la dimension de los subproblemas y el n
umero de evaluaciones
funcionales se incrementa vertiginosamente, disminuyendo la eficiencia del algoritmo y
presentando problemas de almacenamiento. Esta tecnica mantiene
los subproblemas 
en

n
P
la clase FMC solo en el caso de funcion objetivo separable es decir, f (x) = fi (xi ) ,
i=1

resolviendose eficientemente.
Con el uso de las aproximaciones locales se solventa el problema de la dimensionalidad
asociado a las aproximaciones globales lineales a trozos. Autores como Meyer [9], Kao
y Meyer [7] proponen metodos que para el caso separable, producen subproblemas que
tienen un tama
no fijo que depende del n
umero de segmentos en la aproximacion y que
poseen estructura de red. Su principal desventaja es que el progreso de un iterado al
siguiente esta limitado a un peque
no entorno alrededor del primero. Posteriormente, con
la finalidad de resolver esta dificultad, Kamesan y Meyer [6] para el caso separable, usan
2

la idea de aproximaciones globales implcitas basadas en una aproximacion local que se


va adaptando para, en caso de ser necesario, cubrir toda la region factible, manteniendo
fijo el tama
no de los subproblemas y su estructura de red. La experiencia computacional
mostro buenos resultados para problemas FMCNL separables de mediana escala.
La generalizacion a casos no separables la realizan Feijoo y Meyer [4],[5] con el uso de
aproximaciones globales implcitas, obteniendo buenos resultados en problemas de peque
na
escala.
Murtagh y Saunders [10] implementan en el paquete de optimizacion MINOS un algoritmo tipo Gradiente Reducido que resuelve problemas generales con funcion objetivo
no lineal y restricciones lineales. Hace uso de un metodo de tipo Cuasi-Newton para la
b
usqueda de direcciones, logrando un buen comportamiento computacional pero presentando dificultades de almacenamiento para problemas de gran escala. Beck, Lasdon y
Engquist [2] proponen una mejora del algoritmo anterior con procedimientos de b
usqueda de direcciones basados en metodos de gradiente conjugado y usando eficientemente
la estructura de red de los datos. Se concentran en la implementacion computacional y
muestran resultados prometedores para problemas de redes separables y no separables.
Con el uso de metodos Cuasi-Newton, tambien se encuentra el algoritmo propuesto
por Toint y Tuyttens [12],[13] implementado en la subrutina LSNNO, usando aproximaciones cuadraticas de la funcion objetivo para la busqueda de direcciones y para resolver
problemas con funcion objetivo parcialmente separable, es decir

f (x) =

n
P

fi (x) , y fi (x + w) = fi (x)

i=1

con w en un subespacio lineal de Rn , x Rn y i = 1, .., n.


Por otro lado, existen tecnicas muy eficientes para resolver los problemas FMC (problemas cuya funcion objetivo es lineal). Esta una adaptacion del Simplex para programacion
lineal conocida como Simplex para redes [1], cuya tasa de convergencia en su peor caso,
3

es exponencial; sin embargo, en la practica es un algoritmo altamente competitivo. Tambien existen algoritmos cuya tasa de convergencia es polinomial, entre estos se encuentran
los algoritmos de Escalamiento de Costo que consisten en generar y resolver problemas
auxiliares con variacion en los costos originales.
El objetivo general del presente trabajo es alcanzar una mejora tanto en el resultado
como en el tiempo de ejecucion al resolver problemas del tipo FMCNL
Para esto, se plantea como metodologa combinar las tecnicas desarrolladas por Feijoo
y Meyer [4],[5] para funciones no separables, con la tecnica de Escalamiento de Costos
para resolver los subproblemas que se originan en cada iteracion.
En el captulo 2 se explicara en detalle el marco teorico necesario para implementar la
tecnica de linealizacion separable a trozos, as como tambien dos versiones del metodo de
Escalamiento de Costo. En un principio se planifico trabajar con una sola version, pero
debido a los resultados numericos obtenidos se decidio implementar una segunda version.
En el tercer captulo se presenta el detalle de los algoritmos implementados. En el
captulo siguiente se encuentran los resultados numericos y en el quinto captulo las conclusiones del presente trabajo.

Captulo 2
Marco Te
orico
2.1.

Preliminares

Para familiarizar al lector con terminos, definiciones y resultados generales sobre grafos,
se presentan los utilizados en este trabajo.
Un grafo dirigido G = (N, A) consiste de un conjunto N de n nodos y de un conjunto
A de m arcos cuyos elementos son pares ordenados de nodos.
Un arco (i, j) tiene dos extremos, i y j. El nodo i es la cola (nodo inicial) y el nodo j
es la cabeza (nodo terminal). Se dice que (i, j) es incidente a i y tambien a j. Tambien se
dice que (i, j) es un arco saliente de i y un arco entrante a j.
Una matriz de incidencia nodo-arco E asociada a un grafo G = (N, A) es una matriz
n m que representa el grafo completo de forma matricial, donde cada columna Eij de E
corresponde al arco (i, j) y tiene un 1 en la fila i, un 1 en la fila j y el resto de entradas
son ceros.
Un grafo G0 = (N 0 , A0 ) es un subgrafo de un grafo G = (N, A) si N 0 N y A0 A.
Un camino en un grafo dirigido G = (N, A) es un subgrafo de G que consiste de una
secuencia de nodos y arcos sin repeticiones, es decir, una secuencia i1 a1 i2 a2
ir1 ar1 ir que satisface la propiedad de que para 1 k r 1, o bien ak = (ik , ik+1 )
A (arco a favor del camino) o bien ak = (ik+1 , ik ) A (arco en contra del camino). Para
5

un camino P , denotaremos por P + al conjunto de arcos a favor y por P al conjunto de


arcos en contra.
Un ciclo es un camino i1 i2 ir1 ir junto con el arco (ir , i1 ) o el arco (i1 , ir ).
Un corte s t es una particion del conjunto de nodos N en dos conjuntos S y T tales
que s S y t T. Se denota por [S, T ]. Un arco (i, j) (S, T ) si i S y j T .

2.2.

Aproximaci
on Lineal Separable a Trozos

En este subcaptulo se expondran las ideas generales de la aproximacion lineal a trozos


para poder aplicarlas al caso FMCNL.
Sea f una funcion convexa sobre el conjunto compacto y convexo F Rn . Ademas,
se asume que H = {x | l x u} es tal que F H y f es Lipschitz continua ( L > 0
tal que x, y H, |f (x) f (y)| L kx yk) y diferenciable en H, se quiere resolver el
siguiente problema:

mn
f (x)
sujeto a: x F

(2.1)

Dado z H, se puede aproximar f por una funcion separable sz , definida de manera


tal, que ambas coinciden en las direcciones de los ejes coordenados a partir del punto z.
El metodo para definir sz a utilizar es el desarrollado por Feijoo y Meyer [4],[5].
Por simplicidad notacional en la formulacion de las aproximaciones se define la funcion:
hz : Rn R
hz (x) = f (x + z) f (z)
cuya grafica es una traslacion de f por el vector (z, f (z)), es decir, el punto (z, f (z)) se
traslada al origen.

Sea z una solucion factible del problema (2.1) la aproximacion separable de hz se define
de la siguiente manera:

sz (x) :=

n
X

s(i)
z (xi )

i=1
(i)

donde sz (xi ) = hz (xi ei ) y ei es el i esimo vector unitario canonico, es decir, todas las
componentes excepto la i esima son 0 y la i esima es 1.

Figura 2.1: Aproximacion Lineal por trozos

La funcion sz cumple con las siguientes propiedades:


1. Es separable, Lipschitz continua, convexa y diferenciable sobre H;
2. sz (0) = hz (0) = 0;
3. sz (0) = hz (0) = f (z).
La demostracion de estas propiedades se encuentra en [4],[5]
Luego, cada funcion separable se aproxima mediante la siguiente funcion lineal.
Como se aprecia en la figura 2.1, se puede aproximar sz en [a, b] con el segmento que
une dichos puntos. Una formula para ese segmento se obtiene al aplicar la ecuacion de la
7

recta (y = m(x x0 ), con m la pendiente de la recta) restringida al segmento [a, b], en


este caso, la pendiente se denota por Cik
w = Cik (xi (zi + (k 1)i ))
Por lo tanto, el valor de xi en la funcion lineal, se obtiene por:
k
fi (zi, i , xi ) = s(i)
z (zi + (k 1)i ) + Ci (xi (zi + (k 1)i )) = a + w

Generalizando lo anterior, con = (1 , , n ) > 0, se tiene:

fi (z, , xi ) =

(i)
sz (zi + (k 1)i ) +

Ci+k (xi (zi + (k 1)i ))


para (k 1)i xi ki
k = 1, 2, , ki

(i)

sz (zi (k 1)i ) +

Cik (xi + (zi + (k 1)i ))


para ki xi (k 1)i
k = 1, 2, , ki0

Por otro lado, al calcular la pendiente del segmento [a, b] se tiene que
(i)

Cik

(i)

sz (zi + ki ) sz (zi + (k 1)i )


=
i

por lo que los valores Ci+k y Cik se obtienen de la siguiente manera


(i)

Ci+k =

(i)

sz (zi + ki ) sz (zi + (k 1)i )


i
(i)

Cik

(i)

s (z ki ) sz (zi (k 1)i )
= z i
i

con ki y con ki0 escogidos de tal manera que ki i = ui y ki0 i = li . (Por simplicidad
notacional, se asume que en cualquier iteracion todos los segmentos usados para construir
fi son iguales, aunque en la practica el tama
no de los segmentos cerca de las cotas definidas
por li y ui es generalmente menor que i ).

2.3.

Flujo en Redes

Los problemas de flujos en redes son problemas de optimizacion sobre grafos, en los
que se busca encontrar flujos que minimizan o maximizan cierta funcion objetivo.
Dentro de estos se encuentran los problemas de Flujo de Mnimo Costo (FMC), en los
cuales se trata de distribuir alg
un insumo desde nodos de oferta a nodos de demanda a
traves de nodos intermedios, sin exceder las capacidades de las conexiones; con el objetivo
de minimizar el costo total de movilizar dicho insumo (los nodos de oferta y de demanda
pueden ser tambien intermediarios de alguna cantidad de insumo). Tambien se encuentran
los problemas de Flujo Maximal (FM), los cuales consisten en determinar el maximo flujo
que puede moverse desde un nodo fuente hasta un nodo de destino. Los problemas FMC
y FM son lineales, por lo que son casos particulares de problemas de programacion lineal.
En los grafos donde se representa la estructura del problema, tambien se pueden presentar los datos y las variables del mismo. Para el caso FMC, dada G = (N, A), cada arco
(i, j) A tiene asociado un flujo xij que es el n
umero de unidades de flujo (insumo) que
van del nodo i al nodo j; una capacidad uij y una cota inferior lij que denotan la maxima y mnima cantidad de flujo que puede atravesar el arco, respectivamente; un costo cij
(constante) que representa lo que cuesta enviar una unidad de flujo del nodo i al nodo j,
este costo es unitario y lineal en el flujo. A su vez, cada nodo i N tiene asociado un
n
umero bi , que de ser positivo, representa la oferta del nodo y de ser negativo, se entiende
que se trata de una demanda de bi unidades de flujo. A los nodos de oferta nula se les
llama nodos de transbordo o intermedios.
Existen otros autores que interpretan el signo de bi de otra forma, como por ejemplo
en [3] si el valor es positivo significa que es la demanda a satisfacer y si el valor es negativo
que es la oferta existente.
En la siguiente figura (figura 2.2) se puede observar un problema de tipo FMC de 4
nodos y 6 arcos. En este ejemplo el arco (3, 2) tiene una capacidad de 1 unidad, presenta
9

0 unidades de flujo y un costo asociado de 2. La ausencia de un valor indicando la cota


inferior lij significa que su valor es 0. Esto u
ltimo aplica para todos los arcos.

Figura 2.2: Ejemplo de un problema de FMC (Red R)

Lo que se aprecia en la parte inferior derecha de la figura anterior denota la manera


en que se colocan los datos en la red.
Para los problemas FM, dada G = (N, A), cada arco (i, j) A solo tiene asociado un
flujo xij y una capacidad uij . En estos problemas se destacan dos nodos, el nodo fuente s
y el nodo destino t. El que x sea un flujo maximal significa que x es una distribucion de
flujo tal que maximiza el n
umero de unidades que se pueden mandar desde el nodo s al
nodo t. Si el arco (t, s) A se tiene una circulaci
on del flujo, es decir, todo el flujo que
sale de s retorna a s. En este caso no se toma en cuenta dicho arco al momento de calcular
un flujo maximal y se entiende que el maximo flujo de s a t equivale al maximo flujo en el
arco (t, s).
Para expresar el problema FMC en forma algebraica, se puede escribir:

10

mn

cij xij
P
xji = bi i N (a)

(i,j)A

Sujeto a:

xij

{j:(i,j)A}

(2.2)

{j:(j,i)A}

lij xij uij (i, j) A

(b)

Es de notar, que en el caso de usar la otra convencion de signos para los valores bi , los
sumandos de la ecuacion (2.2.a) cambian de signo.
Una condicion necesaria pero no suficiente para que estos problemas sean factibles
n
P
(exista un vector x que satisfaga las restricciones) es que se cumpla bi = 0, es decir, que
i=1

las ofertas y demandas esten balanceadas; una condicion que tiene sentido en la practica.
A cada nodo i N se asocia un n
umero i llamado el potencial del nodo i. Dado un
vector de potenciales = { 1 , 2 , . . . , i } se define el costo reducido (respecto a ) de un
arco (i, j) como cij = cij i + j .
Un flujo (solucion) factible x de (2.2) es aquel que cumple con las restricciones del
problema (2.2.a y 2.2.b). Se conoce que dicho flujo sera optimo si y solo s existe Rn
tal que para todos los arcos en A se cumplen las siguientes condiciones de optimalidad:
xij = uij
(a) si cij < 0

(b) si cij > 0


xij = lij
(c) si cij = 0 lij xij uij

2.3.1.

(2.3)

Optimalidad Aproximada

Un seudoflujo es un vector x que satisface solo las restricciones de capacidad (2.2.b),


sin necesidad de satisfacer el balance de masa (2.2.a).
Para cualquier seudoflujo x, se define el desequilibrio o exceso de un nodo i como:

i = bi +

xji

{j:(j,i)A}

11

xij
{j:(i,j)A}

para todo i N.
Si i > 0, se tiene un exceso en el nodo i y se dice que el nodo esta activo; si i < 0,
se tiene un deficit en el nodo i; y si i = 0, se tiene un balance en el nodo i.
Un flujo x o un seudoflujo x es llamado  o ptimo para alg
un  > 0 si para alg
un
vector de potenciales , el par (x, ) satisface las siguientes condiciones de optimalidad:

xij = uij
(a) si
cij < 

(b) si
cij > 

xij = lij

(c) si  cij  lij xij uij

(2.4)

Estas condiciones son una relajacion de las condiciones de optimalidad (2.3) y que
llegan a ser equivalentes cuando  = 0. Esta definicion recibe el nombre de optimalidad
aproximada. [1].
En la figura 2.3 se pueden comparar graficamente ambas condiciones. Las condiciones de optimalidad exacta implica que cualquier combinacion de (xij , cij ) que se encuentre sobre la lnea delgada mostrada en (2.3.a) es optima. Por otro lado, las condiciones
 optimalidad implican que cualquier combinacion de (xij , cij ) que se encuentre sobre la
lnea o dentro de la region formada en (2.3.b) es  optima.

Figura 2.3: Ilustracion de las condiciones de optimalidad para el arco (i,j)

12

2.4.

Flujo de Mnimo Costo

Para resolver esta clase de problemas existen varias tecnicas, entre las que se encuentran
una adaptacion del Metodo Simplex para la estructura de datos particulares de estos
problemas (Simplex para redes), escalamiento de capacidades, escalamiento de costos,
entre otros. En esta seccion se explicaran las tecnicas utilizadas en el presente trabajo,
como lo son out of kilter con Flujo Maximal y Escalamiento de Costos.

2.4.1.

T
ecnica out-of-kilter con Flujo Maximal

Esta tecnica consiste en modificar el flujo y los potenciales de la red de forma iterativa, satisfaciendo obligatoriamente en cada iteracion solo la ecuacion del balance de
masa (2.2.b), permitiendo que soluciones intermedias violen las restricciones de capacidad
(2.2.c). El nombre refleja el hecho de que cualquier arco que satisfaga (2.3) esta en buen
estado (in-kilter ) o de lo contrario, esta en mal estado (out-of-kilter ).
Una especializacion de esta tecnica aparece en [3], en la cual se transforma el problema
original a un problema donde solo un arco esta en mal estado y se resuelven subproblemas
FM hasta encontrar la solucion optima. Dicha especializacion se describe a continuacion.
Suponga que se tienen vectores x Zm y Zn tal que cumplen con (2.2.a y 2.2.b)
y que
La condicion (2.3) es satisfecha por todos los arcos excepto uno: (t, s)

(2.5)

Ahora suponga, por ejemplo, que:

cts < 0 y xts < uts

(2.6)

cts > 0 y xts > lts

(2.7)

el caso

13

puede ser tratado similarmente.


Por tanto, el objetivo es que xts alcance el valor de uts o cts alcance el valor de 0, sin
desmejorar los arcos que se encuentran en buen estado; de esta manera se tendra que todos
los arcos cumplen con (2.3) obteniendose un flujo optimo.
Para lograr que xts alcance el valor de uts , se procede a calcular el maximo flujo de
s a t a traves de los arcos que pueden variar sus flujos sin perder el buen estado, siendo
estos u
ltimos los que cumplen con (2.3.c).
e = (N
e , A)
e con A
e = {(t, s)} {(i, j) : c = 0} y
De aqu, se construye un subgrafo G
ij
e = N , y se procede a encontrar el maximo flujo sobre (s, t) calculado en G,
e sujeto a las
N
e Se puede inicializar
siguientes cotas: u
eij = uij xij 0 y e
lij = lij xij 0 (i, j) A.
e
este procedimiento con flujo cero en cada arco de G.
e cualquier flujo x en la red G
e cumplira que:
Como el arco (t, s) A,
P

xij

e
{j:(i,j)A}

xji = 0

e
{j:(j,i)A}

e lo que garantiza que se mantenga


es decir, hay una circulacion en el flujo del subgrafo G,
la factibilidad en el problema (2.2).
e , el nuevo flujo de la red original se obtiene
Sea el vector z un flujo maximal sobre G
de la siguiente manera:
(
xij =

e
si (i, j) A
e
si (i, j) A\A

xij + zij
xij

De esta forma se actualiza solo el flujo en el arco (t, s) y en los arcos que cumplen con
(2.3.c).
Luego, si zts = u
ets se ha conseguido que el arco (t, s) cambie de mal estado a buen
estado, dado que : cts < 0 y xts = uts
14

Recuerdese que la otra manera de obtener que el arco (t, s) cambie a buen estado, es
que el valor de cts cambie a 0, por lo cual, para el caso que zts < u
ets se debe intentar
actualizar el valor de cts para alcanzar el valor deseado, sin desmejorar aquellos valores de
cij donde (i, j) cumple con (2.3.a) o (2.3.b). Esto se puede lograr modificando los valores
de cuidadosamente.
Para variar los valores de hay que tomar en cuenta que los arcos que cumplen con
(2.3.a) seguiran en buen estado mientras su valor respectivo de cij no supere la cota
superior de 0, es decir, cij se mantenga menor o igual a 0 y los arcos que cumplen con
(2.3.b) seguiran en buen estado mientras su valor respectivo de cij se mantenga mayor o
igual a 0. Para el caso de los arcos que cumplen con (2.3.c) no se puede determinar un
comportamiento a priori, debido a que en estos casos depende directamente del flujo, si
xij = uij , cij debe mantener o disminuir su valor (cumplir con cij 0); si xij = lij , cij
debe mantener o aumentar su valor (cumplir con cij 0); y si lij < xij < uij , cij no puede
variar.
Sera de utilidad el teorema de maximo flujo/mnimo corte que establece que si z es un
flujo maximal sobre (t, s) y zts < uts , entonces existe [S, T ] un corte s t saturado por z
en la red, es decir, zij = uij para todo arco (i, j) (S, T ) y zij = lij para todo arco reverso
(j, i) (T, S)\{(t, s)}.
Por tanto, la actualizacion de los valores de se puede hacer mediante la siguiente
regla:


i =

i
i

si i S
si i T

e dado por el teorema.


con 0 < < . Donde [S, T ] es un corte s t sobre G
Note que esta actualizacion solo modifica los potenciales de los nodos que pertenecen
e
a T y afecta solo a los arcos de G.

15

De esta manera, los arcos con cola y cabeza en S o en T mantienen su respectivo valor
cij , y para el resto de los arcos se tiene:
Para los arcos (i, j) (S, T ) :
cij = cij
i +
j = cij i + j = cij

(2.8)

Para los arcos (j, i) (T, S) :


cij = cij
i +
j = cij i + + j = cij +

(2.9)

Alternativamente, con una actualizacion



i +

i =
i

si i S
si i T

solo sobre los potenciales de los nodos que pertenecen a S se obtienen los mismos resultados
(2.8 y 2.9).
Se debe determinar de manera tal que los nuevos valores cij no desmejoren el n
umero
de arcos que estan en buen estado, es decir, que no debe existir ning
un arco que cambie
de buen estado a mal estado.
e
Partiendo del teorema de maximo flujo/mnimo corte, aplicado a todo arco (i, j) A,
se tiene que:

todo arco (i, j) (S, T ) cumple que xij = uij

(2.10)

todo arco (i, j) (T, S)\{(t, s)} cumple que xij = lij

(2.11)

De (2.8) se obtiene que cij disminuye su valor, lo que implica que cij < 0 y de (2.10)
que xij = uij , con lo cual, se sigue satisfaciendo (2.3) y el arco sigue en buen estado. Se
obtiene un resultado analogo al tomar (2.9) y (2.11), de donde se tiene que cij > 0 y
xij = lij .
16

Para determinar el maximo valor de se debe tomar en cuenta que para los arcos
e se tiene los siguientes casos:
(i, j) A\A

Si (i, j) (S, T ).
De (2.8) se tiene que cij = cij , entonces si cij < 0, cij < 0, por lo tanto,
el arco correspondiente xij (cuyo valor es uij ) se mantiene invariante (sigue
en buen estado). En cambio si cij > 0 al aplicar la actualizacion (2.8),
el menor valor que puede tomar cij para mantener el arco respectivo en
buen estado es cero, por lo tanto, el maximo valor que puede tomar es
cij .
Si (i, j) (T, S).
De un analisis similar se concluye que el maximo valor que puede tomar
es cij . (Este analisis aplica tambien para el arco (t, s)).
Entonces,

1
2

= mn{1 , 2 }
= mn{cij : (i, j) (S, T ), cij > 0}
= mn{cij : (i, j) (T, S), cij < 0}

(2.12)

Se puede observar que 1 y 2 siempre son distintos de 0, debido a que se excluyen los
valores de cij = 0, por lo tanto, tambien es distinto de 0.
Si = ct,s se consigue que el arco (t, s) cambie a buen estado, por lo que se alcanzara
una solucion optima. Por el contrario, si < ct,s solo el arco (t, s) seguira violando (2.3).
En este caso, se define un nuevo subproblema de maximo flujo con respecto a x y
actualizados. Al suponer la integralidad de cij y de , se puede concluir que en cualquier
etapa de este proceso, en el peor de los casos, ct,s se incrementara en = 1, por lo que el
n
umero de subproblemas de maximo flujo a resolver antes de que las actualizaciones de x

y satisfagan (2.3) es a lo sumo el actual valor de ct,s , dado que 1 1 ct,s .
17

Es evidente que el caso (2.7) puede ser tratado de manera similar, resolviendo problemas de mnimo flujo y calculando adecuadamente el valor de .
Es importante destacar que los problemas de Mnimo Flujo pueden ser resueltos con
algoritmos para resolver problemas de Maximo Flujo. Para ello, se deben aplicar los siguientes cambios:
- Revertir el sentido de (t, s)
- Remplazar xts por xts , lts por uts y uts por lts
de esta manera, los flujos pueden ser negativos, lo cual representa que el flujo de dicho
arco se mueve en sentido contrario (si xij < 0 significa que hay xij unidades de flujo que se
mueven del nodo j al nodo i), en otras palabras, se puede decir que existe un arco artificial
(que no esta en la red original) (j, i) con un flujo de xij unidades.
El procedimiento anterior permite resolver el problema FMC cuando un arco esta en
mal estado (out-of-kilter ). Sin embargo, cuando se tiene una red general y un flujo factible
no es sencillo encontrar potenciales para los cuales se satisfaga (2.5), es decir, que solo
un arco no cumpla con las condiciones de optimalidad (2.3). Para conseguir esto se aplica
una transformacion a la red R = (G, c, l, u, b) con x factible y cualquier , a una red
R0 = (G0 , c0 , l0 , u0 , b0 ) con los vectores x0 y 0 0 y G0 = (N 0 , A0 ).
La construccion es como sigue:

Para cada arco (i, j) A hacer:


0
u0ij = uij , lij
= lij , c0ij = cij
0
si c0ij > 0
lij
0
0
u
si c0ij < 0
xij =
ij
xij
si c0ij = 0

Se calcula el exceso i de cada nodo i de N .


Se a
naden dos nodos extras, s y t.

18

0
= 0, u0si = x0si y
Por cada nodo i con i < 0 se a
nade el arco (s, i) con x0si = i , lsi

c0si = 0
Por cada nodo i con i > 0 se a
nade el arco (i, t) con flujo x0it = i , lit0 = 0, u0it = x0it
y c0it = 0
El arco (t, s) se a
nade con x0ts =

{ i : i > 0} =

0
= 0, u0ts = x0ts
{ i : i < 0}, lts

y c0ts = 1 + (n 1), donde el entero positivo es el maximo costo reducido en valor



absoluto de los arcos que violan (2.3), es decir, = max{ cij : (i, j) A y cada
cij < 0 y xij < uij , o cij > 0 y xij > lij }.
Finalmente ponemos
b0i = bi i N ,

b0s = 0,

b0t = 0

Esta red (G0 ) puede tener como mucho n + 1 arcos extras.

Figura 2.4: Red R (transformada)

19

En la figura 2.4 se puede observar la red transformada, con el procedimiento descrito


anteriormente, de la red presentada en la figura (figura 2.2). Se aprecia que el n
umero de
nodos aumento en 2 y el n
umero de arcos aumento en 4 (equivalente al n
umero de nodos
de la red original).
As, la nueva red cumple con las siguientes propiedades:

1. G proviene de G0 al eliminar los nodos s y t y sus arcos incidentes.


2. El par (x0 , 0 ) satisfacen (2.2.a y 2.2.b) y (2.5) en R0
3. El tama
no de R0 , x0 , 0 es acotado por una peque
na constante m
ultiplo del tama
no
de R, x, .
4. Para cualquier solucion optima x de R0 , x restringido a los arcos de G es una
solucion optima de R.
Las primeras dos propiedades se derivan directamente de la construccion de R0 . En
cuanto a la tercera, notese que la red transformada incrementa en dos el n
umero de nodos
y el n
umero de arcos, en el peor de los casos (todos los i 6= 0), aumenta en n + 1.
Para verificar la u
ltima propiedad, primero se debe observar que para cualquier flujo
factible x00 en R0 , el que x00ts = 0 implica que x00ij = 0 para todo (i, j) A0 \A, y que x00A , el
vector de arcos (i, j) restringidos a A, es un flujo factible en A que cumple
X

c0ij x00ij =

{(i,j)A0 }

{(i,j)A}

cij x00ij +

(cij i + j )x00ij

{(i,j)A}

cij x00ij

{(i,j)A}

i bi

{iN }

donde la u
ltima igualdad se logra reorganizando los distintos sumandos de la segunda
sumatoria de la igualdad anterior.

20

Por otro lado, cualquier flujo factible x en R se puede extender a un flujo factible x en
R0 al fijar xij = 0 para todo (i, j) A0 \A y xA = x, por lo que x cumple con
X

c0ij xij =

{(i,j)A0 }

Como

cij xij

{(i,j)A}

i bi

{iN }

i bi es constante, se puede concluir que hallar un flujo optimo en R es

{iN }

equivalente a hallar un flujo optimo x en R0 , a


nadiendo la restriccion xts = 0 (hay que
notar que la construccion de R0 genero un par x y tal que solo el arco (t, s) viola (2.3),
siendo la violacion el caso cts > 0 y xts > lts , por lo cual se busca minimizar el flujo sobre
el arco (t, s)).
As, si se prueba que

todo flujo optimo x00 para R0 satisface que x00ts = 0

(2.13)

x00A es un flujo optimo para R.

(2.14)

se demuestra que

Por tanto, se verifica la cuarta propiedad.


Luego, queda por demostrar (2.13).
Sea x0 un flujo factible en R0 dado por x0ij = xij para todo (i, j) A y x0ij = 0 para
0
todo (i, j) A0 \A; note que x0ts = lts
= 0. Sean P + y P los conjuntos de arcos a favor y

en contra, respectivamente, en un camino o ciclo P en G0 . El costo de P es


c(P ) =

c0ij

(i,j)P +

c0ij

(i,j)P

y P es de aumento con respecto a x0 si P + {(i, j) A0 : x0ij < u0ij } y P {(i, j)


0
A0 : x0ij > lij
} (todos los arcos a favor de P pueden aumentar su flujo y todos los arcos en

contra pueden disminuirlo).


21

Sea P 0 un camino s t de aumento con respecto a x0 en G0 . Para que el flujo inyectado


a traves de P 0 genere una mejora en la solucion del FMC se debe cumplir que c(P 0 ) sea
negativo (recuerdese que se busca el flujo de mnimo costo sobre el arco (t, s)).
0
pertenecen al conjunto P + y contribuyen
Los arcos (i, j) A con c0ij > 0 y x0ij = lij

con terminos positivos a c(P 0 ); los arcos (i, j) A con c0ij < 0 y x0ij = u0ij pertenecen al
conjunto P y tambien contribuyen con terminos positivos a c(P 0 ). Estos son arcos en los
cuales la condicion (2.3) es satisfecha por x y .
0
Los arcos (i, j) A con c0ij > 0 y x0ij > lij
pertenecen al conjunto P y los arcos

(i, j) A con c0ij < 0 y x0ij < u0ij pertenecen al conjunto P + , ambos contribuyen con

terminos negativos a c(P 0 ) de magnitud c0ij en cada caso. Estos son los arcos que violan
las condiciones (2.3).
Por otro lado, en el camino P 0 puede haber a lo sumo n 1 arcos y cada tama
no de la

violacion es a lo maximo = max{ cij : (i, j) A y cada cij < 0 y xij < uij , o cij > 0 y
xij > lij }.
Luego, fijando c0ts en una cota superior estricta sobre el negativo del mnimo costo de
un camino de aumento entre los nodos s y t con respecto a x0 , es suficiente para forzar
0
en la solucion optima.
que x0ts = lts

As, en ausencia de una mejor cota superior sobre


mn{c(P 0 ) : P 0 es un camino de aumento s t con respecto a x0 }
funciona fijar c0ts = 1 + (n 1) . Note que a pesar de que G0 tiene n + 2 arcos, cualquier
ciclo en G0 a traves de (t, s) tambien toca dos arcos de costo cero que inciden en (t, s); por
lo tanto, el uso de c0ts = 1 + (n 1) en vez de 1 + ((n + 2) 1) = 1 + (n + 1).
Entonces, cada camino de aumento P que contiene el arco (t, s) en P + va a tener costo
0
positivo, lo que fuerza que x00ts = lts
en cada solucion optima x00 en R0 .

22

Por lo tanto, xts = 0 para cada flujo optimo x en R0 , lo que implica que x00A es un flujo
optimo para R.

2.4.2.

Escalamiento de costo

Otra tecnica utilizada con exito en la resolucion de problemas FMC es la de Escalamiento de Costo, que consiste en generar y resolver problemas auxiliares con variacion en
los costos originales (C).
Una manera de manejar esta tecnica es generando una secuencia de costos que convergen a C. Al denominar d los nuevos costos, la secuencia {dk }qk=0 tiene las siguientes
propiedades:
Es facil hallar un flujo optimo (x0 , 0 ) para el problema con costos d0 .
Un flujo optimo (xk+1 , k+1 ) para el problema con costo dk+1 , puede ser
calculado facilmente del flujo optimo (xk , k ) del problema con costo dk .
El entero q es peque
no con respecto al tama
no de los valores de C.

Uno de los escalamientos a usar en este trabajo es el propuesto en [3], que consiste en:
0
para
k dij = 0, k
 todo (i, j) A
dij = |cij | /2
, para todo (i, j) A
k
dij cij 0
con = 1 + blog2 max {|cij | : (i, j) A}c

(2.15)

Este escalamiento genera en un comienzo muchos costos 0, por lo que los primeros
problemas que se resuelven son los de menos dificultad, aumentando esta a medida que se
va iterando y que los costos se van acercando a los originales.
Otra manera de usar esta tecnica de escalamiento es la presentada en [1]; en la cual
usan como parametro de escalamiento  e iterativamente se obtienen flujos  optimos
23

para sucesivos valores mas peque


nos de . Inicialmente  = C = max{cij : (i, j) A}
y cualquier flujo factible es  optimal. En este caso, el algoritmo transforma un flujo
 optimal en un flujo 21  optimal. Aqu, el parametro  disminuye a la mitad en cada
iteracion. Despues de 1 + dlog(nC)e fases de escalamiento, el algoritmo termina con un
flujo optimo.
A diferencia del primer escalamiento, este u
ltimo comienza a trabajar con problemas
cuyos costos son mayores que /2, generando tambien problemas de menor dificultad en
las primeras iteraciones y aumentandola progresivamente.

24

Captulo 3
Implementaci
on
La implementacion se realizo en lenguaje FORTRAN 90, en un equipo computacional con un procesador Intel(R) Core2Duo de 1.800 Ghz y 2.0 Gb de memoria RAM. El
programa usado para la compilacion fue Compaq Visual Fortran(R) 2000.
Dicha implementacion se hizo bajo el paradigma de programacion estructurada, siendo
el modulo de enlace y ejecucion el Algoritrmo Principal. Los procedimientos contenidos
en este son LINEAL, rutina que genera el subproblema lineal, y MINCOST, rutina que
resuelve el problema lineal FMC.
Entrada: Red R = (G, f, l, u, b) con G = (N, A), n
umero de segmentos p, flujo
factible z, factor de reduccion y n
umero de iteraciones a realizar n iter
Fijar N
umero de iteraciones iter = 1
Calcular 1
Mientras iter n iter hacer
iter
, x,
) = LINEAL(R, z, iter , p)
(Rpl

(y iter ) = MINCOST
Calcular tama
no de paso
xiter = xiter1 + y iter
iter+1 = iter
iter = iter + 1
Fin
Retornar (xn iter , n iter )
Algoritmo 3.1: Algoritmo Principal
El factor de reduccion , en el Algoritmo Principal, es un valor del intervalo (0, 1).
25

Entrada: (R, z, , p)
Para todo (i, j) A, // calcular nuevas cotas
lij = lij xij
uij = uij xij
Fin
Para cada (i, j) A
// a~
nadir p arcos al subproblema lineal P L
// arcos a la derecha de z
De k = 1 a p/2 hacer
ij
ckij = (sij
z (kij ) sz ((k 1)ij ))/ij

// Crear arco (, ) con:


= i; = j; c = ckij
l = 0; u = ij ; x = 0
Fin
// arcos a la izquierda de z
De k = 1 a p/2 hacer
ij
ckij = (sij
z (kij ) sz ((k 1)ij ))/ij

// Crear arco (, ) con:


= i; = j; c = ckij
l = ij ; u = 0; x = 0
Fin
Fin
Npl = N
Gpl = (Npl , Apl )
Para todo i Npl
bi = 0

i = 0
Fin
Rpl = (Gpl , c, l, u, b)
Retornar (Rpl , x,
)
Algoritmo 3.2: Procedimiento LINEAL
El procedimiento MINCOST tiene dos versiones. Esto se debe a que con la primera
version realizada (Bland y Jensen [3]) no se obtuvo el resultado esperado en el u
ltimo
grupo de problemas de prueba, tal como se evidencia en el captulo siguiente (Resultados
Numericos). La segunda version es la presentada en Ahuja, Magnanti y Orlin [1]. En las
siguientes secciones se detallan ambas versiones.
26

3.1.

Algoritmo FMC1 (FMC.1)

El procedimiento principal es MINCOST, el cual es un algoritmo de escalamiento de


costo propuesto por Bland y Jensen [3]; escalamiento definido en 2.15. Aqu se llama a
REOPT, que resuelve el problema lineal con los costos escalados aplicando la tecnica

out-of-kilter. Este
u
ltimo procedimiento llama a la rutina TRANSFORMA, con la cual se
obtiene la red con las condiciones necesarias para aplicarle la tecnica antes mencionada,
y a un procedimiento FLUJOMINIMO que resuelve los problemas de Mnimo Flujo que
se generan. Seg
un los autores, se puede aplicar cualquier metodo polinomial para estos
tipos de problemas, garantizando as la ejecucion en tiempo polinomial del algoritmo. Sin
embargo, por el tipo de problemas lineales que se generan al calcular la Aproximacion
Lineal antes descrita, resulta mucho mejor resolver los problemas de FM con metodos
basicos, esto se debe a que los metodos polinomicos se basan en el escalamiento de cotas,
lo que origina muchos problemas no factibles.
El tiempo de ejecucion que presenta este algoritmo es O(T (n, m)n log C), donde T (n, m)
denota el tiempo para resolver un problema de Mnimo flujo con n nodos, m arcos y C el
mayor de los costos en valor absoluto del problema.

27

Entrada: Red R = (G, c, l, u, b).


= 1 + blog2 max {|cij | : (i, j) A}c
Para todo (i, j) A
xij = 0
Fin
Para todo i N
(i) = 0
Fin
Fijar N
umero de iteraciones iter = 0
Mientras iter hacer
Para todo (i, j)
Si cij > 0entonces 
dij = cij /2iter
Si cij < 0 entonces


dij = |cij | /2iter
Sino
dij = 0
Fin
Fin
Riter = (G, d, l, u, b)
(x, ) = REOPT (Riter, x, )
iter = iter + 1
Fin
Retornar (x)
Algoritmo 3.3: Procedimiento MINCOST FMC.1

28

Entrada: (Riter, x, )
Para todo i N
(i) = 2(i)
Fin
(R0 , x0 , 0 ) = TRANSFORMA (Riter, x, )
Mientras x0 (t, s) > 0 hacer
e = (N
e , A)
e y cotas u
// Definir subgrafo G
e,e
l con respecto a (x0 , 0 )
e =N
N
e
A = {(t, s)} {(i, j) A : cij = 0}
e = (N
e , A)
e
G
e
Para todo (i, j) A
e
lij = lij xij
u
eij = uij xij
Fin
e u
(z, T, ) = FLUJOMINIMO (G,
e, e
l);
e
Para todo (i, j) A
x0ij = x0ij + zij
Fin
Para todo i T
0i = 0i +
Fin
Fin
Para todo (i, j) A
xij = x0ij
Fin
Para todo i N
i = i + 0i
Fin
Retornar (x, )
Algoritmo 3.4: Procedimiento REOPT

29

Entrada: (Riter, x, )
Para todo (i, j) A
0
u0ij =
uij , lij
= lij , c0ij = cij
0
si c0ij > 0
lij
si c0ij < 0
u0
x0ij =
ij
xij
si c0ij = 0
Fin
Para todo i PN
P 0
xij
i = bi +
x0ji
{j:(j,i)A}

{j:(i,j)A}

Fin
// A~
nadir dos nodos extras s y t.
Para todo i N
Si i < 0 entonces
a
nadir arco (s, i) a A0 con x0si = i
Si i > 0 entonces
a
nadir arco (i, t) a A0 con x0it = i
Fin
Fin
P
P
A
nadir arco (t, s) a A0 con x0ts =
i =
i
{ i >0}

{ i <0}

Para todo (i, j) A0 \A


0
lij
=0
0
uij = x0ij
c0ij = 0
Fin
Calcular
= max{ cij : (i, j) A y cada cij < 0 y xij < uij , o cij > 0 y xij > lij }.
Fijar c0ts = 1 + (n 1)
Para todo i N
b0i = bi y b0s = 0, b0t = 0
0i = 0 y 0s = 0, 0t = 0
Fin
Retornar (R0 , x0 , 0 )
Algoritmo 3.5: Procedimiento TRANSFORMA

30

3.2.

Algoritmo FMC2 (FMC.2)

El procedimiento principal es MINCOST, el cual es un algoritmo de escalamiento de


costo tomado de Ahuja, Magnanti y Orlin [1]. El mismo tiene reportado un tiempo de
ejecucion teorico de O(n2 m log(nC)) con n nodos, m arcos y C el mayor de los costos en
valor absoluto del problema.
El escalamiento de este algoritmo es el definido con los flujos  optimal.
Las siguientes definiciones son usadas en el procedimiento:
Dado un nodo i, se dice que:
el arco (i, j) es admisible si /2 cij < 0 y xij < uij
el arco (j, i) es admisible si /2 cij < 0 y xij > lij
Se define el rango de movimiento como

uij xij si el arco admisible es (i, j)
ri =
xij lij si el arco admisible es (j, i)

Los autores proponen las siguientes mejoras computacionales aplicadas en la implementacion:


Examen de un Nodo:
Se mantiene el mismo nodo activo i hasta que su desequilibrio llegue a 0 o hasta que
se reetiquete. Esto permite realizar un mayor n
umero de inyecciones de flujo sin cambiar
de nodo.
Implementacion de Olas:
Ordenar los nodos seg
un el orden topologico (orden definido en [1]).
Examinar los nodos seg
un dicho orden.
Cuando se tenga un nodo activo, implementar Examen de un Nodo.
31

Despues de cada reetiquetamiento, se cambia el orden topologico y se comienza de


nuevo a examinar los nodos.
Calcular C = max{cij : (i, j) A}
Fijar  = C
Para todo i N
i = 0
Fin
Para un flujo factible x cualquiera
Mientras  1/n hacer
Para cada arco (i, j) A
Si cij > 0 entonces xij = lij
Si Si cij < 0 entonces xij = uij
Fin
Para todo i P
N
P
i = bi +
xji
xij
{j:(j,i)A}

{j:(i,j)A}

Fin
Mientras exista i : i > 0 hacer
Seleccionar nodo activo i.
Si la red contiene un arco (i, j)
o (j, i) admisible entonces
Calcular el rango de movimiento ri del arco admitido
Calcular = mn{ i , rij }
Inyectar unidades de flujo del nodo i al nodo j
Sino
i = i + /2 // reetiquetar
Fin
Fin
 = /2
Fin
Retornar x
Algoritmo 3.6: Procedimiento MINCOST FMC.2
Consideracion de integralidad:
Como el algoritmo comienza con  = C y se reduce  en un factor de 2 en cada fase de
escalamiento hasta alcanzar  = 1/n,  puede convertirse en no entero durante la ejecucion
del algoritmo. Una ligera modificacion en el algoritmo puede asegurar que  permanezca
entero durante toda la ejecucion. Para esto, se multiplican todos los costos de los arcos
(cij ) por n y se fija el primer valor de  en 2dlog nCe y el algoritmo se detiene cuando  < 1.
32

Para esta version se probaron dos maneras diferentes de seleccionar el nodo activo i, la
primera de ella utilizando la nocion de una pila, es decir, se recorre la lista de nodos desde
el principio y se toma el primer nodo activo que se encuentre, luego de operar con dicho
nodo, se vuelve a recorrer la lista desde el principio hasta encontrar el nuevo nodo activo,
permitiendo as que el nodo que acaba de ser examinado vuelva a ser seleccionado si se
mantiene activo. La segunda manera es con la nocion de cola, en la que se recorre la lista
hasta encontrar un nodo activo y posteriormente se contin
ua la b
usqueda del siguiente
nodo activo partiendo de la posicion en que se encontraba el anterior nodo activo, as,
para que un nodo vuelva a ser seleccionado se debe haber recorrido toda la lista de nodos.

33

Captulo 4
Resultados Num
ericos
En un principio solo se programo el procedimiento FMC.1 siguiendo el plan de trabajo.
Sin embargo, los resultados no fueron satisfactorios por lo cual se decidio investigar en
busca de otro algoritmo que permitiera mejorar los resultados y que se ajustara a las
especificaciones originales del presente trabajo, es decir, que fuese un algoritmo polinomial
para el problema de Flujo de Mnimo Costo. Finalmente se decidio por otro algoritmo que
usa la misma tecnica de Escalamiento de Costo y que su implementacion no implicaba
muchos cambios al codigo que ya se tena, este algoritmo es el que definen en [1].
Cabe destacar que se consiguieron mejores resultados con el FMC.2, a su vez, su complejidad algortmica es mucho menor comparada con el FMC.1, lo que implico que su
entendimiento e implementacion tomo muchsimo menos tiempo que el empleado para el
FMC.1.
El factor de reduccion , que reduce en cada iteracion del algoritmo principal es
determinante para alcanzar las mejores soluciones. Se realizaron pruebas con valores de
0,4 a 0,9 con intervalos de 0,05. Con todas las pruebas realizadas se pudo determinar que
dicho parametro no puede ser menor a 0,55, debido a que con valores menores se presentan
problemas numericos en la ejecucion del algoritmo, llegando a detenerse por dichos errores,
ciclar infinitamente o dar resultados con un flujo no factible.
Otro punto menos crtico que el anterior, es el calculo de 1 (Algoritmo Principal) en
34

donde se ensayo con las siguientes formulas:


ij = (uij lij )/(2)
ij = (uij lij )
ij = (uij lij )
siendo la u
ltima formula la que arrojo mejores resultados.
Un factor determinante en la implementacion de FMC.2 fue la Consideraci
on de integralidad, tanto as, que gracias a esta consideracion se logro resolver el tercer grupo de
problemas de prueba, que como se vera en la proxima seccion, presentan una particularidad
en sus costos.
No se definio un criterio de parada, todas las corridas se realizaron con un determinado n
umero de iteraciones, esto debido a que las primeras pruebas mostraron ciclos de
estancamiento y ciclos de movimientos, por lo cual, el criterio pensado en un principio de
parar luego de dos o tres iteraciones sin modificar el valor de la funcion objetivo resultara
muy impreciso.
Se realizaron pruebas sustituyendo segmentos que alcanzaban alguna de las cotas, es
decir, si el valor de la variable alcanza el valor de uno de los extremos del segmento,
entonces, en la medida de lo posible se centra la variable en dicho extremo y se genera
nuevamente los p = 2 segmentos. Tambien se probo variando el n
umero de segmentos fijos
p que se generan en la aproximacion lineal, se usaron los valores de 2, 4, 6 y 8. Con las
pruebas anteriores no se obtuvo ninguna variacion en los resultados, mas s en el tiempo
de ejecucion. Por todo esto, se determina que el mejor n
umero de segmentos lineales a
generar es 2.
El tama
no de paso se calcula discretizando el intervalo de movimiento, evaluando la funcion objetivo en los puntos de dicha discretizacion y escogiendo el tama
no de
paso que genera el menor valor de la funcion. Para esto, primero se calcula el maximo
35

valor max tal que lij < xij + max yij < uij para todo (i, j) A, y luego es el
maximo valor tal que f (xij + yij ) < f (xij ), en donde toma los valores del intervalo
{ mahx 1, mahx 2, , mahx h}, con el valor de h fijado en 10, que en la practica ha
dado muy buenos resultados. Aqu tambien se probaron diferentes valores entre 10 y 50,
generando poca variacion de los resultados en la gran mayora de los casos. En los resultados que se veran a continuacion se hace mencion a un caso en que la diferencia fue
notable.

4.1.

Problemas Resueltos

Se trabajo con tres grupos de problemas de pruebas, aumentando progresivamente la


dificultad y el tama
no de los mismos. Dichos problemas fueron resueltos paralelamente
con el algoritmo desarrollado por Feijoo y Meyer [5], permitiendo as la comparacion de
los resultados obtenidos.

4.1.1.

Grupo 1

Este grupo contiene solo un problema. El mismo, permitio la primera evaluacion y


afinacion del codigo.
Se trata de un problema de trafico vial que representa una red multi-producto de 20
nodos, 28 arcos y 2 productos. El dibujo de esta red tiene forma de cuadrcula, con todos
los arcos yendo hacia arriba o hacia la derecha (una red multi-producto es una red en la
que varios productos fluyen independiente y simultaneamente por la misma red).
Este es un problema de equilibrio de trafico y su funcion objetivo esta dada por:
X

1 5
2
CK
fK + CK
fK

donde fK representa el flujo total en el arco k (i.e. la suma total de los flujos de cada
producto que usan ese arco), y C 1 y C 2 vectores constantes dados.

36

El grafo de la red se puede apreciar en el cuadro 4.1.

Figura 4.1: Red del Problema del Grupo 1

La cota superior para todos los arcos se fijo en 110.

4.1.2.

Grupo 2
El segundo grupo consta de problemas cuya funcion es cuadratica del tipo
xt Qx + ct x

Estos problemas son generados usando una herramienta computacional dise


nada por
Solorzano [11], en donde se construye la matriz Q y el vector c. En el mismo trabajo
indican que las restriciones lineales son generadas usando NETGEN [8].
El tama
no de los problemas seleccionados en este grupo fueron dos, el primero de 100
nodos y 200 arcos, y el segundo de 100 nodos y 500 arcos.
La cota superior para todos los arcos se fijo en 110.

4.1.3.

Grupo 3

Este grupo esta formado por problemas creados por Toint y Tuyttens [12] para realizar
pruebas numericas de algoritmos de optimizacion no lineal para flujo en redes.
Los problemas se construyen con la especificacion de tres parametros:
l : n
umero de ciclos que contiene la red a ser generada (l 1).
37

a : coeficiente que permite peque


nas variaciones en la no linealidad de la funcion
objetivo (0 < a 1).
c : estimador del n
umero de condicion de la matriz Hessiana, proyectada de la funcion
objetivo en el subespacio de los flujos que satisfacen las restricciones de la red (c 1).

La red es una grilla cuadrada plana con n = (2l + 2)2 nodos y m = 2(2l + 1)(2l + 2)
arcos. En la figura 4.2 se observa la red para l = 2. El vector oferta - demanda esta dado
por: b1 = 1; bi = 0 (i = 2, . . . , n 1); bn = 10
En la red se distinguen 2l ciclos de la siguiente manera. Los primeros l ciclos se forman
al escoger los arcos de dos sucesivas lneas horizontales (sin tomar la primera y la u
ltima)
y los dos arcos verticales que las unen en las lneas mas a la izquierda y mas a la derecha.
Estos ciclos son numerados desde 1 hasta l, de abajo hacia arriba y son llamados ciclos
horizontales. Un conjunto de l ciclos verticales tambien son formados simetricamente y
son enumerados de izquierda a derecha. Los ciclos horizontales y verticales son destacados
con lneas discontinuas en la figura 4.2.
Luego, se define jk para k = 1, . . . , n como:

jk =

s
0

si el k
esimo arco pertenece al ciclo s
si el k
esimo arco no pertenece al ciclo s

La funcion objetivo es dada por:


f (x) =

1
100

n
P

k x2k +

k=1

1
a
100

f1 +

1
1200


10 +

n
P

k=1

con
f1 =

n1
Pp

1 + x2k + (xk xk1 )2

k=1

38

(1)k xk

4 !

Figura 4.2: Ejemplo Red con l = 2


donde

k =

10(jk1 /(l1)) log10 c


1

si jk 1
si jk = 0

En este grupo se seleccionaron los problemas combinando los siguientes valores:


l = {8};

a = {0,25, 0,5, 0,75};

generando as 9 problemas.
La cota superior para todos los arcos se fijo en 50.

39

c = {2, 10, 100}

4.2.

Variantes del FMC.2

En la implementacion del algoritmo FMC.2 se probaron dos maneras diferentes de


escoger el nodo activo y las mejoras propuestas en el libro, de esta manera se tienen las
siguientes versiones:
Version
Descripcion
FMC.2.1 La seleccion del nodo activo se hace en forma de pila
FMC.2.2 La seleccion del nodo activo se hace en forma de cola
FMC.2.3 FMC.2.1 con mejora Examen de un Nodo
FMC.2.4 FMC.2.2 con mejora Examen de un Nodo
FMC.2.5 FMC.2.4 con mejora Implementaci
on de Olas
Los resultados para todas las versiones son muy parecidos, por lo cual no se pudo determinar fehacientemente si alguna de las versiones es mejor que el resto. La version FMC.2.5
representa una mayor complejidad algortmica, por ende mayor tiempo de ejecucion que
el resto de las versiones y como los resultados no fueron mejorados, esta version no fue
probada a fondo, por consiguiente no se reportan los resultados.

4.3.

Resultados

La version FMC.1 arrojo buenos resultados en los dos primeros grupos de problemas,
sin embargo no sucedio lo mismo para el tercer grupo. Una posible causa a esto puede ser
el hecho de que los costos que se generan en la Aproximacion Lineal son todos positivos
y en su mayora menores a 1, por lo que al aplicar el escalamiento, los nuevos costos son
iguales a 0, generando as problemas lineales donde la funcion objetivo es nula. La manera
de intentar resolver los problemas fue no aplicar dicho escalamiento, lo que no garantiza
la ejecucion en tiempo polinomial.
Para calcular un punto inicial factible de los problemas se implemento un metodo de
dos fases, haciendo uso de un problema auxiliar para encontrar dicho punto.
Cabe destacar que en el problema del grupo 1 se evidencio un estancamiento y una
lenta convergencia hacia la solucion con el punto inicial que se genera con el mismo progra40

ma, por lo que se realizaron otras pruebas con otro punto generado con otra herramienta
computacional, logrando mejores resultados. En los problemas del grupo 2 y 3 solo se trabajo con el punto inicial calculado con el mismo programa, obteniendo buenos resultados.
En cuanto a los tiempos de ejecucion, el algoritmo aqu programado es extremadamente
lento en el tiempo y en comparacion con el algortimo de Feijoo y Meyer [5]. Entre las dos
versiones del FMC se observa que la version 2 es menos lenta a la version 1. La caracterstica
de la lentitud en el FMC.1 es reportada por sus autores.
Para hacer referencia a todas o a cualquier version del FMC.2 se usara la letra X en el
espacio correspondiente a la version, con lo que queda FMC.2.X. El algoritmo de Feijoo y
Meyer con el que se comparan los resultados se referencia con AFyM.
Cuando se menciona un n
umero de iteraciones o se presenta la columna iter. en las
tablas de resultados, se hace referencia a la u
ltima iteracion en la cual la funcion objetivo
fue mejorada.
En general, se obtuvieron resultados aceptables, pero siempre los mejores resultados
(por diferencias menores de 0,001) los alcanza el algoritmo AFyM.
En el cuadro 4.1 se presenta un resumen de los 12 problemas resueltos.

4.3.1.

Problema Grupo 1

Debido a que el problema de este grupo fue el mas peque


no que se resolvio, su tiempo
de corrida es bastante corto en comparacion a los otros problemas resueltos, por lo que
con dicho problema se realizaron diferentes pruebas del codigo.
Se resolvio con dos puntos iniciales diferentes, se probaron diferentes valores de h para
la discretizacion en la b
usqueda del tama
no de paso y se probo una idea computacional
sin base teorica, que consiste en reiniciar los valores de a 1 cada 10 iteraciones.
Las distintas versiones del FMC.2 dieron casi los mismos resultados, las variaciones
se observan, en los casos mas diferentes, a partir del cuarto decimal, y hasta coinciden
41

Grupo Tama
no
P1
1
40 56
P2
2
100 200
P3
2
100 500

Grupo
P4
3
P5
3
P6
3
P7
3
P8
3
P9
3
P10
3
P11
3
P12
3

valor c
2
10
100
2
10
100
2
10
100

valor a Tama
no
0,25
324 612
0,25
324 612
0,25
324 612
0,5
324 612
0,5
324 612
0,5
324 612
0,75
324 612
0,75
324 612
0,75
324 612

Cuadro 4.1: Nomenclatura de los problemas


en el n
umero de la iteracion. Algo similar ocurre al comparar FMC.1 con el FMC.2.X.
Se obtienen los mismos resultados en la mayora de los casos con peque
nas diferencias
en el n
umero de iteraciones. El u
nico caso en donde los resultados difieren es en el que
se utilizo el punto inicial calculado y un valor distinto de h. Para el caso de FMC.1 se
alcanzo la mejora con h = 30 y para FMC.2.X con h = 50, sin embargo, con esta u
nica
prueba, no se puede determinar si una version es mejor que otra, se observan algunos
valores de para los cuales FMC.1 da mejores resultados y para otros valores ocurre lo
contrario.
Como ya se menciono, se obtuvo diferentes resultados con los distintos puntos iniciales. Los resultados mas confiables se obtuvieron con el punto inicial calculado con otra
herramienta computacional.
La prueba de los distintos valores de h arrojo resultados notables solo en el caso de
usar como punto inicial el calculado por el programa, para el resto de los casos la mejora
es nfima comparado con los resultados obtenidos con h = 10.

42

La idea computacional que se probo mejoro ligeramente los resultados, sin embargo,
por la ausencia de una razon teorica que la soporte, solo se hizo esta u
nica prueba.
En general, los mejores resultados se obtuvieron con un valor de entre 0,80 y 0,85
El mejor resultado obtenido y la comparacion con AFyM se muestra a continuacion.
Para ser consistente con las comparaciones y mantener el mismo criterio en todas ellas, el
resultado que se expresa en este cuadro (cuadro 4.2) corresponde al algoritmo con h = 10
y punto inicial calculado por el mismo programa. Sin embargo, el mejor resultado obtenido
se puede apreciar en el cuadro siguiente (cuadro 4.3). Para la version FMC.2.X el mejor
resultado fue 1013217,59166350 con = 0,70 en 50 iter. (en todas las versiones se obtuvo
el mismo resultado)
Version

iter
FMC.1 0,85 50

f (xoptimo )
AFyM
1011482,799999 1010540,640739138

Cuadro 4.2: P1. Mejor Resultado

En el cuadro 4.3 se observan los resultados con distintos valores de para la prueba con
el punto inicial calculado y con h = 30 para FMC.1 y h = 50 para FMC.2.X (aqu todas
las versiones dieron los mismos resultados). Se puede apreciar claramente la diferencia de
los resultados para distintos valores de

0,65
0,70
0,75
0,80
0,85
0,90

FMC.1. h = 30
FMC.2.X. h = 50
optimo
iter
f (x
)
iter
f (xoptimo )
50 1011126,826160 50 1012631,51110520
50 1012105,564878 50 1012359,49684831
50 1012837,773326 50 1012659,55002220
34 1013347,539843 25 1013853,40244722
46 1010574,305737 48 1010540,66227131
45 1014044,078541 50 1013867,80028369

Cuadro 4.3: P1. Prueba con diferentes valores h

43

4.3.2.

Problemas Grupo 2

Tal como era de esperarse, los resultados obtenidos con las distintas versiones del FMC
dieron resultados muy parecidos; en la mayora de los casos alcanzaron el mismo valor en la
funcion objetivo, salvo en peque
nas diferencias en los decimales. Para los casos FMC.2.X
se tienen exactamente los mismos resultados.
En los cuadros siguientes se aprecia el mejor resultado y la comparacion con AFyM
tanto para P2 como para P3.
Version
FMC.2.X

iter
0,55 23

f (xoptimo )
AFyM
5144368,15425 5144368,16924

Cuadro 4.4: P2. Mejor Resultado

Version

iter
FMC.1 0,65 38

f (xoptimo )
AFyM
17544848,2832 17544848,3966

Cuadro 4.5: P3. Mejor Resultado

Para P2, el mejor resultado en FMC.1 fue 5144368,15458 para = 0,70 en 42 iter.
y para P3, el mejor resultado en FMC.2.X fue 17544848,2856 para = 0,60 en 29 iter.
Viendo estos resultados y el de los cuadros 4.4 y 4.5 , se verifica la poca o casi inexistente
diferencia de los resultados con las distintas versiones del FMC.

4.3.3.

Problemas Grupo 3

Este fue el grupo de mayor tama


no, con un total de nueve problemas.
Con estos problemas se evidencio que el algoritmo FMC.1 puede converger hacia un
punto muy distante al mejor punto solucion conocido, lo que conllevo a la programacion de
un segundo algoritmo para la resolucion del problema lineal. Como ya se menciono, estos
problemas presentan la caracterstica de que muchos de los costos de los subproblemas
44

lineales son menores a 1, por lo cual al aplicar el escalamiento, estos costos se transforman
en 0. Prueba de que el principio del algoritmo, sin el escalamiento en s, es coherente y
confiable se puede apreciar en el cuadro 4.6, en donde se observan los resultados para el
problema P8 con el algoritmo FMC.1 con el escalamiento aplicado y sin dicho escalamiento.

0,65
0,70
0,75
0,80
0,85
0,90

FMC.1.
iter
9
12
13
50
50
41

con escalamiento
f (xoptimo )
56,65751161
50,17731337
56,59974045
26,25696771
27,43629377
43,05514317

FMC.1.
iter
50
50
45
50
50
50

Sin Escalamiento
f (xoptimo )
16,59485787
14,24961626
14,24182630
14,24183215
14,24445463
15,06440914

Cuadro 4.6: P8 FMC.1. Con y Sin Escalamiento

Por otro lado, con FMC.2 se logro alcanzar los resultados esperados. En este grupo de
problemas s se aprecia una variacion de los resultados al comparar las distintas versiones
de FMC.2, una variacion que se presenta a partir del tercer decimal. En el cuadro 4.7 se
observan los mejores resultados alcanzados y la comparacion con AFyM. En dicho cuadro
se puede apreciar que la mayora de los mejores resultados se alcanzaron usando FMC.2.2
con un valor de = 0,80, por lo que se puede concluir que la version mas confiable para
resolver cualquiera de los problemas es dicha version conjuntamente con ese valor de .
Se realizo una prueba con la mejor version del FMC.2 aumentando el n
umero de iteraciones de 50 a 75 sin conseguir mejoras representativas (las mejoras son del orden de
106 ). Esto se puede observar en el cuadro 4.8 as como tambien los resultados obtenidos
para todos los problemas de este grupo.

45

Version
P4 FMC.2.2
P5 FMC.2.2
P6 FMC.2.4
P7 FMC.2.2
P8 FMC.2.2
P9 FMC.2.3
P10 FMC.2.1
P11 FMC.2.2
P12 FMC.2.2

iter
0.80 39
0.80 50
0.75 48
0.85 50
0.80 48
0.80 50
0.80 42
0.80 50
0.80 50

f (xoptimo )
6.792228
12.326012
52.004152
8.691859
14.242509
53.997968
10.586130
16.155107
55.989293

AFyM
6.791117
12.325154
52.003760
8.690508
14.241826
53.997553
10.584984
16.154452
55.988931

Cuadro 4.7: P4 al P12. Mejores Resultados

P4
P5
P6
P7
P8
P9
P10
P11
P12

iter
0,80 53
0,80 64
0,80 66
0,80 75
0,80 75
0,80 55
0,80 41
0,80 57
0,80 51

f (xoptimo )
6,792196714291
12,326009520446
52,004787039131
8,707386157511
14,242504005356
53,997981927170
10,586365220598
16,155106094221
55,989276675371

Cuadro 4.8: FMC.2.2 con = 0,8 para P4 a P12

46

Captulo 5
Conclusiones y Recomendaciones
Las dificultades numericas resueltas en el transcurso de este trabajo fueron incontables,
destacando la presentada al intentar resolver los problemas del tercer grupo con el primer
algoritmo para FMC planteado. El determinar la posible causa a esos errores fue todo
un reto, as como tambien los intentos en resolverlo, desencadenando finalmente con la
programacion de otro algortimo para dichos problemas, saliendo de los objetivos planteados
en un principio.
El algoritmo aqu desarrollado plantea una tecnica funcional para resolver problemas
de flujo en redes con costos no lineales, sin embargo, los tiempos de ejecucion no son nada
competitivos por lo cual no se recomienda profundizar en su implementacion.
Los problemas lineales que se generan con el algoritmo planteado en este trabajo son
de gran tama
no y con un rango muy grande para los valores de los costos, por lo que
al aplicarle algoritmos de escalamiento generan subproblemas lineales escalados de gran
tama
no no factibles, por lo que se emplea mucho tiempo de ejecucion en determinar la
no factibilidad de dichos problemas, generando gran costo tanto computacional como de
tiempo.
Con el trabajo adicional de programar otro algoritmo para resolver los problemas lineales, se pudo realizar una comparacion implcita de dichos algoritmos, con lo cual se concluye
que el algoritmo planteado por Bland y Jensen [3] es mucho mas complicado y complejo,
47

tanto en su comprension como en su implementacion; ademas del hecho de generar un


problema de mayor tama
no que el lineal original. Por otro lado, el algoritmo planteado
por Ahuja, Magnanti y Orlin [1] es muchsimo mas facil de comprender y de implementar,
a su vez que en las pruebas realizadas consumio menos recursos computacionales y menor
tiempo para su ejecucion.
Como conclusion final se puede decir que el algoritmo planteado en este trabajo
probo resolver con exito los problemas trabajados pero no se logro ninguna mejora, ni
en los resultados obtenidos ni en el tiempo de ejecucion.

48

Bibliografa
[1] AHUJA, R. K., MAGNANTI, T. L. y ORLIN, J. B., (1993), Network Flows: Theory,
Algorithms, and Applications, USA, Prentice Hall.
[2] BECK, P., LASDON, L. y ENGQUIST, M., (1983), Reduced Gradient Algorithm
for Nonlinear Network Problems, ACM Transactions on Mathematical Software, V.
9, No. 1, 57-70.
[3] BLAND, R. G. y JENSEN, D. L., (1992), On the computacional behavior of a
polynomial-time network flow algorithm, Mathematical Programming, V. 54, 1-39.
[4] FEIJOO, B. y MEYER, R. R, (1985), Optimization on the CRYSTAL Multicomputer, Computing 85: A Broad Perspective of Current Developments, Elsevier Science
Publishers B.V., 37-42.
[5] FEIJOO, B. y MEYER, R.R., (1988), Piecewise-linear approximation methods for
nonseparable convex optimization, Management Science, V. 34, No. 3, 411-419.
[6] KAMESAN, P. V. y MEYER, R. R., (1984), Multipoint Methods for Separable
Nonlinear Networks, Mathematical Programming Study, V. 22, 185-205.
[7] KAO, C. Y. y MEYER, R. R., (1981), Secant Aproximation Methods for Convex
Optimization, Mathematical Programming Study, V. 14, 143-162.
[8] KLINGMAN, D., NAPIER, A. y STUTZ, J., NETGEN: A Program for Generating
Large Scale Capacitated Assignment, Transportation, and Mini- mum Cost Flow
Network Problems, Management Science, Vol. 20, No. 5 (1974), 814-821.
[9] MEYER R. R., (1983), Computational Aspects of Two-Segment Separable Programming, Mathematical Programming, V. 26, 21-39.
[10] MURTAG, B. A. y SAUNDERS, M. A., (1983), MINOS 5.0 Users Guide, Technical Report SOL 83-20R, Systems Optimization Laboratory, Stanford University,
Stanford, CA.
[11] SOLORZANO, R., (2006), Un Generador de Problemas Cuadraticos de Redes y Experimentacion en NSNET, Universidad Sim
on Bolvar, Licenciatura en Matematicas, Proyecto de Grado.
49

[12] TOINT, Ph. L. y TUYTTENS, D.,(1990), On large scale nonlinear network optimization, Mathematical Programming, V. 48, 125-159.
[13] TOINT, Ph. L. y TUYTTENS, D.,(1992), LSNNO, A FORTRAN subroutine for
solving large-scale nonlinear network optimization problems, ACM Transactions on
Mathematical Software, V. 18, No. 3, 308-328.

50

UNIVERSIDAD SIMON BOLIVAR


DECANATO DE ESTUDIOS DE POSTGRADO

NOMBRE DEL ESTUDIANTE:

David A. Vasquez Maldonado

TITULO DE LA TESIS: APROXIMACIONES LINEALES A TROZOS USANDO ALGORITMOS


POLINOMIALES PARA FLUJOS EN REDES CON COSTOS NO
LINEALES
NOMBRE DEL ASESOR:

Bernardo Feijoo

MIEMBROS DEL JURADO: Claudia Vega, Alejandro Crema y Bernardo Feijoo


PALABRAS CLAVES:

Flujo en Redes, Escalamiento de Costos, Programacin No Lineal,


Aproximaciones Lineales a Trozos.

SOBRESALIENTE:
N DE PAGS:
MAESTRA EN:

50

GRADUADO CON HONORES:

FECHA DE GRADUACIN: Junio 2009


Matemticas

En el rea de la programacin matemtica, el problema de flujo de mnimo costo en redes


(FMC) ha logrado separarse del grupo clsico de problemas lineales, esto debido a sus
aplicaciones en diferentes reas de la industria, la existencia de algoritmos altamente eficientes
para su resolucin y la representacin grfica asociada a ellos; por lo que se ha generado gran
inters en el rea. La generalizacin de este problema clsico que consiste en reemplazar la
funcin objetivo por una no lineal tambin es de gran inters por sus variadas aplicaciones.
Una tcnica desarrollada para la resolucin de estos ltimos problemas consiste en
aproximar la funcin no lineal con una funcin lineal a trozos y generar subproblemas lineales.
Estos subproblemas lineales han sido resueltos con un algoritmo cuyo tiempo de ejecucin terico
no es polinomial. En procura de alcanzar una mejora tanto en el tiempo de ejecucin como en los
resultados, se planteo resolver los subproblemas lineales con un algoritmo que tenga un tiempo de
ejecucin polinomial, manteniendo el procedimiento que permite aproximar la funcin no lineal.
La tcnica elegida fue la de escalamiento de costos. Se implement todo el procedimiento
de resolucin, desde la obtencin de un punto inicial, el procedimiento para generar las
aproximaciones hasta dos versiones muy distintas de la tcnica de escalamiento; lo que permiti
adems, realizar una breve comparacin entre dichas tcnicas. Se obtuvieron resultados
aceptables pero no se logr mejorar los tiempos de ejecucin.

You might also like