Você está na página 1de 29

INSTITUTO MILITAR DE ENGENHARIA PS-GRADUAO EM ENGENHARIA DE TRANSPORTES

Algoritmos para Resoluo de Problemas em Redes

Prof. Vnia Barcellos G. Campos

ndice
1- Definio e Conceitos Bsicos sobre Grafos 1.1 Conceitos Bsicos 1.2 Caractersticas Estruturais 2- Conceituao de Redes 3- Minimizao de Redes 3.1 Algoritmo de Kruskal 3.2 Algoritmo de Prim 4- Algoritmos de Caminho Mnimo 4.1 Algoritmo de Dijkstra 4.2 Algoritmo de Ford, Bellman e Moore 4.3 Caminho mais Confivel 4.4 Algoritmo de Floyd 4.5 Algoritmo de Dantzig 4.6Algoritmo de K-caminhos mnimos 4.7Desempenho dos Algoritmos 5- Algoritmos de Fluxo Mximo 5.1 Conceitos Bsicos 5.2 Algoritmo de Aumento de Fluxo 5.3 Algoritmo de Ford /Fulkerson 5.4 Algoritmo de Dinic 5.5 Algoritmo DMKM 5.6 Modificaes na Estrutura da Rede 5.7 Anlise dos Algoritmos 6- Algoritmos de Custo Mnimo 6.1 Algoritmo Busacker e Gowen 6.2 Anlise dos Algoritmos de custo Mnimo 7 - Roteirizao Bibliografia Lista de Exerccios

pag 1 1 2 2 4 4 6 6 7 9 11 12 13 13 14 15 15 17 19 20 21 22 23 24 24 26 27 28 29

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.

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} R = {X,A,} (grafo) ( rede)

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

Exemplos de Rede: Ns ou Vrtices intersees aeroportos estaes de bombeamento Arcos rodovias linhas areas dutos Fluxo veculos avies 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. Desejase 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).

2
2

6
6 3

3
1 3

5
5

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:

2
2

6
3

3
1

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.

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).

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 modificaes devem ser feitas neste algoritmo: as seguintes

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 1 P1t

Ps2
2

P2t

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 =

( i , j ) C '

ij

Fazendo-se: 11

log P = log

( i , j ) C '

P = log P
ij

(i , j ) C '

i, j

Assim, max P = - min = min

log P
(i , j ) C '

i, j

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 , fazse: 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 } dkik = min { dk-1ij + d0jk } dkij = min { dkik + dkkj , dk-1ij } para: i= 1,2..k-1 e j = 1,2..k-1 (3) para: i= 1,2..k-1 e j = 1,2..k-1 (4) 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: DoubleSweep, 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 corte na direo st. O valor de um corte representa um limite superior para o 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 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

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: se um arco a(x,y)I, ento construa este arco na rede residual rotulando-o com a 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
f=2

1
f=2

2
f=2

f=2

Em funo do fluxo corrente a rede residual correspondente :


C=2 C=1 C=3

f=2

s
r=2

1
r=2

2
r=2

f=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 st, definindo-se um fluxo de saturao Fr ( r= iterao). Volte ao passo 1. 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 criandose um destino nico , como na figura abaixo: S1 T1 T 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

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. 2. 3. 4. acrescente a rede dois ns (u e v); acrescente um arco de t para s tendo capacidade infinita; seja a(i,j) um arco com limite inferior diferente de zero, lij; 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