4. MÉTODOS DE SOLUÇÃO PROPOSTOS
4.3. RESOLUÇÃO DO PROBLEMA INTEGRADO
A ideia principal do algoritmo proposto para resolver o problema integrado é gerar inicialmente uma solução inicial para o 3L-CVRP usando o algoritmo de Clarke & Wright, verificando, a cada nova união de roteiros, a factibilidade do padrão de carregamento utilizando o algoritmo de George & Robinson adaptado.
Para tal, foi utilizado como base o trabalho de Bortfeldt (2012) que faz a verificação do carregamento somente nos melhores resultados da Busca Local, a fim de otimizar o tempo computacional. Foi também utilizada a estratégia ii) do trabalho de Junqueira e Morabito (2015), de gerar o padrão de carregamento durante o roteamento.
Para isso será adotada a estratégia routing first, packing second, que é amplamente utilizada na literatura para tratar o 3L-CVRP. Basicamente, ela consiste em primeiro determinar o roteamento e a sequência de clientes e, em seguida, verificar a factibilidade do padrão de carregamento para cada um dos roteiros gerados.
Os algoritmos de Clarke & Wright e George & Robinson foram escolhidos para gerar a solução inicial do problema de roteamento e do problema de carregamento, respectivamente, por se tratarem de heurísticas já consolidadas na liteartura, mostrando que as mesmas apresentam bons resultados com tempo computacional hábil.
O Algoritmo ILS foi escolhido por ser uma meta-heurística fácil de ser implementada e com bons resultados para problemas de otimização combinatória de maneira geral.
O ALNS foi escolhido pois verificou-se que não existem implementações para o 3D- CLP utilizando essa meta-heurística.
Após gerada a solução inicial, aplica-se a meta-heurística ILS (Seção 4.1.1) para tentar melhorar a solução inicial explorando a vizinhança desta solução. Novamente, para a verificação da factibilidade do carregamento, utiliza-se o algoritmo de George & Robinson adaptado (Seção 4.2.1) e, nas situações em que não for factível a solução obtida pelo algoritmo de George & Robinson adaptado, aplica-se a meta-heurística ALNS (Seção 4.2.2).
Em uma tentativa de melhorar o tempo computacional para resolução de cada instância, foi adotada a estratégia de, ao gerar a solução inicial, somente verificar a factibilidade do carregamento no momento em que a demanda dos clientes ultrapassar a metade do volume total do veículo. Dessa maneira, a verificação da factibilidade do carregamento para a solução inicial é feita menos vezes, e há, então, um ganho no tempo computacional.
O Algoritmo 5 gera uma solução inicial para o 3L-CVRP. Nesse algoritmo, adaptou-se o algoritmo de C&W para que seja feita uma verificação de factibilidade do problema de carregamento utilizando o algoritmo de G&R adaptado para cada novo cliente inserido no roteiro. Caso esta inserção seja factível, os roteiros são unidos. Após obtida a solução inicial do 3L-CVRP gerada pelo Algoritmo 5, aplica-se a meta-heurística ILS apresentada no Algoritmo 6 na tentativa de encontrar novas soluções, fazendo uma busca na vizinhança utilizando as estruturas de vizinhança 2-opt, 3-opt, OR-opt, 1PM, 2PM, 3PM e Cross-Exchange.
Para a melhor solução da Busca Local encontrada no Algoritmo 6, o Algoritmo 4 (Verificar Carregamento) é executado para então verificar a factibilidade do carregamento. No Algoritmo 4, e representam o volume total do carregamento. A variável é usada pela meta-heurística ALNS para destruir uma parte da solução na tentativa de factibilizar o carregamento. Observe que os pesos e , que são variáveis do ALNS, são inicializados no Algoritmo 6 para que em cada iteração do ILS, o ALNS já priorize os métodos que tiveram melhores resultados nas iterações anteriores.
Resumidamente, o Algoritmo 5 gera uma solução inicial para o 3L-CVRP e, na sequência, o Algoritmo 6 é executado com o objetivo de realizar as buscas nas vizinhanças. O Algoritmo 4 é executado para verificar a factibilidade do carregamento para cada melhor resultado da Busca Local.
Algoritmo 4: Verificar Carregamento
Entrada: Um conjunto de clientes com posições conhecidas; um conjunto de itens/caixas disponíveis para serem carregados dentro dos veículos, com tipos, dimensões e quantidades (por cliente) conhecidos.
Saída: Factibilidade ou não do carregamento.
1. = Solução inicial gerada pelo algoritmo de George & Robinson adaptado (Seção 4.2.1). 2. se não for factível então
3. repita
4. Seleciona os métodos de destruição e reparação onde ∈ Ω e ∈ Ω usando e
5. = ( ( )).
6. Atualiza e
7. se todos os carregamentos forem factíveis
8. Retorna Verdadeiro.
9. fim se
10. =
11. até condição de parada ou carregamento factível 12. se pelo menos um carregamento não for factível
13. Retorna Falso.
14. fim se
Algoritmo 5: Solução inicial do 3L-CVRP - Adaptação do algoritmo de Clarke & Wright
Entradas: Um conjunto de clientes com posições e demandas conhecidas, e que devem ser visitados por uma frota homogênea de veículos com dimensões conhecidas e capacidade (volumétrica); um conjunto de itens/caixas disponíveis para serem carregados dentro dos veículos, com tipos, dimensões e quantidades (por cliente) conhecidos.
Saídas: Uma solução factível para o 3L-CVRP. 1. Crie um roteiro para cada cliente.
2. para todos os pares de clientes faça
3. Calcule os valores das economias e coloque-os em uma lista. 4. fim para
5. Coloque a lista em ordem não crescente dos valores das economias. 6. enquanto for possível unir roteiros faça
7. Inicie no par de clientes com o maior valor de economia.
8. Se a capacidade do veículo não foi excedida e o volume total dos itens for maior que a metade do volume total do veículo.
9. Executa o algoritmo de George & Robinson adaptado (Seção 4.2.1).
10. Se carregamento factível
11. Junte os roteiros.
12. Remova da lista o par de clientes e a respectiva economia.
13. fim se
14. fim se
Algoritmo 6: ILSALNS para o 3L-CVRP
Entrada: Uma solução inicial para o 3L-CVRP gerada pelo Algoritmo 5. Saída: Uma solução possivelmente melhorada para o 3L-CVRP. 1. ∗ = Solução Inicial do 3L-CVRP.
2. = (1,...,1); = (1,...,1).
3. Seja ={2-opt, 3-opt, 1-PM, 2-PM}. 4. para = 1, … , faça
5. para todos os operadores de Busca Local ∈ faça
6. ∗ = Aplique o operador de Busca Local
7. fim para
8. para = , … , faça
9. Perturbação (escolha aleatória entre OR-opt(2,3), 3-PM e Cross-Exchange).
10. para todos os operadores de Busca Local ∈ faça
11. = ∗
12. para todos os nós j na solução faça
13. Aplique o operador de Busca Local ∈ para o nó j.
14. se ∗ é melhor que
15. = ∗.
16. se não se (
∆
) maior que um número aleatório entre 0 e 1
17. = ∗.
18. fim se
19. fim para
20. Executa o Algoritmo 4 para o melhor movimento da Busca Local .
21. se carregamento for factível para
22. ∗ =
23. fim se
24. fim para