4 Abordagens de solução do PCV-MPQ
4.2.1 Greedy Randomized Adaptive Search Procedure GRASP A meta-heurística GRASP é bastante aplicada em problemas de otimização combi-
natória e foi inicialmente introduzida por (FEO; RESENDE, 1989). Sua estrutura consiste basicamente, na construção de uma solução e numa busca local de melhoria de solução. O diferencial deste método de solução está na sua etapa de construção que utiliza de uma estratégia gulosa-aleatória. Esta etapa pode ser realizada de várias maneiras. Uma das maneiras é a estratégia que utiliza uma Lista Restrita de Candidatos - LRC definida a partir de um processo guloso de avaliação. A lista sempre será composta por um conjunto restrito de elementos que podem pertencer à solução. A cada atualização da LRC um elemento é escolhido para compor a solução utilizando um procedimento aleatório. Outra estratégia de construção de solução seria utilizar o método da roleta, que não necessita de uma LRC. A seleção de elemento para compor a solução utili- zando a roleta é realizada de uma forma aleatória com viés guloso, que dá aos melhores elementos possíveis, uma maior chance de serem selecionados (GOLDBARG; GOLDBARG; LUNA, 2017). A meta-heurística GRASP que utiliza LRC na etapa de construção é exi- bida no Algoritmo 4.
O Algoritmo 4 realiza inicialmente, no passo 1 a definição da variável s* que irá
armazenar a melhor solução encontrada. Logo após, no passo 2 dá início a um laço que é executadointMax vezes. A cada execução do laço do passo 2, um laço no passo 3 é
Algoritmo 4GRASP GRASP ()
1.s* ← ∅;
2. Parai de 1 até intMax faça
3. Enquanto uma solução não é alcançada
4. Define LRC; 5. Selecionas ∈ LRC; 6. S = S ∪ s; 7. S0 ←buscalocal(S); 8. Se f(S0) < f(s∗) 9. s∗ ← S0; 10. Retorne s∗;
executado até que uma solução definida porS seja alcançada, sendo que a cada execu-
ção define uma LRC e desta lista seleciona um elemento definido pors para compor
a soluçãoS. No passo 7 um procedimento de busca local que gera a solução S’ é reali-
zada, tomando como base a soluçãoS recém-criada. Já no passo 8 S’ é comparada com
a melhor solução, caso seja melhor, a melhor solução é atualizada no passo 9. Ao final, o passo 10 retorna à soluçãos*.
4.2.1.1 GRASP com a heurística LKH
Uma meta-heurística GRASP que utiliza o método da roleta na etapa de constru- ção, e que utiliza a heurística LKH e o modelo descrito na seção 3.3 para determinação da configuração de embarque do veículo, empregados no Algoritmo 3, foi desenvol- vida. O LKH foi empregado na busca local e tem como objetivo otimizar a solução da rota encontrada, sem analisar a possibilidade de embarque de passageiros. Processos de vizinhança também foram empregados na busca local, tendo sido utilizados os dois seguintes: Insere, onde cada localidade que não pertence a solução é verificada a sua inserção no final da solução; e Remove, onde cada localidade que pertence a solução é verificada a sua remoção da solução. Em cada processo de vizinhança empregado,
analisa-se a possibilidade do embarque de passageiros e preserva-se a melhor solução encontrada. No processo de vizinhança Remove, analisa-se a viabilidade do bônus da solução. O algoritmo é denominado por G-LK.
Para tratar a característica do bônus do PCV-MPQ, a roleta do G-LK foi definida por um conjunto de elementos que representam o bônus das localidades não perten- centes a solução. Sendo xi o valor do bônus da localidade i, cada elemento da roleta é
equivalente a xi. Os elementos que possuem mais bônus terão mais chance de serem
selecionados para compor a solução. A meta-heurística G-LK é exibida no Algoritmo 5.
O Algoritmo 5 necessita do parâmetro intMax, que define a quantidade de itera-
ções.
O Algoritmo 5 realiza no passo 1, a definição da variável s* que irá armazenar a
melhor solução encontrada. Depois, o passo 2 executa um laçointMax vezes. A cada
execução do laço do passo 2, o passo 3 executa um laço que constrói uma solução definida porS utilizando o método da roleta. A cada execução do laço do passo 3 define
uma roleta e desta roleta seleciona um elemento definido pors para compor a solução S. No passo 7, define o embarque ótimo de passageiros para S, e no passo 8, atualiza s* se S for melhor. Posteriormente, o passo 9 inicia um laço que é executado enquanto
a solução S for atualizada pela solução definida por S’, sendo que a cada iteração o
passo 10 define a solução S’ utilizando o procedimento de busca local LKH, o passo
11 define o embarque ótimo de passageiros paraS’, e realiza no passo 12 o processo
de vizinhança Insere e no passo 13 o processo de vizinhança Remove. Em seguida, o passo 14 atualizas* se S’ for melhor. No passo 16, a solução S é atualizada por S’ se s*
Algoritmo 5G-LK G-LK ()
1.s* ← ∅;
2. Parai de 1 até intMax faça
3. Enquanto a quota mínima deS não é alcançada
4. Define Roleta; 5. Selecionas ∈ Roleta; 6. S = S ∪ s; 7. Embarque ótimo (S); 8. Atualiza (s*, S); 9. Faça 10. S0 ←busca LKH (S); 11. Embarque ótimo (S0); 12. Insere (S0); 13. Remove (S0); 14. Atualiza (s∗, S0);
15. Se (s∗ for atualizado por S0) 16. S ← S0;
17. Enquanto (S for atualizado por S0) 18. Retorne s∗;
4.2.1.2 GRASP com o Path-Relinking - PR
O PR foi inicialmente proposto por (GLOVER, 1997) como uma estratégia de inten- sificação de soluções. Diferentemente de outros métodos que utilizam da aleatoriedade para gerar novas soluções, como é o caso dos Algoritmos Genéticos, o PR gera novas soluções explorando caminhos que conectam soluções a soluções de elite previamente conhecidas.
A ideia principal do PR é conectar soluções explorando caminhos. Então, sejarotaX
uma solução inicial, erotaElite uma solução de elite, um novo caminho é definido por
uma movimentação emrotaX guiada por rotaElite.
A estrutura PR aplicada ao PCV-MPQ, utilizou o método EH para realizar o embar- que de passageiros e consiste basicamente, na construção de novas soluções, a partir de trocas de localidades pertencentes a solução inicial, substituições de localidades per- tencentes a solução inicial por localidades pertencentes a solução de elite, inserções de localidades pertencentes a solução de elite na solução inicial e remoções de localidades da solução inicial que não pertencem a solução de elite. O algoritmo PR é exibido no Algoritmo 6.
Algoritmo 6PR PR (rotaX, rotaElite)
1. Parai = 1 até tamRotaMenor
2. SerotaX[i] , rotaElite[i]
3. SerotaElite[i] ∈ rotaX
4. Troca(rotaX, rotaX[i], rotaElite[i]);
5. EH(rotaX); 6. Senão 7. rotaX[i] ← rotaElite[i]; 8. EH(rotaX); 9. Se tamanho(rotaX) < tamanho(rotaElite) 10. Insere(rotaX, rotaElite);
11. Senão se tamanho(rotaX) > tamanho(rotaElite)
12. Remove(rotaX, rotaElite);
O Algoritmo 6 incialmente, no passo 1 executa um laço que é executado tamRo- taMenor vezes, equivalente ao tamanho da menor solução, dentre a rotaX e rotaElite,
passadas por parâmetro. A cada execução do laço, verifica no passo 2, se a localidadei
das soluções são diferentes, se sim, realiza no passo 4 uma troca na posição de localida- des darotaX, e no passo 5 define o embarque de passageiros para rotaX, se o elemento rotaElite[i] pertencer a rotaX, ou, a substituição no passo 7 da localidade i que pertence
a rotaX pela localidade i pertencente a rotaElite e definição no passo 8 do embarque
de passageiros pararotaX. Após, no passo 9 se o tamanho da rotaX for menor que o
tamanho da rotaElite o procedimento Insere no passo 10, que insere em rotaX locali-
dades pertencentes arotaElite e não pertencente a rotaX é realizado, caso contrário, o
procedimento Remove no passo 12, que remove de rotaX localidades pertencentes a rotaX e não pertencentes a rotaElite é realizado. Ao final, no passo 13 a melhor solu-
ção definida porrotaBest é atualizada. Os procedimentos Insere e Remove, analisam a
possibilidade do embarque de passageiros e preservam a melhor solução encontrada. A seguir na Figura 2, apresenta exemplos de caminhos do PR.
Figura 2: Exemplos de caminhos PR
Na Figura 2, apresenta três exemplos de caminhos PR, que diferenciam basica- mente pelo tamanho das soluções analisadas. No exemplo quando as soluções possuem tamanhos iguais, apenas procedimentos de troca e substituição é realizado. Quando o tamanho da solução alvo é maior, procedimentos de inserção é realizado após a verifi- cação de todas as localidades da solução inicial. Já quando o tamanho da solução alvo é menor, procedimentos de remoção de localidades é realizado após comparar uma
quantidade de localidades equivalente ao tamanho da solução alvo.
Uma meta-heurística GRASP, que utiliza o método da roleta na etapa de constru- ção, o PR na etapa de busca local e o método EH, foi desenvolvida. O objetivo do PR é otimizar a solução encontrada visando o custo e a possibilidade de embarque de pas- sageiros. A cada rota gerada pelo PR realiza-se o embarque para saber qual a melhor solução. O algoritmo é denominado por G-PR.
Para tratar a característica do bônus e dos passageiros do PCV-MPQ, a roleta no G- PR foi definida por um conjunto de elementos que representam o bônus e a quantidade de passageiros das localidades não pertencentes a solução. Sendo xio valor do bônus da
localidade i e yi a quantidade de passageiros com origem na localidade i e destino não
visitado pelo motorista, cada elemento da roleta é equivalente a (xi . yi). Os elementos
que possuem mais bônus e passageiro com destino não visitado pelo motorista terão mais chance de serem selecionados para compor a solução. A meta-heurística G-PR é exibida no Algoritmo 7.
O Algoritmo 7 necessita de um conjunto de parâmetros, que são listados a seguir:
• tamMaxCE: tamanho máximo do conjunto de soluções de elite;
• intMax: quantidade de iterações.
O Algoritmo 7 realiza no passo 1 a inicialização da variável s* que irá armazenar
a melhor solução encontrada. Logo após, no passo 2 dá início a um laço que executa
intMax vezes. A cada execução do laço do passo 2 é executado um laço no passo 3, que
a cada iteração define uma roleta e seleciona desta roleta um elemento definido pors
para compor a solução definida porS, até que a quota mínima de S não for atingida. No
passo 7 define o embarque de passageiros paraS. No passo 8 a solução S é comparada
coms*, caso S seja melhor, no passo 9 a melhor solução é atualizada. Logo em seguida,
o passo 10 atualiza o conjunto de soluções de elite definido porCE, inserindo s*, caso
o conjunto ultrapasse a sua capacidade máxima de soluções defina por tamMaxCE é
removida a solução que está há mais tempo no conjunto. Já no passo 11 realiza o pro- cedimento PR tomando como baseS, uma solução do CE selecionada aleatoriamente e s*, com o objetivo de melhorar s*. Ao final, no passo 12 a melhor solução encontrada é
Algoritmo 7G-PR G-PR()
1.s* ← ∅;
2. Parai de 1 até intMax faça
3. Enquanto a quota mínima deS não é alcançada
4. Define Roleta; 5. Selecionas ∈ Roleta; 6. S = S ∪ s; 7. EH (S); 8. Se f(S) 6 f(s*) 9. s* ← S;
10. Atualiza (CE, tamMaxCE, s*);
11. PR(S, CE, s*);
4.2.1.3 GRASP com o Variable Neighborhood Descending with Perturbation - VNDP O Variable Neighborhood Search - VNS é um método de busca meta-heurístico, in-
troduzido inicialmente por (MLADENOVIĆ; HANSEN, 1997). Basicamente, seu objetivo é intensificar uma solução de um dado problema examinando um conjunto de processos de vizinhança.
O VNDP (GOLDBARG; GOLDBARG, 2012) é uma variante do VNS, que combina a busca com movimentos de diversificação. Esses movimentos também são denominados deshaking e possuem o objetivo de mudar a direção da busca. A meta-heurística VNDP
desenvolvida e exibida no Algoritmo 8, tomou como base o VNDP citado e utilizou o EH para a alocação de passageiros.
Algoritmo 8VNDP
VNDP()
1. Selecione vizinhança Nv,v = 1,...,vmax;
2.S ← SoluçãoInicial(); 3.v ← 1; 4. Enquantov 6 vmax 5. S’ ← buscaLocal(Nv(S), C); 6. Se f(S0) < f(S) 7. S ← S0; 8. v ← 1; 9. Se não 10. shaking(S, k); 11. EH(S); 12. v ← v + 1;
13. Retorne a melhor solução encontrada;
O Algoritmo 8 inicialmente, no passo 1 seleciona o conjunto de processos de vi- zinhança, no passo 2 defini a solução inicial S e passo 3 armazena na variável v, que
nhança do conjunto de processos de vizinhança. Após, no passo 4 um laço é executado enquanto v for menor ou igual ao identificador da vizinhança máxima definido por vmax. A cada execução do laço, no passo 5 uma solução definida porS’ é gerada após
uma busca local em S utilizando a vizinhança v e o parâmetro C que controla a não
convergência da busca, ou seja, se a busca local gerarC soluções consecutivamente que
não são melhores que a solução S, o procedimento buscaLocal é interrompido e re-
torna a melhor solução encontrada na busca. Posteriormente, no passo 7 a soluçãoS e
no passo 8 o parâmetrov são atualizados se S’ for melhor que S, caso contrário, realiza
no passo 10 o procedimentoshaking que troca k par de localidades vizinhas da solução S escolhidas aleatoriamente, no passo 11 a definição do embarque de passageiros para S, e no passo 12 incrementa em uma unidade o parâmetro v. O algoritmo finaliza, no
passo 13 retornando a melhor solução encontrada.
O conjunto de processos de vizinhança utilizado no Algoritmo 8 é composto pelos seguintes processos: Insere, onde cada localidade que não pertence a rota é verificado a sua inserção no final da rota; Substituição, onde cada localidade pertencente a rota é verificada a sua substituição por cada localidade não pertencente a rota; e 2-opt, onde todas as possibilidades de remover e reinserir dois trechos da rota é verificado. Em cada processo de vizinhança empregado, realiza-se o embarque de todas as rotas geradas e preserva-se a melhor. A seguir na Figura 3, apresenta exemplos de operação das vizinhanças utilizadas.
Figura 3: Exemplos de operações das vizinhanças
Na Figura 3 na vizinhança Insere, a localidade 9 que não pertence a solução é in- serida no final da solução proporcionando o aumento do tamanho da solução em uma unidade. Na vizinhança Substituição, a localidade 4 é substituída pela localidade 9 que não pertence a solução. Já na vizinhança 2-opt os trechos de rota 1 - 2 e 6 - 8 são trocados.
Um algoritmo GRASP denominado por G-VNDP, que utiliza o VNDP, o método EH, e o método da roleta na etapa de construção similar ao G-PR, foi desenvolvido. O VNDP é utilizado na etapa de busca local e tem como objetivo otimizar a solução encontrada na etapa construtiva. O algoritmo G-VNDP é exibido no Algoritmo 9.
O Algoritmo 9 necessita de um conjunto de parâmetros, que são listados a seguir: • intMax: quantidade de iterações;
• k: quantidade de trocas realizadas pelo procedimento shaking, utilizada pelo VNDP;
lhores que uma dada solução, utilizada pelo VNDP.
Algoritmo 9G-VNDP
G-VNDP() 1.s* ← ∅;
2. Parai de 1 até intMax faça
3. Enquanto a quota mínima deS não é alcançada
4. Define Roleta; 5. Selecionas ∈ Roleta; 6. S = S ∪ s; 7. EH (S); 8. S’ ← VNDP (S); 9. Se f(S’) < f(s*) 10. s* ← S’; 11. Retornes*;
O Algoritmo 9 realiza no passo 1 a definição da variávels* que irá armazenar a me-
lhor solução encontrada. O passo 2 executa um laçointMax vezes. A cada execução do
laço do passo 2 um laço no passo 3 é executado enquanto a quota mínima da solução definida porS não for atingida. A cada execução do laço do passo 3, define uma roleta
e seleciona desta roleta um elemento definido pors para compor a solução S. Posterior-
mente, o passo 7 realiza a definição do embarque de passageiros paraS. O passo 8 gera
a solução definida porS’ a partir do procedimento de busca local VNDP, o qual tem
como base a soluçãoS gerada na etapa construtiva. Em seguida o passo 9 compara se S’ é melhor que s*, se sim, o passo 10 atualiza s*. Ao final, o passo 11 retorna a melhor
solução.