• Nenhum resultado encontrado

4.4 MÉTODOS DE OTIMIZAÇÃO APROXIMADOS

4.4.1 Algoritmo Reactive GRASP

4.4.1.4 Fase de Busca Local

Esta segunda fase do algoritmo RGRASP objetiva por refinar a solução obtida na fase de construção, a fim de encontrar soluções melhores. Dada uma solução 𝑠𝑜𝑙, a busca por melhores soluções é feita por meio da busca por soluções vizinhas, de modo a encontrar soluções melhores que 𝑠𝑜𝑙 na sua vizinhança.

A técnica de busca local utilizada, neste trabalho, consiste em desfazer sequencial- mente as operações em 𝑠𝑜𝑙, de modo a substituir a operação desfeita por uma outra operação de menor tempo de operação e, portanto, gerar uma nova solução de menor tempo de operação do guindaste. Durante o processo de substituição, a substituição de uma operação requer ajustes nas operações subsequentes (já desfeitas), uma vez que a configuração da baia foi alterada pela substituição. Por esta razão, critérios são adotados na escolha das substituições, a fim de reduzir a quantidade de ajustes, evitar reajustes e não gerar uma solução com tempo de operação pior que 𝑠𝑜𝑙 por meio da substituição.

O pseudocódigo do procedimento de busca local é dado no Algoritmo 5. Inicialmente, uma lista de pilhas visitadas (pilhasVisitadas) é inicializada com vazio. Esta lista é utili- zada para armazenar, ao longo das iterações, as pilhas de destino associadas as operações de realocação já visitadas pelo algoritmo. O objetivo desta lista é evitar reajustes, ou seja, evitar a substituição por uma realocação cuja pilha de destino já foi previamente visitada. Tendo em mente que uma pilha visitada indica que uma realocação para esta pilha já foi examinada e esta foi identificada como a melhor realocação para esta pilha. Ademais, to- das as operações subsequentes a esta realocação também estão ajustadas para estabelecer a sequência de operações a parti dela. Desta maneira, não se substitui uma realocação por outra realocação cuja pilha de destino seja uma pilha já visitada pelo algoritmo.

Algoritmo 5: Procedimento da Fase de Busca Local do Algoritmo RGRASP Entrada: 𝑏𝑎𝑖𝑎, configuração atual da baia

Entrada: 𝑠𝑜𝑙, solução construída na fase anterior. Saída: solução igual ou melhor que (𝑠𝑜𝑙)

1: 𝑝𝑖𝑙ℎ𝑎𝑠𝑉 𝑖𝑠𝑖𝑡𝑎𝑑𝑎𝑠 ← ∅

2: para todo 𝑜𝑝𝑒𝑟𝑎𝑐𝑎𝑜 em 𝑠𝑜𝑙, em ordem inversa faça 3: Desfazer(𝑜𝑝𝑒𝑟𝑎𝑐𝑎𝑜, 𝑏𝑎𝑖𝑎)

4: se 𝑜𝑝𝑒𝑟𝑎𝑐𝑎𝑜 é uma realocação então

5: 𝑛𝑜𝑣𝑎𝑂𝑝𝑒𝑟𝑎𝑐𝑎𝑜 ← Procurar(𝑏𝑎𝑖𝑎, 𝑜𝑝𝑒𝑟𝑎𝑐𝑎𝑜, 𝑝𝑖𝑙ℎ𝑎𝑠𝑉 𝑖𝑠𝑖𝑡𝑎𝑑𝑎𝑠) 6: se 𝑛𝑜𝑣𝑎𝑂𝑝𝑒𝑟𝑎𝑐𝑎𝑜 existe então 7: Substituir&Atualizar(𝑜𝑝𝑒𝑟𝑎𝑐𝑎𝑜, 𝑛𝑜𝑣𝑎𝑂𝑝𝑒𝑟𝑎𝑐𝑎𝑜, 𝑠𝑜𝑙, 𝑏𝑎𝑖𝑎) 8: Inserir(𝑛𝑜𝑣𝑎𝑂𝑝𝑒𝑟𝑎𝑐𝑎𝑜, 𝑝𝑖𝑙ℎ𝑎𝑠𝑉 𝑖𝑠𝑖𝑡𝑎𝑑𝑎𝑠) 9: else 10: Inserir(𝑜𝑝𝑒𝑟𝑎𝑐𝑎𝑜, 𝑝𝑖𝑙ℎ𝑎𝑠𝑉 𝑖𝑠𝑖𝑡𝑎𝑑𝑎𝑠) 11: fim do se 12: fim do se 13: fim do para 14: retorne 𝑠𝑜𝑙

Todas as operações da solução são examinadas em ordem inversa, isto é, desde a última operação até à primeira operação realizada pelo guindaste para esvaziar a baia (linhas 2-13). A cada iteração, a operação examinada (𝑜𝑝𝑒𝑟𝑎𝑐𝑎𝑜) é desfeita e a configuração da baia é alterada para o estado anterior à execução da operação 𝑜𝑝𝑒𝑟𝑎𝑐𝑎𝑜 (linha 3). Neste ponto, há uma busca por uma nova operação de realocação que satisfaça os seguintes critérios (linha 5):

1. Seja diferente de 𝑜𝑝𝑒𝑟𝑎𝑐𝑎𝑜;

2. A sua pilha de destino não foi visitada, ou seja, não está em 𝑝𝑖𝑙ℎ𝑎𝑠𝑉 𝑖𝑠𝑖𝑡𝑎𝑑𝑎𝑠; 3. Não produz bloqueios, ou seja, na pilha de destino, todos os contêineres possuem

prioridade menor ao contêiner a ser realocado;

4. A sua substituição implica em uma nova solução cujo tempo de operação do guin- daste é menor que o da solução anterior à substituição.

Quando uma nova operação (𝑛𝑜𝑣𝑎𝑂𝑝𝑒𝑟𝑎𝑐𝑎𝑜) que satisfaz todas as condições acima é encontrada, a solução é atualizada com a substituição da operação corrente (𝑜𝑝𝑒𝑟𝑎𝑐𝑎𝑜) pela nova operação encontrada. A substituição altera a coordenada do contêiner movi- mentado e, assim, a próxima operação subsequente e a primeira operação subsequente que manipula o mesmo contêiner tornam-se inválidas, uma vez que o contêiner é colocado em uma nova coordenada. Desta forma, estas operações subsequentes são ajustadas às novas coordenadas e os seus tempos de operação são atualizados (linha 7). Além disso, a pilha de destino de 𝑛𝑜𝑣𝑎𝑂𝑝𝑒𝑟𝑎𝑐𝑎𝑜 é marcada como visitada (linha 8). Se uma nova operação não é encontrada, a operação corrente (𝑜𝑝𝑒𝑟𝑎𝑐𝑎𝑜) também terá sua pilha de destino marcada como visitada (linha 10). Isto significa que esta operação é a melhor até agora e não pode mais ser ajustada em substituições futuras. Finalmente, após todas as operações terem sido examinadas, o procedimento retorna a melhor solução encontrada durante a busca local (linha 14).

Visando também uma melhor compreensão do funcionamento deste procedimento, a Figura 18 exibe uma ilustração do procedimento da fase de busca local. Nesta ilustração, o procedimento recebe como entrada a solução que foi construída pela fase de construção no exemplo ilustrado na Figura 17. Inicialmente, as operações presentes na solução são desfeitas, da última operação à primeira operação, até que uma operação de realocação seja desfeita. Então, a realocação do contêiner 5 é alcançada, i.e., 𝑅𝐿(5, 3, 1). Neste ponto, uma nova operação de realocação é encontrada, i.e., 𝑅𝐿(5, 3, 2). Esta nova realocação satisfaz todas as condições, incluindo a redução do tempo de operação, pois esta nova realocação tem tempo de operação igual a 19,5 enquanto a realocação atual tem o tempo de operação igual a 22,5. Assim, a realocação 𝑅𝐿(5, 3, 1) é substituída pela realocação 𝑅𝐿(5, 3, 2), a segunda pilha é marcada como visitada e os operações subsequentes (𝑅𝑇 (4, 3, 4) e

𝑅𝑇 (5, 1, 4)) são ajustadas. Neste momento, o tempo de operação do guindaste na solução mudou de 73 para 70.

Posteriormente, as operações continuam sendo desfeitas até que uma operação de realo- cação seja desfeita, i.e., a realocação 𝑅𝐿(3, 1, 2) é alcançada. No entanto, novas operações não são encontradas para substituir 𝑅𝐿(3, 1, 2), já que a terceira pilha está na altura má- xima. Desta forma, a primeira pilha é marcada como visitada e as operações continuam sendo desfeitas até que a realocação 𝑅𝐿(5, 2, 3) seja atingida. Também, neste ponto, não são encontradas operações para substituição, já que a primeira pilha e a segunda pilha estão marcadas como visitadas. Em seguida, a terceira pilha é marcada como visitada e a última realocação 𝑅𝐿(4, 2, 3) é desfeita. Novamente, não foram encontradas operações, então 𝑅𝐿(4, 2, 3) não foi substituída, visto que todas as pilhas já foram visitadas. No final, todas as operações foram desfeitas e examinadas e a solução melhorada por esse procedimento é retornada.

Figura 18 – Demonstração da Fase de Busca Local.

Vale ressaltar que os dois procedimentos do algoritmo RGRASP proposto, fase de construção e fase de busca local, consideram apenas operações de realocação restritas, ou seja, o algoritmo RGRASP aborda apenas o PRC restrito. A razão disso está no fato que o algoritmo RGRASP adota, para a construção das soluções, os índices de decisão definidos na Seção 2.3, e estes foram projetados para o PRC restrito. Portanto, como o algoritmo RGRASP proposto aborda apenas o PRC restrito, na próxima seção, são apresentados algoritmos de otimização que solucionam o PRC restrito e também o PRC irrestrito.

Documentos relacionados