De acordo com Vander Wiel e Sahinidis [WS95], existe um n´umero limitado de heur´ısticas para o PCVDT. Em sua abordagem exata para o PML, Lucena [Luc90] apresenta uma adapta¸c˜ao de uma heur´ıstica de troca usada no PCV. Ele gera limites superiores justos para instˆancias aleat´orias de at´e 30 v´ertices. Em 1993, Bianco, Mingozzi e Ricciardelli [BMR93] usaram o algoritmo do Vizinho Mais Pr´oximo [JM97] para gerar uma solu¸c˜ao inicial que depois foi melhorada utilizando-se uma heur´ıstica de trocas. Para instˆancias de at´e 35 v´ertices a heur´ıstica apresentou solu¸c˜oes a 6% do ´otimo e nenhuma solu¸c˜ao ´otima foi encontrada com essa t´ecnica. Os mesmos autores apresentaram uma heur´ıstica baseada em programa¸c˜ao dinˆamica que ofereceu resultados melhores. Bianco, Mingozzi e Ricciardelli [BMR93] mostraram solu¸c˜oes, em m´edia, a 4.2% do ´otimo para instˆancias de at´e 60 v´ertices. Essas instˆancias usaram distˆancia Euclidiana. Para instˆancias geradas somente a partir de n´umeros aleat´orios entre [1,100], os mesmos autores conseguiram resultados melhores, chegando a valores de, em m´edia, 2.7% do ´otimo. Em 1995, Fischetti, Laporte e Martello [FLM93] apresentaram uma heur´ıstica de trocas que gerou solu¸c˜oes a 14% do ´otimo. Nesta se¸c˜ao ´e apresentada uma heur´ıstica para o PML. O objetivo de conseguir limites superiores perto do ´otimo n˜ao se limita somente a encontrar uma solu¸c˜ao justa em um tempo razo´avel. O intuito de se desenvolver uma heur´ıstica para o PML tamb´em est´a relacionado a facilitar o resolvedor CPLEX a encontrar a solu¸c˜ao ´otima. Isso pode ser conseguido utilizando a solu¸c˜ao gerada pela meta-heur´ıstica como primeiro limite superior para o resolvedor. Esse limite superior, se for melhor que o primeiro limite superior encontrado pelo resolvedor, aumentar´a a eficiˆencia do algoritmo Branch-and-Bound presente no CPLEX.
O m´etodo GRASP, do inglˆes, Greedy Randomized Adaptive Search Procedure, em por- tuguˆes (procedimento de busca guloso, adaptativo e aleat´orio) [FR95] [RR03] [Rav07] [dSDR03], foi o escolhido para encontrar solu¸c˜oes vi´aveis para o PML.
Essa meta-heur´ıstica ´e dividida em duas fases: a constru¸c˜ao de uma solu¸c˜ao vi´avel e um subseq¨uente procedimento de Busca Local. Essas duas fases s˜ao repetidas a cada itera¸c˜ao. Na Fase de Constru¸c˜ao, uma fun¸c˜ao gulosa e aleat´oria ´e usada para construir uma solu¸c˜ao inicial. Essa solu¸c˜ao ´e ent˜ao utilizada como solu¸c˜ao inicial para a Fase de Busca Local. O algoritmo GRASP proposto tamb´em tem uma terceira fase chamada de
Path Relinking [Glo96] [LM99]. Essa fase ´e usada para tentar melhorar a solu¸c˜ao dada pela
Busca Local. O resultado final ´e simplesmente a melhor solu¸c˜ao encontrada ap´os todas as itera¸c˜oes. Algoritmo 2.2: GRASP Data: M ax Iteracoes for i ← 1 to M ax Iteracoes do Fase Constru¸c˜ao(); Busca Local();
if Solu¸c˜ao Encontrada for Melhor() then
Atualize Melhor Solu¸c˜ao(); Busca Local();
else
Path Relinking(Solu¸c˜ao Busca Local, Melhor Solu¸c˜ao); end
if Solu¸c˜ao Encontrada for Melhor() then
Atualize Melhor Solu¸c˜ao(); Busca Local();
end end
Na Fase de Constru¸c˜ao, uma t´ecnica gulosa e aleat´oria gera solu¸c˜oes vi´aveis. Cada solu¸c˜ao vi´avel ´e iterativamente constru´ıda, um elemento por vez. Foi escolhido o algoritmo do vizinho mais pr´oximo [JM97] como o algoritmo da Fase de Constru¸c˜ao. Entretanto, ao inv´es de se escolher sempre o melhor elemento, isto ´e, o vizinho mais pr´oximo, ´e criada uma lista restrita de candidatos (LRC), isto ´e, uma lista de bons elementos. Aleatoriamente, um desses elementos ´e escolhido a cada passo e n˜ao necessariamente o melhor elemento. Um parˆametro da LRC, α, determina o quanto o algoritmo ´e guloso ou aleat´orio. Quando α = 0, tem-se uma solu¸c˜ao totalmente gulosa. Por outro lado, quando α = 1, tem-se uma solu¸c˜ao totalmente aleat´oria. Outra caracter´ıstica interessante ´e que, ao inv´es de se trabalhar com um α fixo em cada itera¸c˜ao, trabalhou-se com um α vari´avel dentro da mesma itera¸c˜ao. A cada passo da Fase de Constru¸c˜ao, isto ´e, a cada novo v´ertice inserido na solu¸c˜ao, o parˆametro α aumenta proporcionalmente de um αinicial at´e um αf inal. Essa
estrat´egia foi escolhida pois os primeiros v´ertices do caminho tˆem mais influˆencia que os ´
ultimos, no c´alculo do custo do PML. Nesse problema, o custo de cada arco ´e multiplicado pelo n´umero de arcos que faltam para completar o circuito Hamiltoniano. O algoritmo (2.3) apresenta o esquema que define a Fase de Constru¸c˜ao proposta.
Algoritmo 2.3: Fase de Constru¸c˜ao Data: α, αinicial, αf inal, N, Origem
α = αinicial;
Solu¸c˜ao Inicial = {Origem}; V´ertice = Origem;
for i ← 2 to N do
Construa LRC(V´ertice,α);
V´ertice = Aleatoriamente Escolha Pr´oximo V´ertice da Lista LRC(); Solu¸c˜ao Inicial = Solu¸c˜ao Inicial ∪ {V´ertice};
α = α + (αf inal− αinicial)/N ;
end
padr˜oes. Ao inv´es de se trabalhar com somente um algoritmo de Busca Local foi pro- posto o uso de 4 algoritmos simples que s˜ao encadeados. Ap´os serem executadas as quatro buscas locais ´e verificado se em pelo menos alguma delas foi encontrada uma solu¸c˜ao me- lhor. Se isso for verdade o procedimento de busca local ´e chamado novamente, mas agora a solu¸c˜ao que ser´a explorada ´e a melhor solu¸c˜ao encontrada pela busca local na itera¸c˜ao anterior.
Primeiramente, ´e utilizado um algoritmo de troca de posi¸c˜oes de v´ertices. Esse algo- ritmo troca a posi¸c˜ao de todos os v´ertices, dois a dois. Um exemplo de uma simples troca entre dois elementos ´e mostrado na Figura (2.6). O segundo m´etodo ´e um algoritmo de inser¸c˜ao. Dada uma solu¸c˜ao parcial oriunda da Fase de Constru¸c˜ao, esse m´etodo de Busca Local funciona da seguinte forma: para cada elemento, salvo a origem, ele ´e inserido em todas as posi¸c˜oes anteriores poss´ıveis. Um exemplo de uma inser¸c˜ao simples ´e mostrado na Figura (2.7), onde o v´ertice 6 ´e colocado na segunda posi¸c˜ao. O terceiro algoritmo ´e um tipo de algoritmo de troca de posi¸c˜oes, mas ao inv´es de mudar-se todas as combina¸c˜oes de dois v´ertices, como na primeira Busca Local, s˜ao mudadas todas as combina¸c˜oes de dois v´ertices consecutivos. Um exemplo ´e mostrado na Figura (2.8). O ´ultimo m´etodo de Busca Local ´e como o terceiro, mas nesse caso ´e mudado todas as combina¸c˜oes de trˆes v´ertices consecutivos. Um exemplo ´e mostrado na Figura (2.9). Para as Figuras (2.6), (2.7), (2.8) e (2.9), a origem ´e sempre o v´ertice 1 e a ordem de visita¸c˜ao ´e dada pelo sentido hor´ario a partir da origem.
Depois da Fase de Busca Local, ´e feita a seguinte an´alise: se em qualquer uma das quatro buscas Locais ´e encontrada uma solu¸c˜ao melhor que a solu¸c˜ao da presente na busca local anterior, essa nova solu¸c˜ao ´e armazenada e as quatro buscas locais s˜ao executadas mais uma vez; caso contr´ario, ´e chamada a fase de Path Relinking (PR). Path Relinking foi
Algoritmo 2.4: Busca Local Data: it
Procedimento Troca Dois V´ertices(); Procedimento Inser¸c˜ao();
Procedimento Troca Dois V´ertices Consecutivos(); Procedimento Troca Trˆes V´ertices Consecutivos();
(a) Antes (b) Depois
1 2 3 4 5 6 7 8 9 10 1 3 4 5 7 8 9 10 6 2
Figura 2.6: Busca Local Troca 2 V´ertices.
(a) Antes (b) Depois
1 2 3 4 5 6 7 8 9 10 1 7 8 9 10 6 2 3 4 5
Figura 2.7: Busca Local de Inser¸c˜ao
(a) Antes (b) Depois
1 2 3 4 5 6 7 8 9 10 1 7 10 6 4 5 8 3 4 9
Figura 2.8: Busca Local Troca Conjunto de 2 V´ertices.
(a) Antes (b) Depois
1 2 3 4 5 6 7 8 9 10 1 9 10 6 3 4 5 6 7 8
Figura 2.9: Busca Local Troca Conjunto de 3 V´ertices.
proposto originalmente por Glover [Glo96] como uma estrat´egia de conectar boas solu¸c˜oes por Busca Tabu e Scatter Search. Existem muitas formas de implementar essa t´ecnica. Para mais detalhes, vide [RR05]. Path Relinking com GRASP como uma estrat´egia aplicada em cada Fase de Busca Local foi primeiramente usado por Laguna e Mart´ı [LM99]. Neste trabalho, PR funciona da seguinte forma: s˜ao consideradas todas as solu¸c˜oes intermedi´arias entre a melhor solu¸c˜ao e a solu¸c˜ao corrente. Esse caminho, path, ´e constru´ıdo trocando-se posi¸c˜oes entre dois v´ertices. Se uma solu¸c˜ao melhor ´e encontrada, chama-se novamente a Fase de Busca Local, passando como parˆametro a nova solu¸c˜ao.