4.3 RESULTADOS E DISCUSSÕES
5.2.2 Algoritmo Genético Multiobjetivo com Busca Local
Um MOGLS também foi implementado para gerar um conjunto de soluções que aproximam a fronteira de Pareto do BARP-PD. Um pseudocódigo que descreve o método é apresentado no Algoritmo 6.
Algoritmo 6 Pseudocódigo do MOGLS Archive ← ∅
curP op ←InitialPopulation(nRCL, ps2)
g ← 1
while currentT ime < maxT imedo
FastNondominatedSort(curP op) comentário:F0aFffronteiras não-dominadas
CrowdingDistanceComputation(curP op)
Archive ←soluções não-dominadas de(Archive ∪ F0)
curP op ←MakeNewPopulation(curP op, ps2)
Elite ←SelectElite(es, Archive) if (gmodβ = 1) then
LocalSearch(curP op, Elite) else
curP op ← curP op ∪ Elite end if
g ← g + 1 end while
return o conjunto de aproximação emArchive
O conjunto de aproximação é mantido separado da população em um conjunto de arquivo Archive, que contém todas as soluções não-dominadas encontradas durante todo o processo. O procedimento começa com um conjunto Archive vazio e uma população de ps2 indivíduos gerada com o algoritmo construtivo descrito na Seção 5.2.3. O contador
de gerações g é inicializado para 1. Populações sucessivas são geradas iterativamente no laço principal, limitado por um tempo máximo de execução.
Iniciando cada iteração, a população é organizada em fronteiras não dominados e a distância de povoamento é calculada para todos os indivíduos logo após a ordenação. O arquivo Archive é então atualizado com as soluções presentes na fronteira F0, que contém
os indivíduos não dominados. Uma nova população é gerada com o procedimento descrito na Seção 5.2.4, e substitui a atual. O conjunto Elite é criado como um subconjunto do arquivo, com soluções escolhidas por torneio binário. Entre duas soluções selecionadas aleatoriamente, aquela com maior distância de povoamento na fronteira de aproximação atual, mantida em Archive, é favorecida. Como Archive contém apenas soluções não dominadas, entre elas não exite diferença de níveis de dominância.
A cada β gerações, um procedimento de Busca Local é executado, a fim de me- lhorar as fronteiras não dominadas representadas por Elite e por F0. O método de Busca
Local e as formas como as novas soluções são incluídas na população estão descritos na Seção 5.2.6. Nas iterações sem Busca Local as soluções de Elite são incluídas di- retamente na população. Finalmente, o contador de gerações g é incrementado e nova
iteração do laço externo é executada se o tempo disponível não foi excedido.
5.2.3 Geração da População Inicial
O Algoritmo 7 apresenta um algoritmo construtivo, guloso e aleatorizado, utilizado para criar a população inicial dos métodos de solução propostos. Cada iteração do laço externo fornece uma solução ou indivíduo I, gerado conforme descrição que segue.
Algoritmo 7 Pseudocódigo do método de construção da população inicial Input:
nRCL: número de candidatos a considerar na seleção aleatória ps: tamanho da população
P op ← ∅
while|P op| < psdo Cria um novo indivíduoI Out ← A
LN ← ∅
forkfrom 1 tomdo
Candidates ← {a0i∈ Out : ∀i ∈ N }
ifCandidates=∅then
Candidates ← {a0i∈ A : ∀i ∈ N }
end if
Seleciona aleatoriamente um arcoa0ik ∈ Candidates
Out ← Out \ {a0ik}
Inicia uma nova rota no indivíduoIpela inserção do arcoa0ik
LN ← LN ∪ {ik} ti← c0ik end for j’← argmin i∈LN {ti} whiletj’ < sdo Candidates ← {aj’h ∈ Out : ∀h ∈ N ∧ pj’h > 0} ifCandidates=∅then Candidates ← {aj’h ∈ A : ∀h ∈ N } end if evalj’h← min j∈LN \{j’}{chj}, ∀aj’h ∈ Candidates
CriaRCLcom osnRCLarcos emCandidatescom maioreval Seleciona aleatoriamente um arcoaj’l* ∈ RCL
Insere o arcoaj’l* no indivíduoI
Out ← Out \ {aj’l*} LN ← LN \ {j’} LN ← LN ∪ {l*} tl← tj’+ cj’l* j’← argmin i∈LN {ti} end while P op ← P op ∪ {I} end while returnP op
De modo a evitar a inclusão do mesmo arco duas vezes, o conjunto Out é criado para manter registro dos arcos não incluídos na solução em construção. Inicialmente, ele contém todos os arcos de A.
Uma rota começa com um arco ligando a garagem a outro nó. Um arco a0ik é
selecionados aleatoriamente entre aqueles em Out se houver pelo menos um arco que começa no nó 0. Caso contrário, o arco será selecionado entre aqueles em A, o que significa que estará duplicado na solução. Neste ponto, não há qualquer favorecimento para arcos em função do prêmio relacionado, a fim de permitir diferentes arcos de partida e promover a diversidade da população inicial. O arco selecionado é removido de Out e incluído na solução. O nó ik é incluído no conjunto LN , cujos elementos são os últimos
nós de cada rota parcial, e o tempo estimado de chegada neste nó (tik) é calculado. Este
procedimento é repetido m vezes, definindo um arco de partida para cada rota.
A seguir, é encontrada entre as m rotas parciais aquela que está atrasada em rela- ção às outras, e o último nó desta rota é identificado como j’ ∈ LN . Este rota é escolhida para ser a próxima a incorporar um novo arco, selecionado a partir de uma lista restrita de arcos candidatos RCL construída como segue.
Inicialmente, são considerados como candidatos aqueles arcos que começam em j’, que estejam em Out e que tenham prêmio positivo, de modo a gerar soluções iniciais com um bom objetivo de prêmio coletado. Se não houver um arco com tais características, passam a ser considerados candidatos todos os arcos que partem de j’ e são elementos de A. Os arcos candidatos são colocados em Candidates A RCL é construída com os nRCL arcos aj’h ∈ Candidates com maior avaliação de acordo com a distância mínima
a partir do nó h para todos os nós em LN \ {j’}. O objetivo é incluir na solução um arco entre aqueles com uma alta distância mínima para outras rotas, o que é coerente com a função objetivo de dispersão. Um arco aj’l ∈ RCL é selecionado aleatoriamente para ser
incluído na rota atrasada. O arco é removido de Out, l substitui j’ no conjunto LN como o novo nó final em sua rota parcial e tlé calculado.
Um indivíduo ou solução é considerado completo e incluído na população se todas as rotas têm comprimento igual a ou maior do que a duração do turno s.