Anda di halaman 1dari 29

INSTITUTO MILITAR DE ENGENHARIA

PS-GRADUAO EM ENGENHARIA DE TRANSPORTES

Algoritmos para Resoluo de


Problemas em Redes

Prof. Vnia Barcellos G. Campos


ndice pag

1- Definio e Conceitos Bsicos sobre Grafos 1


1.1 Conceitos Bsicos 1
1.2 Caractersticas Estruturais 2
2- Conceituao de Redes 2
3- Minimizao de Redes 4
3.1 Algoritmo de Kruskal 4
3.2 Algoritmo de Prim 6
4- Algoritmos de Caminho Mnimo 6
4.1 Algoritmo de Dijkstra 7
4.2 Algoritmo de Ford, Bellman e Moore 9
4.3 Caminho mais Confivel 11
4.4 Algoritmo de Floyd 12
4.5 Algoritmo de Dantzig 13
4.6Algoritmo de K-caminhos mnimos 13
4.7Desempenho dos Algoritmos 14
5- Algoritmos de Fluxo Mximo 15
5.1 Conceitos Bsicos 15
5.2 Algoritmo de Aumento de Fluxo 17
5.3 Algoritmo de Ford /Fulkerson 19
5.4 Algoritmo de Dinic 20
5.5 Algoritmo DMKM 21
5.6 Modificaes na Estrutura da Rede 22
5.7 Anlise dos Algoritmos 23
6- Algoritmos de Custo Mnimo 24
6.1 Algoritmo Busacker e Gowen 24
6.2 Anlise dos Algoritmos de custo Mnimo 26
7 - Roteirizao 27
Bibliografia 28
Lista de Exerccios 29

1
1- Definio e Conceitos Bsicos sobre Grafos
Um grafo G = (X,A) uma estrutura composta por um conjunto X de elementos
chamados vrtices ou ns e um conjunto A de pares de vrtices, chamados arcos ou
arestas.

A representao grfica de um grafo feita por pontos (vrtices) e linhas (arestas)


unindo estes pontos.

Quanto as caractersticas de seus arcos, um grafo pode ser :

a) Orientado e no orientado

So orientados quando seus arcos possuem uma orientao definida , ou seja , um


n do arco definido como origem do mesmo e o outro como destino. E, no
orientado, quando no existe esta noo de direo.

b) Valorado e no valorado

Um grafo valorado, quando existem valores atribudos a cada um dos seus arcos.
Exemplo disto ocorre quando se est representando uma rede viria e se atribui a
cada arco os valores correspondentes s distncia entre intersees ( vrtices).

c) Planar e no-planar

Um grafo planar aquele em que os arcos somente se cruzam sobre um n,


podendo consequentemente ser projetado sobre um plano, sem perder suas
caractersticas. Um grafo no-planar, no entanto, quando projetado sobre um plano,
apresenta intersees de arcos no coincidentes com um n, em funo de sua
estrutura espacial.

1.1 - Conceitos bsicos

a) Um arco que se inicia e termina nele mesmo chamado de lao.

b) Um arco ou um n dito incidente a um outro n se este destino ou origem do


arco.

c) Grau de um n medido pelo nmero de arcos incidentes a ele. No caso de grafo


orientado existe a noo de semigrau interior -nmero de arcos incidentes
interiormente ao n e semigrau exterior que corresponde ao nmero de arcos
incidentes exteriormente ao n.

d) Dois vrtices so considerados adjacentes um ao outro se existe um arco unindo-os.

2
e) Uma cadeia uma seqncia de arcos (orientados ou no). O tamanho de uma
cadeia o nmero de arcos que a compem.

f) Um caminho uma cadeia em que todos os arcos tem a mesma direo.

g) Um ciclo uma cadeia cujo vrtice inicial e final o mesmo ( cadeia fechada).

h) Um circuito um caminho cujo vrtice inicial e final o mesmo.

1.2 - Caractersticas Estruturais

a) Um grafo conexo quando existe uma cadeia entre todos os pares de vrtices do
grafo ( fracamente conexo).

b) Um grafo fortemente conexo quando existe um caminho de cada n para todos os


outros ns do grafo.

c) Grafo completo aquele onde cada n est conectado com todos os outros ns do
grafo.

d) Uma rvore um grafo conexo sem ciclos.

e) Um subgrafo uma parte de um grafo, obtido pela supresso de vrtices e dos arcos
adjacentes a estes vrtices.

f) Um grafo parcial de um grafo obtido pela supresso de arcos deste grafo.

g) Um grafo trivial formado por um nico n.

2 -Conceituao de Rede
De uma forma geral uma rede um grafo com um ou mais valores associados a cada
arco e algumas vezes ao ns.

G = {X,A} (grafo)
R = {X,A,} ( rede)

onde
X = conjunto de ns ( X = n );
A = conjunto de arcos (A = m);
= parmetros associados aos elementos do conjunto A

3
Exemplos de Rede:

Ns ou Vrtices Arcos Fluxo


intersees rodovias veculos
aeroportos linhas areas avies
estaes de bombeamento dutos fluidos

Os principais valores associados aos arcos a(i,j) so:

 a capacidade de fluxo u(i,j) que corresponde a capacidade mxima de fluxo que


pode passar no arco;
 o custo c(i,j) no arco que pode ser considerado como um valor monetrio, a
distncia percorrida ou o tempo de viagem no arco.
 fluxo no arco f(i,j);

Os problemas de otimizao de redes compreendem basicamente:

Minimizao de Redes (rvore mnima)


Caminho Mnimo
Fluxo Mximo
Custo Mnimo
Roteirizao

Os problemas de Minimizao de Redes so aqueles em que se busca uma


interligao de pontos de uma rede de forma que a soma total dos valores (custos) dos
arcos utilizados para lig-los seja a menor possvel.

Os problemas de Caminho Mnimo compreendem a determinao do caminho ou


rota de menor tamanho (distncia, tempo ou um custo qualquer) entre dois ns de uma
rede.

Os problemas de Fluxo Mximo se referem s situaes em que se deseja avaliar a


quantidade mxima de fluxo que pode ser enviada de um n de origem a um n de
destino na rede.

Os problemas de Custo Mnimo visam determinar os caminhos entre um par de ns


(origem e destino) pelos quais deve ser distribudo um determinado fluxo com o
menor custo possvel.

Os Problemas de Roteirizao compreendem a busca de um itinerrio que se inicia e


termina num mesmo ponto da rede passando por determinados pontos ou arcos desta
rede.

Para resolver estes problemas utilizam-se procedimentos chamados de algoritmos de


resoluo, descritos a seguir.

4
3 - Minimizao de Redes
Os algoritmos de Minimizao de Rede (Minimum Spanning Tree Problem) tratam da
determinao da rvore de valor mnimo em problemas de interligao de redes de
comunicao, luz, gua, esgoto, dutovias, rodovias etc; com o objetivo de atender a
todos os pontos de consumo(ns da rede) com um consumo mnimo de meios.

Em problemas deste tipo a rede no orientada. Dois algoritmos podem ser utilizados:

algoritmo de Kruskal
algoritmo de Prim

3.1 Algoritmo de Kruskal

Este algoritmo compreende a cada passo a seleo de um arco, iniciando-se pelo arco
de menor valor e prosseguindo com a adio de arcos em ordem crescente de valores
construindo uma arvore, de modo a no formar ciclos com os arcos j selecionados. O
processo se encerra quando a rvore que esta sendo construda possuir n-1 arcos
conectados.

Em termos gerais, o algoritmo compreende os seguintes passos:

Passo 0 Coloque os arcos em ordem crescente de valor. Estes arcos fazem parte de
um conjunto de arcos no conectado A*. O conjunto A de arcos conectados
vazio.

Passo 1 Selecione o menor dos arcos do conjunto A* que no forme um ciclo com
os demais e coloque-o no conjunto A. Um arco forma um ciclo quando os
vrtices deste arco j fazem parte da rvore mnima em construo.

Passo 2 - Se o conjunto A possui n-1 arcos, ento pare, os arcos deste conjunto
compem a rvore mnima, caso contrrio volte para 2.

Exemplo1:

A rede a seguir representa as possveis ligaes rodovirias entre seis regies. Deseja-
se verificar quais as ligaes que devero ser implantadas visando interligar todas as
regies, porm, com uma quilometragem total mnima de estradas construdas. Os
valores sobre os arcos representam as distancias entre as regies (x 102).

5
9
2 6
3

2 6
1 7 3
3 3

1
5
3
5
4
Fig1- Rede do exemplo 1

Passo 0 : Colocando os arcos em ordem crescente de tamanho tem-se:


A* = { (3,4),(3,2),(1,2),(3,5),(6,5),(1,4),(3,6),(3,1),(2,6)}
A=

Passo 1 : A= {(3,4)}
A* = {(3,2),(1,2),(3,5),(6,5),(1,4),(3,6),(3,1),(2,6)}

Passo 2: Como n= 6 e o nmero de elementos de A menor que n-1, ento volta-se ao


passo2;

Passo 1: A = {(3,4),(3,2)}
A* = { (1,2),(3,5), (1,4), (6,5), (3,6),(3,1),(2,6)}

Passo 2: A n-1, passo2


Passo 1: A = { (3,4),(3,2), (1,2)}
A* = {(3,5),(1,4),(6,5),(3,6),(3,1),(2,6)}

Passo 2: A n-1, passo2


Passo 1: A = { (3,4),(3,2), (1,2), (3,5)}
A* = {(1,4),(6,5),(3,6),(3,1),(2,6)}

Passo 2: A< n-1, passo2


Passo 1: A = { (3,4),(3,2), (1,2), (3,5),(6,5}, o arco (1,4) no pode fazer parte do
conjunto pois a sua incluso na rvore forma um crculo.
A* = {(1,4),(3,6),(3,1),(2,6)}

Passo 2: A= n-1, ento j encontramos a rvore mnima representada na figura a


seguir, que possui um total de 12x102 km:

6
2 6
3

2
1 3
3 3

1
5
4

Figura 2 - Rede mnima resultante do exemplo1

3.2 - Algoritmo de Prim

Este algoritmo compreende a associao de ns da rede, buscando a cada passo o n


que esta mais prximo da composio corrente da rvore mnima. Assim como no
algoritmo de Kruskal, considera-se um conjunto de ns conectados e um conjunto de
ns no conectados.

O algoritmo compreende os seguintes passos:

Passo 1 - Selecione qualquer n da rede. Identifique o n que est mais prximo do


n selecionado e inclua este n e respectivo arco na rvore mnima.
Os ns da rvore mnima formam o conjunto de ns conectados C e os ns
restantes o conjunto de no conectados C*.

Passo 2- Identifique o n do conjunto de ns no-conectados C* que est mais


prximo a qualquer um dos ns do conjunto de ns conectados C.
Este processo repetido at que todos os ns estejam conectados, ou seja, o
conjunto C* est vazio.

4 - Algoritmos de Caminho Mnimo


Numa rede qualquer, dependendo das suas caractersticas, podem existir vrios
caminhos entre um par de ns, definidos como origem (s) e destino (t). Entre os vrios
caminhos aquele que possui o menor peso chamado de caminho mnimo. Este
peso representa a soma total dos valores dos arcos que compem o caminho e estes
valores conforme referenciados anteriormente podem ser: o tempo de viagem, a
distncia percorrida ou um custo qualquer do arco.

7
Assim, os algoritmos de Caminho Mnimo determinam a rota de menor tempo,
distncia ou custo entre um par ou pares de origem e destino.

O Caminho timo aquele que apresenta uma seqncia de arcos conectando o n de


origem e o n de destino de tal forma que a soma dos valores dos arcos no caminho
minimizada.

Se o caminho mnimo entre um par de ns ento qualquer caminho que parte deste
caminho tambm mnimo

Existem diferentes formulaes para um problema de caminho mnimo que so:

a) de um n para outro n;
b) de um n para todos os outros ns da rede;
c) entre todos os ns da rede e
d) K- caminhos mnimos entre dois ns.

Existem basicamente dois tipos de estrutura de algoritmos para clculo de caminhos


mnimos : rvores e matrizes.

Nos algoritmos em rvore, determinam-se os caminhos mnimos de um n para todos


os outros ns da rede ou simplesmente entre um par de ns. Neste tipo de algoritmo, a
soluo obtida construindo-se passo a passo uma rvore de caminhos mnimos. Para
se obter os caminhos mnimos de todos os ns para todos os outros ns da rede,
utilizam-se os algoritmos com estrutura de matriz e neste caso os caminhos mnimos
entre todos os pares de ns so obtidos simultaneamente.

Na literatura pesquisada ( ver bibliografia) encontramos os seguintes algoritmos mais


comumente utilizados, com estrutura em rvore: Dijkstra e Ford/Moore, e os
algoritmos em matriz: de Floyd, Dantzig e Double Sweep.

4.1- Algoritmo de Dijkstra

Utiliza-se este algoritmo para determinar o caminho mnimo de um n para outro n


ou para todos os outros ns da rede. considerado um algoritmo bastante eficiente e
a sua utilizao s possvel quando o valor (tempo, distancia ou outros) atribudo a
cada arco da rede positivo.

Trata-se de um algoritmo iterativo que se utiliza de uma frmula de recorrncia (1) e


considera que um n fechado quando se encontra o caminho mnimo da origem
at este n e aqueles ns cujos caminhos mnimos ainda no foram encontrados so
considerados ativos ou abertos.

8
O conceito de fechado e aberto est associado a impossiblidade de se encontrar um
caminho melhor do que o j encontrado, assim enquanto o n no fechado ( ou
rotulado) ainda possvel encontrar um caminho de menor valor da origem at este
n.

Frmula de Recorrncia:

d(x)i = min { d(x)i-1, d(y) + d(y,x)} (1)

onde:
d(x) i- tamanho do caminho da origem S at o n x ( na iterao corrente).
d(y) - tamanho do caminho da origem S at o n fechado (y)
d(y,x)- tamanho do arco (y,x)

Estrutura do algoritmo:

Passo 1: Atribui-se um valor d(x) para cada um dos vrtices do grafo sendo:
d(s)= 0 e
d(x)= para todo n x s
Considere y o ltimo n rotulado (fechado).
Inicialmente o n s o nico rotulado e y= s.

Passo 2 : Para cada n x no-fechado (aberto) redefine-se d(x) conforme a expresso


1. O n aberto que possuir o menor valor d(x) fechado e faz-se y = x.

Passo 3 : Se o n de destino t foi fechado ento pare, um caminho de s para t foi


encontrado. Se o t ainda no foi fechado volte ao passo2.

Os ns rotulados (fechados) formam uma arborescncia de raiz s e o caminho de s


para qualquer n x contido em qualquer caminho um caminho mnimo de s para x.
Assim se deseja-se saber os caminhos com origem em s para todos os demais ns da
rede, tem-se que prosseguir com algoritmo at que todos os ns sejam rotulados.

O algoritmo de Dijkstra foi desenvolvido em 1959 e posteriormente Dantizg (1960) e


Nicholson (1960) desenvolveram o algoritmo de duas rvores de Dijkstra (Dijkstra
two-tree algorithm), cuja idia construir rvores de caminhos mnimos de um n
origem s e de um n de destino t simultaneamente. Logo, ao se chegar a um n
comum o caminho mnimo entre s e t foi encontrado. Esta idia mostrou ser
interessante do ponto de vista de tempo computacional, conforme foi constatado
posteriormente por Helgason (1988).

9
4.2 - Algoritmo de Ford, Bellman e Moore

Trata-se de uma generalizao do algoritmo de Dijkstra, permitindo a utilizao de


arcos com valor negativo, a partir de uma pequena modificao, observando-se porm
que, a existncia de ciclos negativos, pois nestes casos, o algoritmo no chega a uma
soluo.

Neste algoritmo utiliza-se a frmula de recorrncia anterior (1) e no existem ns


fechados, pois a existncia de arcos com valores negativos pode fazer com que os
caminhos a cada iterao possam ser reduzidos, assim o algoritmo s chega a uma
soluo quando todos os ns forem analisados e os valores dos caminhos se repetem
na iterao seguinte.

Como se trata de uma generalizao do algoritmo de Dijkstra as seguintes


modificaes devem ser feitas neste algoritmo:

1. No passo 2, aplica-se a expresso 1 em todos os vrtices, no somente nos ns


no rotulados (abertos). Assim, tanto os ns j rotulados quanto os no rotulados
podem ter seus valores reduzidos.

2. Se um n rotulado teve seu valor reduzido, ento desconsidere (desrotule) o arco


anteriormente incidente este n.

3. Termine o algoritmo somente depois que todos os vrtices foram rotulados e se no


no houver modificaes no valor dos caminhos.

Algumas modificaes foram posteriormente sugeridas por outros autores como


Steenbrink, Esopo e Pape (1980) para melhorar o desempenho computacional deste
algoritmo.

No mtodo de Ford (1956), Moore(1957) e Bellman ( 1958), um n pode ser


considerado piv inmeras vezes pois a cada iterao um caminho descoberto.
Esta fonte de ineficincia em tempo de processamento para chegar a soluo pode ser
reduzida pelas seguintes heurticas sugeridas por Esopo e Pape:

1 - Se um n n qualquer nunca foi rotulado ele deve ser o ltimo a ser considerado
piv. Caso contrrio, se o n n j foi rotulado ou examinado deve ser considerado
como um dos primeiros a ser pivoteado.

2 - A razo para se colocar um n j examinado de piv para reexaminar aqueles que


alcanam n imediatamente, reduzindo o tempo de chegar a soluo final.

Resumo do procedimento de Esopo e Pape:

1. d(s)= 0 s o n rotulado (piv), ento y=s;

10
2. min d(s,j) j o novo piv, ento y=j;

3. se algum n que foi piv modificado ento o prximo a ser avaliado. Seno
toma-se o n de valor mnimo como piv.

4.3 Caminho mais Confivel

Em algumas circunstncias pode ser interessante verificar qual o caminho mais


confivel a ser utilizado. Nestes casos, os valores associados a cada arco se referem a
probabilidade de sucesso de um evento qualquer.

Seja R=(X,A) uma rede orientada representando uma rede de comunicao tendo-se:

Pi,j = probabilidade de que o arco (i,j) A estar ativo em determinado instante onde
0 Pij 1

C = caminho de s para t

Considerando-se a independncia dos eventos:


Prob{ C estar operativo } = Pij
( i , j ) C '

Exemplo 2:

Ps1 P1t
1

t
S

Ps2 P2t
2

Figura 3 - Rede de comunicao (Exemplo 2)

Probabilidade C(s,1,2.t) estar ativo = Ps1. P12. P2t

Assim determinar o caminho mais confivel de s a t em R equivale a maximizar


Pij
( i , j ) C '

Seja P = P
( i , j ) C '
ij

Fazendo-se:

11
log P = log P = log P
( i , j ) C '
ij
(i , j ) C '
i, j

Assim, max P = - min log P


(i , j ) C '
i, j

= min log P
( i , j ) C '
i, j

Desta forma, o problema acima pode ser entendido como um problema de caminho
mnimo.

Num problema de encontrar um caminho de menor risco, deve-se atribuir a cada arco
a probabilidade de no ocorrncia de algum tipo de evento de risco. E assim
maximizar a probalidade de no ocorrncia do evento.

4.4 Algoritmo de Floyd

Trata-se de um algoritmo que utiliza matrizes para determinar os caminhos mnimos


entre todos os pares de ns da rede. No algoritmo de Floyd so feitas n iteraes que
corresponde ao nmero de ns da rede . A cada iterao corresponde uma matriz n x
n cujos valores so modificados utilizando tambm uma frmula de recorrncia (2) .

Assim trabalha-se com K matrizes de n x n sendo K= 1,2,3 ... n onde cada valor da
matriz definido como :

dij k = min { dikk-1 + dkj k-1 , dij k-1 } (2)

onde dijk o caminho entre os ns i e j na k-sima matriz de iterao.

Determina-se inicialmente uma matriz D0 cujo os valores correspondem aos tamanhos


dos arcos se estes existem seno os valores so . Depois calcula-se D 1 de D 0 e D
2
de D1 at se obter Dn de D n-1 . A matriz Dn a matriz final que apresenta os
caminhos mnimos entre todos os ns da rede.

A idia bsica deste algoritmo verificar a cada iterao se a incluso de um n k


intermedirio no caminho de i para j pode reduzir o tamanho de um caminho j
determinado:

k
j
i

12
Estrutura do Algoritmo

Passo 1 - Numere os vrtices do grafo de 1,2..n. Defina a matriz D0 , cujos valores d0ij
correspondem ao tamanho (valor) dos arcos i,j se existir o arco no grafo;
caso contrrio considere dij = , e faa os elementos da diagonal da matriz,
dii=0 para todo i.

Passo 2 - Para cada k = 1..n determine sucessivamente os elementos da matriz Dk a


partir dos elementos da matriz Dk-1 utilizando a expresso 2.

Este processo repetido at k=n, e neste caso o valor do caminho mnimo de todos os
pares i,j do grafo esto definidos na matriz Dn..

Note que diiK = 0 para todo i e para todo k, consequentemente, os elementos da


diagonal das matrizes no necessitam ser calculados. Alm disso, dikk-1 = dikk e dkik-1
= dkik para todo i= 1,2..n. Ou seja, os elementos da linha e da coluna k da matriz Dk
so iguais ao da matriz Dk-1, isto acontece porque o vrtice/n k no pode ser um n
intermedirio de um caminho que se inicia ou termina nele mesmo, desde que no
existam ciclos negativos. Assim, em cada matriz Dk somente (n-1)(n-2) elementos que
no esto nem na diagonal nem na k-sima linha e coluna precisam ser calculados.

Para se identificar os ns que fazem parte dos caminhos cujos valores so dados pela
matriz Dn , tem-se por opo guardar a cada iterao os arcos do caminho ou utilizar
uma matriz que guarda a cada iterao o penltimo n que forma aquele caminho,
Logo, a partir desta matriz por um processo de roteamento pode-se identificar os ns
que formam aquele caminho.

Matriz de Roteamento:

Tambm chamada de matriz de uni-roteamento, a Matriz de Roteamento permite a


descrio do caminho mnimo entre cada par de vrtice, e baseia-se no princpio de
que um vrtice k pertence a um caminho dij se e somente se dik + dkj = dij .

Considerando-se que a matriz de roteamento formada pelos penltimos vrtice dos


caminhos entre os pares de vrtice do grafo e definido-se este elemento como k , faz-
se:
rij =k (elemento da matriz de roteamento)

dij = ?
rik = .......rikm =i

Ou seja, vai-se substituindo o penltimo vrtice a cada caminho at que se chega ao


n inicial i do caminho procurado.

13
Se considerarmos que um caminho tem m ns intermedirios, iniciando-se pelo
penltimo k, vamos chegar ao n de origem , ao encontrarmos o elemento km.

Centro de um Grafo
O centro de um grafo corresponde ao vrtice x do grafo que apresenta a menor das
distncias mximas aos demais vrtices do grafo. Este centro definido a partir do
resultado do algoritmo de Floyd, verificando-se na ultima matriz (Dn ) para cada
vrtice qual o vrtice que tem o menor valor da maior distncia aos demais vrtices
do grafo.

Mediana de um grafo
A mediana de um grafo corresponde a um vrtice x com o menor somatrio das
menores distancias aos demais vrtices do grafo. Para obt-la utiliza-se o algoritmo de
Floyd somando-se os valores de cada linha da matriz final do algoritmo e o vrtice
que corresponde a mediana aquele que tem a menor soma.

_
4.5 Algoritmo de Dantzig

O algoritmo de Dantzig apresenta as mesmas caractersticas do algoritmo anterior,


muito embora trabalhe a cada iterao com matrizes de tamanhos diferentes.

Neste algoritmo utiliza-se n matrizes para se chegar ao resultado final, porm as


matrizes so de tamanhos k x k e, como no algoritmo anterior a matriz final Dn , ou
seja, para k = n , o i,j-simo elemento determina o tamanho do menor caminho do n
i ao n j.

Estrutura do algoritmo:

Passo 1: Numere os vrtices do garfo de 1,3..n. Defina a matriz D0 , conforme descrito


para o algoritmo de Floyd.

Passo 2 : Para k = 1..n determina-se a cada iterao os elementos de uma matriz Dk =


k x k da seguinte forma:

dkkj = min { d0ki + dk-1ij } para: i= 1,2..k-1 e j = 1,2..k-1 (3)


dkik = min { dk-1ij + d0jk } para: i= 1,2..k-1 e j = 1,2..k-1 (4)
dkij = min { dkik + dkkj , dk-1ij } para i= 1,2..k-1 e j = 1,2..k-1 (5)

Para identificar os ns que compem cada caminho, utiliza-se o mesmo processo de


roteamento definido no algoritmo de Floyd.

14
4.6 Algoritmo de k-Caminhos Mnimos

O objetivo deste algoritmo definir mais de um caminho mnimo entre uma origem e
um destino. Assim podemos obter k- caminhos mnimos em ordem crescente de
tamanho. Este tipo de problema importante na medida em que algumas vezes
desejamos verificar mais de uma opo de caminho para um determinado transporte .

Estes algoritmos tambm trabalham com matrizes e como nos anteriores utilizam as
operaes de adio e minimizao, efetuadas com conjuntos ( vetores) de k distintos
nmeros representando o conjunto de caminhos entre dois vrtices.

Entre os algoritmos existentes para k-caminhos mnimos podemos citar: Double-


Sweep, os de Floyd e Dantzig generalizados .

4.7- Desempenho dos Algoritmos de Caminhos Mnimos

Os algoritmos que utilizam matrizes tm a vantagem de serem geralmente mais fceis


de serem codificados num programa de computador. Alm disso, a eficincia no
tempo computacional exatamente determinvel e independente da estrutura da rede.

bastante difcil comparar exatamente a eficincia no tempo computacional entre


algoritmos em rvore e matriz.

Quando se deseja o caminho entre todos os ns e quando todos os ns esto


diretamente conectados com todos os outros ns, os algoritmos em matriz so mais
eficientes que os algoritmos em rvore. Mas quando os ns esto diretamente
conectados com poucos ns e quando somente o caminho entre um subconjunto de
ns desejado, ento os algoritmos em rvore so mais eficientes quanto ao tempo
computacional. Em geral os algoritmos em rvore parecem ser mais teis que os
algoritmos em matriz para redes de transporte.

Conforme se verificou todos os algoritmos de caminho mnimo consistem


essencialmente de duas operaes: adio e minimizao. Para analisar a
complexidade computacional destes algoritmos necessita-se de alguns meios para
comparar operaes de adio com operaes de minimizao. Certamente que estas
operaes variam com os computadores utilizados, por convenincia assume-se que
estas duas operaes tm equivalentes tempos computacionais.

Pode-se concluir que dado o nmero de operaes necessrias os algoritmos


apresentados anteriormente tem a seguinte ordem de complexidade:

Dijkstra =3n2/2
Ford = 1 n 3
Floyd = 2n3
Dantzig= 2n3
15
5 - Algoritmos de Fluxo Mximo
A utilizao destes algoritmos tem por objetivo verificar a capacidade mxima de
fluxo em uma rede a partir de um n origem a um n de destino. Nestes casos, cada
arco possui um valor que indica a capacidade mxima de fluxo que pode passar por
ele ( limite superior ) e, dependendo da rede ou do objetivo da anlise, h um outro
valor que indica o fluxo mnimo (limite inferior) que deve passar pelo arco .

Um dos primeiros algoritmos se deve a Ford e Fulkerson (1956), os algoritmos que


surgiram posteriormente visavam melhorar o desempenho computacional deste
algoritmo. Alm disso, algumas modificaes foram tambm introduzidas na forma
de trabalhar a rede como foi o caso do algoritmo de Dinic (1970) que introduziu o
conceito de redes em camadas e Mallhotra (1978) que introduziu o conceito de
potencial de um n.

A idia bsica de um algoritmo de fluxo mximo encontrar caminhos de aumento


de fluxo de uma origem S para um n de destino T e alocar nestes caminhos a maior
quantidade de fluxo possvel.

5.1 Conceitos Bsicos

Para resoluo de um problema de fluxo mximo, algumas consideraes conceituais


se fazem necessrias:

1- Lei de Kirschhoff ou lei de Conservao de Fluxos : a soma dos fluxos que


entram em um n igual a soma dos fluxos que saem deste n.

2- Fluxo vivel um fluxo que obedece a lei acima e as restries de capacidade dos
arcos.

3 -Corte definido como qualquer conjunto de arcos orientados contendo no mnimo


um arco de cada um dos caminhos possveis entre um n de origem e um n de
destino num grafo, de tal forma que se este conjunto de arcos for retirado do grafo
conexo divide-o em duas componentes conexas.

O valor de qualquer corte, dado pelo somatrio das capacidades dos arcos do
t. O valor de um corte representa um limite superior para o
corte na direo s
Fluxo mximo, e o corte de valor mnimo define o Fluxo mximo no grafo.

Um corte C em G(X,A) separando s e t um conjunto de arcos (x,x) onde s x e


t x. A capacidade do corte (x,x) c(x,x).

Por exemplo, na figura abaixo o conjunto de arcos C = {(s,1) e (2,t)} representam


um corte onde x = {s,2} e x={1,t}.

16
1
s t

2
Com base nos conceitos acima, os problemas de Fluxo Mximo podem ser traduzidos
em um problema de Programao Linear numa rede (X,A,c ) da seguinte forma:

max V

Sujeito :

Para o n origem :

f
i
si f is = V
i

Para o n de destino:

f i
ti f it = V
i

Para qualquer n s ou t:

f
i
ji f ij = 0
i

Para todo arco:


0 f(i,j) c(i,j)

Onde:
f(i,j) - fluxo no arco (i,j)
c(i,j) - capacidade de fluxo do arco(i,j)
V - fluxo mximo na rede

As trs primeiras restries referem-se lei de conservao de fluxo e a terceira a de


viabilidade de passagem de um fluxo num arco qualquer do grafo.

O princpio geral de um algoritmo de Fluxo Mximo a determinao de caminhos de


aumento de fluxo, conforme veremos a seguir.

17
5.2 - Algoritmo de Aumento de Fluxo

O procedimento bsico deste algoritmo consiste no desenvolvimento de uma rvore


de caminhos (uma arborescncia), ou seja, vrios caminhos a partir de uma origem S ,
ao longo dos quais os fluxos nos arcos podem ser aumentados. Se o destino T est
includo nesta arborescncia, ento o caminho que inclui T ser um caminho de
aumento de fluxo. Se T no est includo na arborescncia, ento no existe
possibilidade de aumentar o fluxo de S para T.

Encontrar um caminho de aumento de fluxo entre S e T significa encontrar um


caminho no qual se possa alocar uma quantidade de fluxo entre estes dois ns. Esta
quantidade de fluxo vivel no caminho encontrado definida pela capacidade do
arco gargalo deste caminho, ou seja, pela capacidade do arco de menor capacidade
do caminho No grafo abaixo, a capacidade do caminho {a,b,c,d,e} de 3 unidades
definida pelo arco gargalo (b,c).

C=5 C=3 C=4 C= 6


a b c d e

Ao se alocar um fluxo num caminho da rede a capacidade dos arcos utilizados


modificada _ passa a ser uma capacidade residual dada pela diferena entre a
capacidade real do arco e o fluxo corrente no arco. No caso do arco gargalo, como o
fluxo no caminho dado pelo valor da sua capacidade, diz-se que ele est saturado e,
no caso a sua capacidade residual zero.

Portanto, para utilizao de um algoritmo de aumento de fluxo faz-se necessrio


entender o desenvolvimento de uma rede residual.

Rede Residual

Intuitivamente, dada uma rede e um fluxo passando nesta rede, a rede residual
consiste dos arcos que ainda admitem uma quantidade de fluxo, ou seja, que no
foram saturados.

Os arcos numa rede capacitada podem ser divididos em dois conjuntos:


I conjunto dos arcos que podem ter seu fluxo aumentado;
R- conjunto dos arcos nos quais o fluxo pode ser reduzido;

Conceitualmente, temos:
conjunto I formado pelos arcos que possuem f(x,y)< c(x,y), pois estes arcos
podem ter seu fluxo aumentado de r(x,y)= c(x,y)-f(x,y), que a capacidade
residual do arco.

18
conjunto R formado pelos arcos que possuem f(x,y)>0, tambm chamados de
reduzveis.

Um arco a(x,y) que tenha 0< f(x,y) < c(x,y) ,pertence a ambos os conjuntos I e R.

Dentro destes conceitos uma rede residual construda da seguinte maneira:

I, ento construa este arco na rede residual rotulando-o com a


se um arco a(x,y)
sua capacidade residual r(x,y)= c(x,y)-f(x,y) ;

se a(x,y) R, ento construa um arco reverso a(y,x) na rede residual rotulando-o


com r(y,x)= f(x,y), a capacidade de reduo.

Exemplo 3:
Considere a Rede a seguir com um fluxo corrente de f=2

C=4 C=3 C=5

f=2 s 1 2 t f=2
f=2 f=2 f=2

Em funo do fluxo corrente a rede residual correspondente :

C=2 C=1 C=3

f=2 s 1 2 t f=2
r=2 r=2 r=2

Estrutura do algoritmo de aumento de fluxo:

Este algoritmo utiliza um processo de rotulao em que cada n recebe dois rtulos:

e(x) - representa a quantidade mxima de fluxo adicional no caminho pesquisado


de S para o n x.

p(x) o n antecessor de x no caminho pesquisado.

Quando se encontra o n de destino t o valor de e(t) representa a quantidade mxima


de fluxo no caminho encontrado.

19
Passo1 - Construa uma rede residual correspondente ao fluxo corrente ( fluxo atual
vivel).
Comece rotulando s com: e(s)= e p(s) = 0.
Todos os outros ns so inicialmente no-rotulados e todos os arcos so
no-marcados.

Passo 2 Selecione um n x que ainda no foi rotulado. Se no existe nenhum ento


pare, neste caso no existe possibilidade de encontrar caminhos de aumento
de fluxo de s para t. Caso contrrio v para o passo 3.

Passo 3 - Se o arco a(x,y) um arco que pertence ao conjunto I ento rotule y com
e(y) = min{e(x),r(x,y)} e p(y)=x. Se o n t rotulado, ento um caminho de
aumento de fluxo de s para t foi encontrado, caso contrrio volte ao passo2.

5.3 - Algoritmo de Ford / Fulkerson

Trata-se de um algoritmo que aplica um processo de rotulao para definir rotas ( de S


para T) com a possibilidade de aumento de fluxo. Inicia-se o processo com um fluxo
vivel ( igual a zero, quando no conhecido) de S para T e procura-se um caminho de
aumento de fluxo. Se este caminho encontrado ento envia-se tantas unidades de
fluxo quantas forem possveis por este caminho. Procura-se, ento, novamente um
outro caminho de aumento de fluxo de S para T assim sucessivamente, at que no
haja nenhum outro caminho e, neste caso, o fluxo corrente mximo.

Estrutura do algoritmo:

Passo 1 Considere s o n fonte (origem do fluxo) e t o n de destino. Selecione


qualquer fluxo vivel de s para t, isto qualquer conjunto de valores de
f(x,y), que satisfaa as restries de capacidade e de continuidade de fluxo
(ver pag. 16 ). Se tal fluxo inicial no conhecido faa o fluxo inicial
f(x,y)=0 para todo arco a(x,y).

Passo 2 - Construa a rede residual relativa ao fluxo corrente.

Passo 3 - Utilize o algoritmo de aumento de fluxo. Se nenhum caminho entre s e t for


encontrado pare; o fluxo corrente mximo. Caso contrrio aloque este
fluxo no caminho encontrado, apague todos os rtulos e volte ao passo 2.

Modificaes devidas a Edmonds -Karp

Para assegurar que o algoritmo de Fluxo Mximo chega a uma soluo tima aps um
nmero finito de caminhos de aumento de fluxo, Edmond e Karp sugeriram que no
passo 3 para encontrar um caminho de aumento de fluxo, os ns fossem inicialmente
20
pr-rotulados a partir da origem na ordem em que fossem aparecendo. Assim, a
origem recebe o rtulo 1, os ns incidentes a esta recebem rtulo 2 e assim por diante.

Se o processo de rotulao feito desta forma, o caminho de ns marcados (primeiro


rotulado, primeiro considerado) conectando qualquer n de origem para o destino
conter to poucos arcos quanto possvel.

5.4 - Algoritmo de Dinic

Utiliza-se neste algoritmo o conceito de redes em camadas (rede acclica). O grafo


inicial dividido em nveis de ns a partir da origem s que pertence a camada de nvel
1 at a ltima camada a qual pertence o destino t. A rede estruturada desta forma no
apresenta arcos entre os ns da mesma camada. O objetivo comear enviando uma
quantidade de fluxo de s para t em caminhos com o menor nmero de arcos,
procurando saturar os arcos at que no exista mais caminhos de aumento de fluxo
entre estes ns. Neste caso, a rede ento reestruturada, revertendo o sentido dos
arcos saturados e definindo-se novamente os nveis dos ns. Inicia-se novamente o
processo de enviar fluxos saturando arcos e, assim sucessivamente, at que no se
consiga mais restruturar a rede.

Um arco a(x,y) numa rede saturado quando f(x,y)= c(x,y). Um caminho P de s t


saturado se no mnimo um dos arcos de P saturado.

Uma rede, considerada saturada se todos os caminhos de st esto saturados. O


fluxo total numa rede saturada um fluxo de saturao, que o fluxo mximo na
rede.

Rede em Nveis

Uma rede em nveis RN = (XN,AN) uma rede acclica obtida da rede original, na qual
todos os ns XL so particionados em nveis (ou camadas) X1, X2 .. XN .

O primeiro nvel, X1, contm apenas a fonte s , ou seja, X1 ={s}.O segundo nvel, X2,
contm todos os ns que so imediatamente sucessores de s. O terceiro nvel consiste
de todos os ns que so imediatamente sucessores dos ns do segundo nvel. E assim
sucessivamente, o i-simo nvel Xi consiste de ns que esto uma distncia de i-1
nveis de s.

O nvel Xn corresponde ao n de destino t, ou seja, Xn = {t}.

Assim todo n de uma rede em nveis est num caminho de s para t e todos os
caminhos so do mesmo cumprimento ( em termos do nmero de arcos).

21
Estrutura do Algoritmo de Dinic

Passo 1 -Definir uma rede em nveis considerando o fluxo corrente. Se este fluxo
existir considera-se a rede residual correspondente. Caso contrrio o fluxo
inicial zero.
Se no for possvel definir uma rede em nveis, pare; a rede j foi saturada e
F o fluxo mximo e v para o passo 3.

Passo 2 Saturar a rede em nveis, ou seja, saturar todos os caminhos possveis de


t, definindo-se um fluxo de saturao Fr ( r= iterao). Volte ao passo 1.
s

Passo 3 Somar os fluxos de cada iterao F = F1 + F2 ....

5.5 Algoritmo de Dinic/Malhottra/Kumar/Maheshwari

Trata-se do algoritmo de Dinic onde se acrescentou o conceito de potencial do n.


Definida a rede em camadas verifica-se qual n possui o menor potencial. O potencial
de um n definido como o menor valor entre a soma da capacidade dos arcos que
saem deste n e a soma da capacidade dos arcos que incidem sobre este n . O fluxo
referente ao menor potencial definido ento como o fluxo a ser puxado da origem
s e o mesmo valor empurrado para o destino t, e este passa a ser o fluxo corrente.
Desta forma, elimina-se pelo menos um arco saturado, redefinindo-se a rede em
camadas e dando incio novamente o processo.

Procedimento para encontrar um Fluxo de Saturao na Rede em Camadas

1. Para cada n v da rede em camadas verifica-se o fluxo mximo (inpot (v)) que
chegar ao n e a quantidade mxima de fluxo que pode sair do mesmo (outpot
(v)).

2. potencial de cada n ento definido como o menor entre o total de entrada (inpot
(v)) e o total de sada (outpot (v)).

3. Identifica-se o n r de menor potencial ( poten (r) ). E toma-se r como o n de


referncia.

4. Distribui-se nos arcos de sada ( sucessores) do n r a quantidade de fluxo=


poten(r) e puxamos dos arcos anteriores ( antecessores) do n r a mesma
quantidade de modo a alcanar os ns s e t. Feito isto estabelecemos um fluxo de
saturao.

22
5. Retira-se da rede todos os arcos saturados da rede em nveis. O efeito da retirada
ser a reduo do potencial de vrios ns da rede e nmero de arcos. Atualiza-se
os valores do potencial dos ns e inicia-se uma nova iterao.

Os procedimentos definidos por Dinic, Malhotra e outros visam otimizar o tempo


computacional do algoritmo de Fluxo Mximo.

5.6 Modificaes na Estrutura das Redes

Em alguns casos em funo do problema em estudo fazem-se necessrias algumas


modificaes na estrutura das redes de tal forma que se possa aplicar um algoritmo de
Fluxo Mximo. Dentre estes se destaca:

1- Vrias Fontes e/ou vrios destinos:

Considera-se uma fonte nica fictcia ligando-se atravs de arcos tambm fictcios s
fontes (origens) da rede real, o mesmo se faz quando existem vrios destinos criando-
se um destino nico , como na figura abaixo:

S1 T1

T
S
S2 T2

S3

A capacidade dos arcos que ligam a fonte fictcia s fontes reais igual a capacidade
destas fontes quando as mesmas forem centros produtores; o mesmo se define para o
destino no caso de serem centros consumidores. Se no houver estes valores ento a
capacidade destes arcos pode ser considerada como infinita.

2 - N com Capacidade

Na maioria dos problemas de Fluxo Mximo as capacidades so atribudas aos ns,


porm podem existir problemas nos quais os ns tenham capacidades, ou mesmo,

23
custos. Neste caso, estes ns devem ser substitudos por um arco com capacidade
igual ao do n.

Ck
Ck
K k k

3- Redes com limites inferiores

Em algumas situaes existem limites inferiores (lij) de capacidade associados aos


arcos, significando que no mnimo lij unidades de fluxo devem passar do n i para o
n j. Isto complica a utilizao do algoritmo pois inicialmente no se tem um fluxo
vivel igual a zero.

Para encontrar um fluxo inicial vivel, de tal forma que se possa utilizar o algoritmo
de fluxo mximo, estende-se a rede utilizando da seguinte maneira:

1. acrescente a rede dois ns (u e v);


2. acrescente um arco de t para s tendo capacidade infinita;
3. seja a(i,j) um arco com limite inferior diferente de zero, lij;
4. crie um arco de u para j com capacidade lij e um arco de i para v com a mesma
capacidade;
5. considere a capacidade do arco a(i,j) = cij - lij;
como todos os arcos tem na rede estendida limite inferior igual a zero, o algoritmo de
fluxo mximo pode ser aplicado. Resolvendo-se o fluxo mximo de u para v obtm-se
um fluxo vivel inicial.

5.7 - Anlise dos Algoritmos de Fluxo Mximo

Em termos de redes de transporte os algoritmos de Fluxo Mximo so importantes


para uma avaliao da capacidade de uma rede em absorver um determinado fluxo de
veculos, ou seja, pode servir para uma primeira anlise das condies da rede
inclusive para identificar gargalos na mesma.

Pelos algoritmos apresentados podemos observar que as modificaes introduzidas


foram trazendo uma melhora em termos de desempenho computacional para estes
algoritmos. O algoritmo de Ford/Fulkerson apresentava problemas, podendo tomar
infinitos passos para convergir para uma soluo tima no pior dos casos.
Posteriormente uma modificao foi introduzida por Edmond e Karp (1972) fazendo
com que o algoritmo passasse a ter um desempenho computacional de ordem O(nm2) .
Edmond e Kasp mostraram que se procurarmos os caminhos de aumento de fluxo

24
atravs de caminhos com um nmero mnimo de arcos, ento estaremos dimuindo o
tempo de procura.

As modificaes introduzidas por Dinic fizeram com que o algoritmo original


passasse a ter um desempenho de ordem O(n2m) , tornando-o mais simples e mais
eficiente particularmente quando a rede densa. Posteriormente a modificao
introduzida por Malhotra et ali, fez com o algoritmo passasse a ter um desempenho
de ordem O(n3).

6 - Algoritmos de Custo Mnimo


Nos problemas anteriores tratou-se de verificar a quantidade mxima de fluxo que
poderia ser enviada de uma origem s para um destino t, no havendo custo envolvido.
Os algoritmos de custo mnimo tratam do problema de enviar uma quantidade
qualquer de fluxo v de s para t numa rede na qual todos os arcos a(i,j) tem uma
capacidade ou limite superior u(i,j) tanto quanto um custo c(i,j) associado a estes
arcos. Este custo pode ser de vrios tipos : tempo ,distncia, consumo de combustvel
ou at mesmo uma combinao destes.

Se o fluxo v, que se deseja alocar menor que o fluxo mximo F para uma
determinada rede, ento podem existir diferentes formas de distribuir este fluxo na
rede. O objetivo dos algoritmos de custo mnimo , ento, encontrar os caminhos de
fluxo que minimizam o custo total.

Para resolver um problema desta natureza encontramos os seguintes algoritmos:


Ford/Fulkerson ,Out of Kilter e o de Busacker e Gowen.

6.1 - Algoritmo de Busacker e Gowen

Trata-se de um procedimento iterativo, que busca alocar uma quantidade de fluxo V


com o menor custo possvel utilizando, a cada iterao, um algoritmo de caminho
mnimo para definir o caminho de custo mnimo onde alocado o mximo de fluxo
possvel respeitando as restries de capacidade de cada arco. Aps a alocao deste
fluxo utiliza-se um procedimento de modificao da rede para definir um novo
caminho mnimo no qual ser alocada uma nova quantidade de fluxo mximo possvel
e assim sucessivas vezes, at que se tenha atingido o fluxo V desejado, ou at que no
se encontre nenhum caminho para se alocar o fluxo que ainda no foi alocado.

Etapas do algoritmo:

25
Passo1 - Encontra-se um caminho mnimo de s para t utilizando um algoritmo de
caminho mnimo e v pra o passo2. Se no for possvel encontrar um
caminho - pare, no h soluo para o problema.

Passo 2 - Envia-se tantas unidades de fluxo quantas forem possveis de s para t neste
caminho. Se o fluxo v foi atingido - pare. Caso contrrio, v para o passo 3

Passo 3 - Modifica-se a rede em funo do fluxo alocado em cada caminho encontrado


e volte ao passo 1.

Rede Modificada

Chama-se de Rede modificada a rede G* com a mesma estrutura de G mas com as


capacidades modificadas u*ij e os custos modificados C*ij definido como segue.

1- Se existe um fluxo fij 0 alocado num arco qualquer a(i,j), constri-se um arco
fictcio de sentido inverso com capacidade igual ao fluxo fij ; isto :

u*ji = fij se fij > 0;

2- Associa-se este arco fictcio um custo -cij , ou seja, o mesmo custo do arco
existente porm com valor negativo. Este custo negativo porque a utilizao de
um arco de sentido inverso significa uma reduo do fluxo que passa no arco
original e, portanto trata-se de uma reduo de custo.

c*ji = -cij se fij >0

3- Se num arco qualquer est alocado um fluxo fij,, e este no est saturado, ento, a
capacidade deste arco passa a ser capacidade residual u*ij = uij - fij . O custo de
enviar uma unidade de fluxo no arco no saturado o mesmo custo do arco
original. Isto :

c*ij = cij se fij 0

Esta forma incremental de alocar fluxos foi originalmente proposta por Busacker e
Gowen. Este procedimento tambm chamado de mtodo dual de resolver problema
de custo mnimo, uma vez que a primeira soluo vivel obtida uma soluo tima.

6.2 - Anlise dos Algoritmo de Custo Mnimo

Em termos de planejamento de sistemas de transporte, os algoritmos de custo mnimo


podem ser utilizados para definir a melhor distribuio de trfego considerando que
sob o ponto de vista de um conjunto de usurios de uma rede, ter-se-ia um ganho no
custo mdio se o volume fosse distribudo conforme definido pelo algoritmo.Tambm,
26
sob o ponto de vista de uma indstria, este algoritmo poderia ser utilizado para definir
a melhor forma de transporte numa rede (unimodal ou multimodal) para chegar com o
produto ao destino ( centro consumidor/depsito)

7 Roteirizao

Um problema de roteirizao compreende a definio de um itinerrio a partir de um


ponto de uma rede passando por vrios outros pontos desta rede e retornando ao ponto
inicial.

O ponto inicial pode ser entendido como um depsito de uma indstria ou


transportadora e, os outros pontos da rede como sendo os clientes ( pontos de entrega
ou coleta). Assim, um caminho sai do depsito com mercadorias que devem ser
entregues aos clientes a partir de um itinerrio programado que compreende a
seqncia de clientes/entregas a serem feitas e retorna ao depsito inicial.

Existem diferentes mtodos de roteirizao que compreendem heursticas para se


chegar a uma soluo prxima da tima, um destas heursticas conhecida como o
problema do caixeiro viajante.

7.1 Problema do Caixeiro Viajante

Um itinerrio timo aquele que minimiza a distncia ou o tempo total percorrido.


Para se obter este itinerrio/ roteiro utiliza-se um algoritmo conhecido como Problema
do Caixeiro Viajante. Trata-se de uma heurstica de resoluo do problema que
compreende a construo de uma tour atravs da insero de pontos a cada iterao.

Passos do Algoritmo:

Passo 0 - Selecione um vrtice i qualquer da rede e identifique o vrtice j mais


prximo a este e forme uma subtour: i - j i.

Passo 1 - A cada iterao encontre um vrtice k que no esteja na subtour e que


est mais prximo a qualquer vrtice da subtour. Se houver mais de uma
possibilidade de insero deste vrtice k na subtour v para o passo 2.

Passo 2 Identifique o arco (i,j) na subtourque minimiza a relao : d(i,k) + d(k,j)


d(i,j). Insira este vrtice k entre i e j _ ou seja , substituindo o arco (i,j)
pelos arcos ( i,k) e ( k,j), e volte ao Passo 1. Repita este processo at que
todos os vrtices ( clientes) faam parte da tour.

27
Observe que no passo 2 ( iterativo) a insero do n cada se faz removendo o arco (i,j)
de forma a minimizar o total de acrscimo com a incluso de (i,k) e (k,j) na tour.

Bibliografia:
BOAVENTURA NETTO, P. O. (1996) Grafos: Teoria, Modelos, Algoritmos ,
Editora Edgar Blucher Ltda, So Paulo.
BAZARAA M.S., JARVIS J.J., SHERALI H. D., 1990, Linear Programming and
Network Flows, 2nd. Ed., John Wiley & Sons.
EDMONDS,J. E KARP, R.M., 1972, Theoretical Improvements in Algorithmic
Efficiency for Network Flow Problems, J.ACM 19 ,pp248-264.
KENNINGTON J. L., HELGASON R.V., 1988, Algorithms for Network
Programming, John Wiley & Sons.
MINIEKA E.(1990)Optimization Algorithms for Networks and Graphs, Ed. Marcel
Dekker Inc. 1st and 2nd ed.
NEWELL G.F., 1980, Traffic Flow On Transportation Network, MIT Press.
POTTS R.B. , OLIVER R.M., 1972, Flows in Transportation Networks, Academic
Press , New York.
SHEFFI Y., 1985, Urban Transportation Network : Equilibrium Analysis with
Mathematical Programming Models, Prentice Hall Inc., Englewood Cliffs, N.J.
SHIER D. R., 1976, Interactive Methods for Determining the K- Shortest Paths in a
Network, Networks, No 6,pp 205-229.
STEENBRINK P.A., 1974, Optimization of Transport Networks, Ed. John Wiley &
Sons.
SYSLO M.M., NARSINGH D., KOWALIK J.S. 1983, Discrete Optimization
Algorithms With Pascal Programs, Prentice Hall, Inc. Englewood Cliffs..
TAAFFE E. J., GAUTHIER H.L., 1973, Geography of Transportation, Foundation of
Economic Geography Series, Prentice Hall, Inc., Englewood Cliffs, N.J.
YEN J.Y., 1971, Finding the K- shortest Loopless Paths in a network, Management
Science, vol.17, No 11, Jul.

28

Anda mungkin juga menyukai