Está en la página 1de 13

ICS1113 Optimizacion.

Notas de Clases
Prof. Jorge R. Vera
Dept. de Ingeniera Industrial y de Sistemas
Escuela de Ingeniera, Pontificia Universidad Catolica de Chile
Octubre 2014

2014
c Jorge Vera Andreo

8 Problemas en Redes y Grafos


En esta parte del curso revisaremos varios problemas que se desarrollan en estructuras de redes o grafos, y
mostraremos algunos algoritmos para resolverlos. Entre estos, esta el conocido problema de Flujo a Costo
Mnimo, del cual ya hemos construido modelos, el problema de Flujo Maximo y tambien el problema de
Ruta mas Corta.
El problema mas simple de redes es el clasico problema de transporte. En este problema existen n orgines
y m destinos. En los orgenes, existen ofertas bi y en los destinos hay demandas dj for the origins and
destinations, respectively. El modelo de este problema es conocido y vimos algunos ejemplos al comienzo del
curso. La figura muestra este modelo y la correspondiente representacion en red:

Sin embargo, los problemas reales involucran tambien puntos intermedios y diversas estructuras de conexiones
y por eso el tema es estudiado en forma mucho mas general.

8.1 Definiciones basicas.


Necesitamos primero varias definiciones las que usaremos en nuestros modelos y algoritmos.
Basicamente, un grafo es un objeto formado por nodos y arcos.

1
Esto corresponde a nuestra imagen habitual de lo que es una red, y esta puede ser una red de transportes,
de comunicaciones, de personas, una red social, los procesos dentro de una empresa, etc. El modelo de redes
es realmente muy poderos.
Definicion 8.1. Un grafo no dirigido es un par (N, A), donde N es el conjunto de nodos y A esta formado
por pares {i, j} no ordenados, i A, j A (el sentido importa).
Definicion 8.2. Un grafo dirigido es un par (N, A), donde N es el conjunto de nodos y A esta formado por
pares ordenados (i, j) , i A, j A.
Definicion 8.3. Un camino en un grafo es una secuencia consecutiva de nodos y arcos.
Un camino dirigido en un grafo dirigido es un camino en que todos los arcos tienen la misma orientacion.
La figura muestra dos caminos, el segundo es dirigido.

Definicion 8.4. Un circuito es un camino cerrado.

Definicion 8.5. Un arbol es un subgrafo de un grafo que no contiene circuitos. Un arbol generador es un
arbol que cubre todos los nodos de un grafo (a veces se le llama tambien arbol de envergadura maxima).

El concepto de arbol puede definirse para grafos dirigidos o no.

8.2 El Problema de Flujo a Costo Mnimo


Sea (N, A) un grafo dirigido, en cada nodo i N se define una demanda generalizada di con la convencion
de que si di > 0, es una oferta y si di < 0, es una demanda. A cada arco (i, j) A asociamos un costo
unitario de i to j, cij , y tambien una capacidad, uij (eventualmente +). Sea xij el flujo en el arco (i, j)
desde i a j, el modelo es: P
min cij xij
(i,j)A
P P
s.t. xij xpi = bi , i N
j:(i,j)A p:(p,i)A
0 xij uij , (i, j) A
En este problema tambien puede haber restricciones generalizadas de capacidad como lij xij uij .
Ejemplo:
Algunos problemas de optimizacion que no parecen de redes en realidad lo son. Recordemos el conocido
problema de Planificacion de produccion (en el cual hemos excluido las restricciones de consumo de recursos):
tenemos T periodos y un producto. Sea dt la demanda en el periodo t y sea ct el costo de produccion en t y

2
ht el costo de inventario en t. Se usan dos variables: xt , la produccion en t, y It el inventario que se acarrea
de t a t + 1. El modelo es:
PT
min {ct xt + ht It }
t=1
s.t. It = It1 + xt dt , t = 1, . . . , T
xt 0, It 0, t = 1, . . . , T
donde I0 es el inventario inicial en mano.

Ejercicio: Aqu hay escondido un problema de flujo a costo mnimo. Escrbalo.

8.3 Solucion al problema de flujo a costo mnimo.


Veremos ahora como resolver el problema cuando las capacidades son +, y para eso comenzaremos por
entender la estructura de la solucion. La siguiente iustracion es el resultado de un ejemplo computacional
con 8 ciudades y puntos de transbordo. La estructura de la red por la cual debe circular el flujo es la de la
figura:

Si se resuelve el problema usando un sistema computacional de optimizacion, se obtiene la solucion de la


figura:

Ahora conectamos el nodo solitario con un flujo nulo para obtener:

3
la estructura que vemos aca es precisamente la de un arbol generador. Como veremos a continuacion, esto no
es un accidente; es una propiedad fundamental de los problemas de Flujo a Costo Mnimo. Notemos tambien
que, dado un arbol, el calculo de la solucion es inmediato mediante sustitucion de los valores a partir de las
hojas.

8.4 Bases y arboles.


Ahora observemos que todo problema de flujo a costo mnimo es un problema de programacion lineal de la
forma:
min cT x
s.t. Ex = d
x0
para ciertos c, d y E. La matriz E tiene una estructura muy especial, por ejemplo:

E se llama matriz de incidencia arco-nodo del grafo. Notese que E tiene rango n 1 (sumando las columnas
se obtiene el vector nulo). Es facil ver que todo arbol generador tiene n 1 arcos y, por lo tanto, solo
n 1 columnas de E pueden ser linealmente independientes. Si agregamos un n-esimo arco al arbol nece-
sariamente se formara un ciclo. Dentro de un ciclo es facil ver que las columnas de la matriz de incidencia
son linealmente dependientes. Concluimos entonces, que para tener independencia lineal de las columnas
respectivas, no pueden haber ciclos y, por lo tanto, la estructura debe ser un arbol.

Con lo anterior, tenemos los siguientes resultados:

Teorema 8.1. Si el problema de flujo a costo mnimo tiene solucion optima, esa solucion corresponde a un
arbol generador de la red.
Teorema 8.2. Todo arbol generador define una solucion basica factible, inversamente, toda solucion basica
factible corresponde a un arbol generador de la red.

4
8.5 Problema dual y optimalidad
El dual del problema de flujo a costo mnimo es:
n
P
max di i
i=1
s.t. i j cij , (i, j) A

Luego, las condiciones de optimalidad son:

cij = cij (i j ) 0, (i, j) A

Supongamos se esta usando el SIMPLEX para resolver este problema. En una cierta etapa tenemos una
solucion basica factible correspondiente a un arbol generador. Sea T los arcos del arbol generador. Entonces,
como esos corresponden a las variables basicas:

i j = cij , (i, j) T

Estos son n 1 ecuaciones y n variables: se fija una de las duales a un valor arbitrario y se resuelve para
las otras. Supongamos que en la solucion actual las condiciones de optimalidad no se satisfacen. Entonces,
existe un arco no basico (i, j) tal que
cij = cij (i j ) < 0
Que pasa en el subgrafo T {(i, j)} resultante de agregar (i, j) al arbol? La figura muestra la situacion:

La variable xij (arco (i, j)) entra a la base, luego se enva flujo positivo a traves de (i, j). Como se forma un
ciclo, el flujo aumenta o disminuye en los otros arcos segun su sentido. En algun arco el flujo puede llegar a
0. Ese sera el que sale de la base.

Un nuevo arbol generador se forma, nuevos flujos y nuevas variables duales son calculadas, Y las iteraciones
continuan hasta que se cumpla la condicion de optimalidad.

Pregunta: Que pasa si en el circuito pudiera mandarse flujo sin lmite alguno?

Lo que hemos ilustrado sirve de base para el algoritmo SIMPLEX especializado a redes, en el cual se hace uso
excplcito de la estructura de red para el calculo de las soluciones, no recurriendose a la estructura algebraica
de las bases. El algoritmo SIMPLEX especializado a redes es mas eficiente que el SIMPLEX normal aplicado
al problema lineal equivalente. Pese a esta mayor eficiencia que tiene su origen en el uso de la estructura,
muchas de las preguntas tpicas del SIMPLEX se dan aqu. Por ejemplo, para obtener una solucion inicial
factible existe un procedimiento de Fase I para redes. Igualmente existen distintos criterios de seleccion de
variables, interpretaciones adecuadas de las variables duales, etc. La degenerancia de soluciones tambien
esta presente y, de hecho, se estima mas frecuente que en otros problemas.

5
8.6 Ejemplo
Mostramos a continuacion como se desarrolla el algoritmo en el grafo de la figura:

Junto a cada nodo indicamos la oferta o demanda y sobre los arcos indicamos el costo unitario de transporte.
Vamos a comenzar tomado una solucion basica factible al problema, dada por los arcos rezaltados de la
figura siguiente.

Lo primero que hay que hacer es calcular los valores de las variables duales, que se obtienen del sistema:
i j = cij , (i, j) T
En este caso particular, esto se traduce en las ecuaciones:
1 2 = c12
1 3 = c13
2 4 = c24
Fijando 1 = 0 se obtiene 2 = 3, 3 = 10, 4 = 9. Con estos valores se calculan los costos reducidos
de las arcos no basicos, que son (2, 3) y (3, 4):
c23 = c23 2 + 3 = 2 (3) + (10) = 5
c34 = c34 3 + 4 = 3 (10) + (9) = 4
Los costos reducidos son ambos negativos as que esta solucion no es optima. Debemos elegir una variable
(arco) para entrar a la base. En este caso, elegimos el arco (2, 3) (que equivale a la variable x23 ). Este forma
un circuito entre los nodos 1, 2 y 3. Si (2, 3) tomal valor g, entonces el flujo en los otros arcos del circuito
cambia en g segun cual sea el sentido de circulacion del arco. La situacion se muestra en la figura:

6
Podemos ver que el flujo en (2, 4) puede aumentar hasta en 4 unidades, y con ese valor el flujo en el arco
(1, 3) se hace nulo. Ese es el arco (variable) que sale de la base. La nueva solucion basica factible corresponde
ahora al arbol que se muestra en la figura:

Ahora tenemos que calcular nuevamente los valores de las variables duales, que se obtienen del sistema: En
este caso particular, esto se traduce en las ecuaciones:
1 2 = c12
2 3 = c23
2 4 = c24
Fijando 1 = 0 se obtiene 2 = 3, 3 = 5, 4 = 9. Con estos valores se calculan los costos reducidos de
las arcos no basicos, que ahora son (2, 3) y (3, 4):
c13 = c23 2 + 3 = 10 (0) + (5) = 5
c34 = c34 3 + 4 = 3 (5) + (9) = 1
Aun hay un costo reducido negativo as que esta solucion no es optima. Debemos elegir una variable (arco)
para entrar a la base. En este caso, elegimos el arco (3, 4) (que equivale a la variable x34 ). Este forma un
circuito en el que los flujos cambian como se muestra en la figura:

Podemos ver que el flujo en (3, 4) puede aumentar hasta en 3 unidades, y con ese valor el flujo en el arco
(2, 4) se hace nulo. Ese es el arco (variable) que sale de la base. La nueva solucion basica factible corresponde
ahora al arbol que se muestra en la figura:

Ahora tenemos que calcular nuevamente los valores de las variables duales, que se obtienen del sistema: En
este caso particular, esto se traduce en las ecuaciones:
1 2 = c12
2 3 = c23
3 4 = c34

7
Fijando 1 = 0 se obtiene 2 = 3, 3 = 5, 4 = 8. Con estos valores se calculan los costos reducidos de
las arcos no basicos, que ahora son (2, 3) y (3, 4):

c13 = c23 2 + 3 = 10 (0) + (5) = 5


c24 = c24 2 + 4 = 6 (5) + (8) = 3

Ahora los costos reducidos son todos no negativos y podemos asegurar que la solucion actual es optima.

8.7 Como encontrar un arbol basico inicial


El problema de encontrar un arbol basico inicial es el mismo que se da en general en Programacion Lineal:
como encontrar una solucion basica factible inicial. La respuesta a esta pregunta esta dada por un proced-
imiento de Fase I, que en el caso particular del problema de redes, adquiere una forma especial: el agregar
variables equivale a agregar arcos a la red.
Mas especficamente, dado un problema de Flujo a Costo mnimo en un grafo G = (N, A), en donde bi , i N
son las demandas (ofertas) y cij , (i, j) A es el costo de transporte para el arco (i, j), vamos a definir un
grafo auxiliar G0 = (N 0 , A0 ) , al que agregaremos un nodo artificial t, cuya demanda sera bt = 0, y luego
conectaremos cada nodo de N al nodo artifical con un arco artificial de la siguiente manera:

N 0 = N 
{t}
(i, t) si bi > 0
A0 = A
(t, i) si bi 0

Adicionalmente se redefinen los costos de los arcos de esta nueva red, c0ij , de la siguiente manera:

0 0 si (i, j) A
cij =
1 si i = t o j = t
La siguiente figura muestra graficamente la cosntruccion de la nueva red:

La logica del procedimiento de Fase I es la misma que la del general para un problema cualquiera: si al
final de la optimizacion, uno de los arcos artificiales permanece en el arbol optimo con flujo > 0, entonces el
problema original era infactible.

8.8 El problema de Flujo Maximo


Revisaremos ahora otro problema de gran importancia en redes y grafos. Supongamos tenemos un grafo
dirigido (N, A). Cada arco (i, j) A tien capacidad uij (eventualmente +.) Hay dos nodos particulares:
nodo r, el origen, y nodo s, el destino. El problema consiste en enviar el mayor flujo posible de r a s
sin exceder la capacidad en ningun arco.

Ejemplo:
Cual es el maximo flujo en esta red?

8
Ejemplo: estructura de comisiones:
Una Universidad va a realizar un ejercicio de planificacion estrategica y se necesita estructurar una serie
de comisiones. Se deben formar p comisiones y hay q departamentos academicos. Ninguna comision puede
tener mas de un integrante del mismo departamento. Como modelamos esto como un problema de flujo
maximo?

Definicion: Un corte-(r, s) en una red dirigida (N, A) es una particion de N en dos subconjuntos disjuntos,
S y T tales r S, s T . Denotamos el corte por (S, T ).

Definicion: La capacidad de un corte (S, T ) es


X
uij
(i,j)A:iS,jT

Ejemplo:
Cuanto es el valor de los distintos cortes-(1, 6) que se pueden hacer en el ejemplo de la figura anterior?

Lo que vemos en el ejemplo es un resultado muy importante:

Teorema 8.3 (Ford y Fulkerson). El maximo valor de flujo (si existe) que se puede enviar desde el origen
r al destino s es igual a la menor capacidad de entre todos los cortes-(r, s).
Este resultado se conoce como el Teorema de Ford-Fulkerson y fue demostrado en 1956 por L. Ford y R.
Fulkerson. Es uno de los resultados mas importantes de la Investigacion Operacional, no se solo por su uso
practico sino tambien por sus implicancias teoricas en Programacion Entera.
Vamos a desarrollar una demostracion constructiva que entrega un algoritmo explcito para resolver estos
problemas: El algoritmo de caminos de aumento de flujo.
Demostracion: La siguiente demostracion es ilustrativa del argumento general, y se apoya en el ejemplo,
pero provee al argumento fundamental. Es necesario suponer que las capacidades son numeros enteros.
Supongamos primero que disponemos de una asignacion de flujos factibles en la red. Sea f = {fe : e A}
un vector de flujos factibles, es decir
0 fa ua , a A,
y adicionalmente cumplen el equilibrio de flujo. Definamos un grafo auxiliar G0 de la siguiente forma:
el conjunto de nodos es V .
Para a = (i, j) A, si fa < ua , se pone el arco (i, j) con capacidad igual a ua fa .

Para a = (i, j) A, si fa > 0 , se pone el arco (j, i) con capacidad igual a fa .


Este grafo G0 se llama grafo de capacidades residuales o grafo residual. Por ejemplo, para este flujo,

9
El grafo de capacidades residuales es:

Es facil ver que en esta red resudial se pueden enviar 2 unidades de flujo por el camino que muestra la figura:

Este flujo se suma al que ya tenamos y se obtiene:

Siguiendo de esta manera se construyen mas grafos residuales. Los arcos saturados estan representando las
zonas mas restrictivas en capacidad de la red. Finalmente, la conclusion es que en el optimo no se pueden
encontrar mas caminos de aumento de flujo y al menos uno de los cortes esta saturado: aquel indicado por
los arcos saturados. Luego, el valor del flujo alcanzado debe ser igual a la capacidad del corte identificado (de
otro modo, aun se podra construir un grafo residual por el cual se podra mandar mas flujo) Este argumento
demuestra el teorema. QED.

La demostracion provee un algoritmo para resolver el problema: ese es el algoritmo de Ford y Fulkerson.
Este algoritmo, salvo ciertas sutilezas, converge en un numero finito de etapas y es bastante eficiente, pero

10
a lo largo de las decadas se han desarrollado extensiones y modificaciones mas eficientes.

El problema de Flujo Maximo puede formularse como uno de programacion lineal: Sea xij el flujo en el arco
(i, j). Sea F el flujo que se enva desde el nodo r.

max F
P P F i=r
s.t. xij xki = 0 i 6= r, s
(i,j)A (k,i)A F i=s

0 xij uij , (i, j) A

Ejercicio: Construya el dual de este problema y meustre que ese dual calcula el corte mnimo. Esto provee
otro argumento para el Teorema de Ford y Fulkerson.

Ejercicio: Muestre como resolver el problema de Flujo Maximo usando un problema de Flujo a Costo
Mnimo.

8.9 El Problema de Ruta mas corta


Consideramos nuevamente en grafo dirigido (N, A). Cada arco (i, j) A tiene un costo generalizado dij
(o largo o distancia). Hay un nodo r, el origen, y un nodo s, el destino. El problema es encontrar la
ruta mas corta para ir de r a s. Las aplicaciones de este problema son obvias, pero ademas aparece como
subproblema en otros que veremos mas adelante.

El problema se puede formular como uno de flujo a costo mnimo: tomemos dij como es el costo en los arcos.
Se pone una oferta igual a 1 en r, y una demanda 1 en s. Por estructura, el problema tiene lo que se conoce
como la propiedad de integralidad. Esto quiere decir que la solucion es entera sin que tenga que exigirse
a priori. Esto ocurre, en general, en problemas de Flujo a Costo Mnimo donde las ofertas y demandas son
numeros enteros. Luego, la solucion es entera, y como la oferta es 1, ese flujo llega no dividido a s. Sin
embargo, existe un algoritmo mas eficiente.

El algoritmo de Dijkstra para el problema de Ruta mas Corta.

Este procedimiento fue desarrollado por Dijkstra en 1965:


Inicialmente sea S = {s}, di = +, i
/ S, ds = 0.

Etapa general: Sea i el ultimo nodo en entrar a S:


dj = min{dj , di + cij }, j
/ S.
Sea k N S tal que dk = min{dj , j N S}.
S = S {k}.

Este es el algoritmo en su forma base y puede implementarse muy eficientemente. Existen extensiones que,
de hecho, son incluso mas eficientes.

Algoritmo de Dijsktra: un ejemplo


Queremos encontrar la ruta mas corta desde el nodo 1 al nodo 6 en el siguiente frafo:

11
A continuacion se muestra la secuencia de iteraciones:

12
Lo que hemos encontrado es el arbol de rutas mnimas con raiz en el nodo 1.

Como decamos, el algoritmo se puede implementar de manera muy eficiente usando estructuras de datos
apropiadas. Esto permite obtener complejidades del orden de m + nlogn, donde m es el numero de arcos,
normalmente muy inferior a n2 . La implementacion eficiente es muy importante ya que en muchos problemas
se utiliza el calculo de rutas mnimas.

13