• Nenhum resultado encontrado

Obten¸c˜ ao do percurso de custo m´ınimo da lista de predecessores

3.2 Algoritmos

4.2.7 Obten¸c˜ ao do percurso de custo m´ınimo da lista de predecessores

Partindo de uma lista que cont´em os n´os predecessores relativos aos percursos de custo m´ınimo da origem para todos os n´os e conhecendo o n´o destino, obt´em-se o percurso entre o par origem/destino da forma descrita no algoritmo 4.2.8. Considere-se, inicialmente, o n´o actual a como sendo o n´o destino d. Seguindo a cadeia de predecessores, enquanto existir um predecessor do n´o a no caminho para o n´o origem, o algoritmo vai comparar o par n˜ao ordenado de n´os actual e predecessor do n´o actual {a, pa} com o par n˜ao ordenado de n´os extremos de cada uma das liga¸c˜oes l {il, jl}. Quando os pares coincidirem, pode afirmar-se que essa liga¸c˜ao faz parte do percurso origem/destino e o n´o actual passa a ser o seu n´o predecessor. PCM representa o percurso de custo m´ınimo a ser determinado.

Algoritmo 4.2.8Obten¸c˜ao de um percurso partindo de uma lista de n´os predecessores l ← 1 a ← d PCM ← {} while∃pa do if {a, pa} = {il, jl} then PCM ← PCM ∪l a ← pa end if l ← l + 1 if l > |L| then l ← 1 end if end while

Cap´ıtulo 5

Optimiza¸c˜ao de novos t´uneis

5.1

Introdu¸c˜ao

A fun¸c˜ao para configura¸c˜ao de novos t´uneis de forma optimizada baseia-se na fun¸c˜ao de optimiza¸c˜ao dos percursos j´a existentes, apresentada no cap´ıtulo anterior. Esta fun¸c˜ao necessita que lhe sejam fornecidos um conjunto de t´uneis novos Υ e admite a existˆencia de um conjunto de t´uneis j´a configurados T . Se n˜ao forem fornecidos pedidos de t´uneis novos e s´o existirem t´uneis j´a configurados, o programa n˜ao devolve qualquer resultado.

Defina-se, de forma similar ao conjunto Tp, o conjunto Υp ⊂ Υ, no qual os t´uneis τ ∈ Υ tˆem protec¸c˜ao, VALORt = 1. Primeiro, s˜ao calculadas as cargas das liga¸c˜oes, considerando apenas os t´uneis configurados. De seguida, s˜ao calculados, por uma ordem aleat´oria, um percurso de servi¸co para os t´uneis novos τ ∈ Υ \ Υp ou dois percursos, um de servi¸co e um de protec¸c˜ao, para cada um dos novos t´uneis τ ∈ Υp. S˜ao calculadas as cargas nesta configura¸c˜ao, que passa a constituir a solu¸c˜ao incumbente. De seguida, ´e utilizado o algoritmo de pesquisa local em que s˜ao alterados os percursos de cada t´unel. Neste caso, a solu¸c˜ao ´e considerada vizinha da actual se diferir desta apenas num t´unel, seja num ou nos dois percursos, para os t´uneis τ ∈ Υp ou no percurso de servi¸co para os restantes. Durante o tempo definido pelo utilizador, ´e realizada a pesquisa local com m´ultiplas situa¸c˜oes iniciais at´e ser devolvida a melhor solu¸c˜ao encontrada.

O c´alculo de dois novos percursos para um t´unel pode ser efectuado de diferentes formas. Uma primeira vers˜ao ´e baseada na aplica¸c˜ao do algoritmo de Dijkstra, duas vezes consecutivas.

Algoritmo 5.1.1Calcular 2 percursos aplicando o algoritmo de Dijkstra

1: Calcular custos das liga¸c˜oes, algoritmo 4.2.6 2: Dijsktra, algoritmo 4.2.5

3: Calcular custos das liga¸c˜oes incluindo o primeiro percurso, algoritmo 4.2.7 4: Dijkstra, algoritmo 4.2.5

´

E necess´ario recalcular os custos das liga¸c˜oes ap´os a obten¸c˜ao do primeiro percurso, caso contr´ario, na segunda utiliza¸c˜ao do Dijkstra ´e obtido o mesmo percurso. Esta op¸c˜ao devolve dois percursos mas, ainda que seja poss´ıvel obter percursos completamente disjuntos ou dis- juntos apenas nas liga¸c˜oes, n˜ao ´e garantido que os percursos escolhidos sejam disjuntos nem que sejam o par de percursos de custo m´ınimo. Considere-se a figura 5.1 que apresenta uma

rede em que se pretende determinar dois percursos disjuntos, de custo m´ınimo, do n´o 1 para o n´o 6. Os custos das liga¸c˜oes aparecem assinalados ao lado de cada liga¸c˜ao. O primeiro percurso de custo m´ınimo j´a se encontra assinalado pelas linhas mais grossas.

1

2

3

4

5

6

2 1 1 1 1 1 2

Figura 5.1: Exemplo em que a execu¸c˜ao duas vezes consecutivas do algoritmo de Dijkstra n˜ao resulta num par de percursos disjuntos

Executando duas vezes o algoritmo de Dijkstra n˜ao se obtˆem dois percursos disjuntos, embora a rede os suporte. A primeira execu¸c˜ao calcula o percurso de custo m´ınimo igual a 3 que percorre o conjunto de n´os {1, 3, 4, 6}. Para o segundo percurso ´e imposs´ıvel n˜ao incluir uma liga¸c˜ao do primeiro percurso. Isto n˜ao ´e ´optimo, uma vez que se procura protec¸c˜ao m´axima, o que implica a m´axima disjuntividade poss´ıvel.

Considere-se a figura 5.2 que apresenta uma rede em que se pretende determinar dois percursos disjuntos, de custo m´ınimo, do n´o 1 para o n´o 6. Os custos das liga¸c˜oes aparecem assinalados ao lado de cada liga¸c˜ao. O primeiro percurso de custo m´ınimo j´a se encontra assinalado pelas linhas mais grossas. Para a determina¸c˜ao do segundo percurso, consideram- se as altera¸c˜oes de custos para as liga¸c˜oes que fazem parte do primeiro percurso e para as liga¸c˜oes adjacentes ao percurso, definidas no cap´ıtulo 4. Executando duas vezes o algoritmo

1

2

3

4

5

6

2 1 1 1 1 1 2 5 4

Figura 5.2: Exemplo em que a execu¸c˜ao duas vezes consecutivas do algoritmo de Dijkstra n˜ao resulta num par de percursos de custo m´ınimo

de Dijkstra n˜ao se obt´em um par de percursos de custo m´ınimo. A primeira execu¸c˜ao calcula o percurso de custo m´ınimo igual a 3 que percorre o conjunto de n´os {1, 3, 4, 6}. A segunda execu¸c˜ao calcula o percurso de custo m´ınimo igual a 6 que percorre o conjunto de n´os {1, 2, 6}.

O custo total ´e de 9. O par de percursos de custo m´ınimo seria constitu´ıdo pelos percursos que percorrem os n´os {1, 2, 4, 6} e os n´os {1, 3, 5, 6}. Ambos tˆem custo 4, sendo o total de 8, que ´e menor que 9. N˜ao se obtendo o par de percursos de custo m´ınimo, o objectivo de minimiza¸c˜ao das piores cargas n˜ao ´e atingido.

Assim, a segunda vers˜ao baseia-se no algoritmo de Suurballe [16, 17] para percursos dis- juntos nas liga¸c˜oes. Esta vers˜ao serviu como ponto de partida para a terceira, que utiliza um algoritmo mais complexo, o de Suurballe para percursos disjuntos nos n´os. Na sec¸c˜ao seguinte apresentam-se as duas vers˜oes do algoritmo de Suurballe.

5.2

Algoritmos

Documentos relacionados