• Nenhum resultado encontrado

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.