3.2 Heurísticas de Busca Local
3.2.1 Heurística Unstringing/Stringing
A heurística Unstringing/Stringing (US) descrita em (GENDREAU; HERTZ; LAPORTE, 1992)
foi aplicada para o Problema do Caixeiro Viajante numa fase de pós-otimização da heu- rística GENI e consiste na remoção de um vértice de um ciclo viável e inserção deste vértice novamente. A US pode ser aplicada não somente ao procedimento GENI, mas a qualquer um que gere um ciclo completo viável. A US é composta de dois procedimen- tos: Stringing que é idêntico aos passos 4 e 5 do Algoritmo 7 (GENI) e Unstringing que consiste na remoção de um vértice, conforme ilustram as Figuras 3.3 e 3.4. A remoção dos vértices realizada pela Unstringing considera também as duas orientações no sentido horário e anti-horário. Para a reinserção de um vértice v considera-se a vizinhança de todos os vértices, exceto o próprio, na fase de reconstrução. Mesmo que o ciclo anterior fosse construído pelo método Stringing, os vértices disponíveis na vizinhança da fase de construção em que este vértice v foi considerado provavelmente seriam diferentes.
Na Remoção do Tipo I do procedimento Unstringing considera vj ∈ Vp(vi+1), vk ∈
Vp(vi−1)e vk no caminho (vi+1, ... , vj−1). Os arcos (vi−1, vi), (vi, vi+1) , (vk, vk+1) e (vj,
vj+1) serão excluídos e os arcos (vi−1, vk), (vi+1, vj) e (vk+1, vj+1) serão conectados. Os
caminhos (vi+1, ... , vk) e (vk+1, ... , vj) são reversos. A Remoção do Tipo I é ilustrada
nas Figuras 3.3(a) e 3.3(b), onde mostra-se o ciclo antes da remoção do vértice vi e a nova
formação do ciclo, desconsiderando-se este vértice vi.
(a) Ciclo com o vértice vi. (b) Ciclo depois da remoção do vértice vi. Figura 3.3: Remoção do Tipo I da Unstringing.
A Remoção do Tipo II considera vj ∈ Vp(vi+1), vk ∈ Vp(vi−1) e vl ∈ Vp(vk+1). O
3.2 Heurísticas de Busca Local 48 remoção, excluem-se os arcos (vi−1, vi), (vi, vi+1) , (vj−1, vj), (vl, vl+1) e (vk, vk+1) e os
arcos (vi−1, vk), (vl+1, vj−1), (vi+1, vj) e (vl, vk+1) são inseridos. Os caminhos (vi+1, ...
, vj−1) e (vl+1, ... , vk) são reversos. As Figuras 3.4(a) e 3.4(b) ilustram a Remoção do
Tipo II da Unstringing com vértice vi no ciclo e depois de sua remoção, respectivamente.
(a) Ciclo com o vértice vi. (b) Ciclo depois da remoção do vértice vi. Figura 3.4: Remoção do Tipo II da Unstringing.
O procedimento da Unstringing/Stringing é descrito no Algoritmo 10, com Tmin o
melhor ciclo de custo cmina ser retornado pelo algoritmo e n o total de vértices. Considerar
um ciclo viável, Tatual com custo catual e vio vértice i a ser retirado, como dados de entrada
do Algoritmo 10. No início um ciclo viável, com seu custo, é considerado o melhor até o momento, passos 1 a 2. Em seguida é retirado o vértice v1 do ciclo usando-se as
duas formas de remoção da Unstringing e é inserido considerando-se as duas formas de inserção da Stringing. Em ambas as formas de remoção e inserção são consideradas as duas orientações (horário e anti-horário), passo 5. Se o custo for melhor, o processo de US é mantido sobre o vértice v1, passos 8 a 12. Caso contrário o procedimento US é aplicado
no vértice v2, passos 13 a 15 e o procedimento US se repete no passo 5 até que todos
os vértices sejam analisados. No nal o Algoritmo 10 retorna o ciclo Tmin e seu custo
cmin, passo 17. Observa-se que caso não haja melhoria no custo do ciclo mínimo Tmin,
o procedimento US continua a atuar sobre a solução do ciclo Tnov gerada e considerada
a atual solução Tatual. Isto signica que se a melhor solução gerada, representada no
ciclo Tnov, por esta vizinhança não for a melhor de todas as soluções, esta não poderá ser
descartada. É possível realizar novas buscas em outras vizinhanças sobre o ciclo Tnov.
Muitos métodos como Simulated Annealing, Busca Tabu e Iterated Local Search ado- tam esta estratégia de aceitar a solução corrente gerada para a próxima iteração mesmo
Algoritmo 10: Fase Unstringing/Stringing do GENI
1: Tmin=Tatual;
2: cmin=catual;
3: i=1;
4: enquanto i ≤ n faça
5: Inicializar o procedimento US com o vértice vi no ciclo Tatual, considerando as
duas formas de remoção e inserçãodos vértices. Em cada caso considerar duas orientações. Seja Tnov o novo ciclo obtido com custo cnov;
6: Tatual=Tnov;
7: catual=cnov;
8: se Tatual < Tmin então
9: Tmin=Tatual;
10: cmin=catual;
11: i=1;
12: m se
13: se Tatual ≥ Tmin então
14: i=i+1;
15: m se 16: m enquanto
17: Retornar o ciclo Tmin com custo cmin;
que a solução corrente não atualize a melhor solução encontrada pelo método até a etapa presente.
A GENI e a US constroem soluções a cada etapa com renamento local. O critério de seleção do valor do tamanho da vizinhança p da GENI e da US está relacionado ao compromisso entre qualidade da solução e tempo computacional. Caso o tempo compu- tacional seja importante, uma solução produzida pela GENI com vizinhança pG é mais
vantajosa do que a solução da US com vizinhança pU S, sendo pG > pU S. Em Gendreau,
Hertz e Laporte (1992), a GENI com pG igual a sete produz melhor resultado do que
a US com pU S igual a dois e três para uma instância com 500 vértices. Além disso, o
resultado da solução da US com pUS igual a sete para esta instância difere somente em
1% da solução produzida pela GENI com pG=pU S. O tempo computacional médio da US
neste caso foi aproximadamente 4.5 maior que o tempo da GENI. Resultados semelhantes foram observados com as instâncias com 100, 200, 300 e 400 vértices. Para a instância P532, ver (GENDREAU; HERTZ; LAPORTE, 1992), o valor da solução produzida pela Uns-
tringing/Stringing cou 1,2% acima do valor da solução da Busca Tabu de (FIECHTER,
1994).
Observa-se que nos passos de 8 a 12 do Algoritmo 10 se houver melhoria no custo do ciclo atual, catual, em relação ao custo mínimo, cmin, o algoritmo prossegue com o ciclo
3.2 Heurísticas de Busca Local 50 atual, Tatual, e reinicia a partir do vértice v1, o primeiro vértice deste ciclo. Isto para
instância com grande número de vértices levaria o algoritmo a ter um custo computa- cional muito alto. Pode-se modicar este algoritmo fazendo o custo da melhor solução ser atualizado, mas o vértice a ser escolhido na próxima etapa ser incrementado (PAULA,
2001). Sendo assim, os passos de 8 a 12 passam a ser:
Tmin = Tatual
cmin = catual
i = i + 1
(3.1)
Esta modicação na heurística será denotada por (USM), acrônimo de US/Modied. O Algoritmo 10 reescrito é mostrado no Algoritmo 11 que foi melhorado proporcionando menor esforço computacional. Observa-se no Algoritmo 11, nos passos 8 a 11, que mesmo a solução encontrada sendo melhor, o próximo vértice será analisado.
Algoritmo 11: Algoritmo USM
1: Tmin=Tatual;
2: cmin=catual;
3: k = 1;
4: enquanto k ≤ n faça
5: Aplica-se os procedimentos Unstringing e Stringing sobre o ciclo Tatual, com o
vértice vk, considerando em cada caso os dois tipos de operações e dois tipos
de orientações (horário e anti-horário):
6: Seja, Titer o ciclo obtido com o custo citer;
7: Tatual=Titer e catual=citer;
8: se catual < cmin então
9: Tmin=Tatual, cmin=catual;
10: m se
11: k=k+1;
12: m enquanto
13: O melhor ciclo é Tmin com seu custo igual a cmin.