O PAES e NSGA-II são duas técnicas desenvolvidas especicamente para o cenário multiobjetivo, ambas muito empregadas na literatura. Por esse motivo, tomamos a decisão de hibridizar essas duas técnicas evolucionárias. Além, o trabalho que propôs a AMHM para problemas mono-objetivo (SOUZA, 2013) não realizou hibridização com técnicas evolucionárias, deixando os experimentos com essas técnicas para trabalhos futuros, o que também nos motivou a escolher algoritmos evolucionários. O algoritmo Anytime-PLS foi escolhido para hibridização na BO-AMHM por ser um algoritmo do estado da arte para o Problema do Caixeiro Viajante multiobjetivo. O GRASP, por sua vez, foi escolhido para compor o conjunto de técnicas hibridizadas por se tratar de uma técnica originalmente projetada para problemas mono-objetivo e, nesse sentido, contrastar com as demais. Além disso, o PAES, NSGA-II e GRASP são ténicas disseminadas na comunidade cientíca, o que facilita a compreensão deste trabalho. As implementações desses três algoritmos são modicações do PAES, NSGA-II e GRASP descritos por Carvalho (2017), utilizando o operador de vizinhança 2-opt.
4.1.1 PAES
PAES (Pareto Archived Evolution Strategy): O PAES começa com uma solução aleató- ria s que se torna a solução corrente. Um operador de mutação é aplicado em s produzindo uma nova solução. O operador de mutação realiza troca entre duas posições aleatórias de s e a solução que sofreu mutação é submetida a busca local 2-opt (GOLDEN, 1980). As soluções produzidas pela busca 2-opt são armazenadas em S2−opt. Uma das soluções em
S2−opt é escolhida para se tornar a nova solução corrente, da seguinte maneira: se existe
s0 ∈ S2−opt, tal que f(s0) ≺ f (s), s0 se torna a nova solução corrente e o processo é repe-
tido. Se não existir s0 ∈ S
2−opt, tal que f(s0) ≺ f (s), a nova solução corrente é a solução
em S2−opt com o menor número de vizinhos em S, representado por um arquivo ilimitado
de uma solução em S, um grid adaptativo(KNOWLES; CORNE, 1999) é utilizado pelo algoritmo. O grid adaptativo contém os vetores objetivo correspondentes às soluções em S. Seja p1 = (p1
1, p12)e p2 = (p21, p22)os melhores pontos objetivo considerando os objetivos
1 e 2, respectivamente, na iteração t. O grid é denido em um quadrado com coordenadas (0, 0), (p21, 0), (0, p12) e (p21, p12). Cada célula é denida como um quadrado com lados me- dindo #side unidades, um parâmetro do algoritmo denido pelo usuário. O número de vizinhos de uma solução s0, tal que f(s0) ∈ célula ci, é denido como |ci| − 1, onde |ci| é
o número de pontos objetivo em ci. S é retornado pelo PAES após satisfeito o critério de parada.
4.1.2 GRASP
GRASP (Greedy Randomized Adaptive Search Procedure): O GRASP é um algorit- mo de duas fases. Na primeira fase, uma solução viável é criada por um procedimento de construção. Esse procedimento usa uma lista de candidatos contendo elementos pro- missores, da qual candidatos são selecionados para construir a solução. A segunda fase consiste na aplicação de uma busca local na solução construída na primeira fase. Para construir a solução inicial, s, uma função objetivo fi, 1 ≤ i ≤ k e um vértice v são
selecionados aleatoriamente. Os vértices remanescentes são inseridos em s iterativamen- te da seguinte maneira: seja v o último vértice inserido em s, L a lista de vértices não inseridos em s, v0 ∈ L, (v0, v) ∈ E a aresta entre os vértices v0 e v, e di(v0, v) o pe-
so da aresta da (v0, v) na função objetivo fi. A lista de candidatos C é denida como
C = {v0 : di(v0, v) ≤ min
di(v) + β(maxdi(v) − mindi(v))}, onde mindi(v) e maxdi(v)
são, respectivamente, min
v0∈Vd
i(v0, v), max v0∈V d
i(v0, v) e β é um parâmetro. Um vértice aleató-
rio em C é selecionado para ser inserido em s. O procedimento de inserção é repetido até que todos os vértices sejam inseridos em s. A solução s é submetida à busca local 2-opt(GOLDEN, 1980). Um conjunto S ilimitado de soluções não dominadas geradas du- rante a execução do GRASP é mantido. Após satisfazer o critério de parada, o algoritmo retorna S.
4.1.3 NSGA-II
NSGA-II (Non-dominated Sorting Genetic Algorithm-II ): Inicialmente, uma popula- ção aleatória, P , é gerada. Nessa geração, as posições dos vetores de decisão recebem vértices aleatórios da instância. Em cada iteração, um conjunto aleatório Q1 ⊂ P é sub-
pelo parâmetro taxa de cruzamento denido pelo usuário. A recombinação de ponto úni- co(KORA; YADLAPALLI, 2017) foi usada como operador de cruzamento para gerar um único cromossomo. Após essa recombinação, o cromossomo gerado pode não corresponder a uma solução viável. Neste caso, uma função de reparação remove genes duplicados e insere os genes ausentes. Seja s uma solução e x1,...,xm os valores ausentes ordenados
em ordem crescente. Seja w1,...,wm as posições dos genes duplicados em s. Percorrendo
s da esquerda para a direita, a posição wj é considerada como tendo um gene duplica-
do quando um gene aparece pela segunda vez. A função de reparação atribui xj à wj,
1 ≤ j ≤ m. Por exemplo, considere a solução s = (4, 3, 2, 4, 3). Os genes duplicados são 3 e 4 nas posições 4 e 5, respectivamente. Os genes ausentes são 1 e 5. A função de repara- ção insere o gene ausente 1 na posição s4 e o gene ausente 5 na posição s5. O resultado
é s = (4, 3, 2, 1, 5). Cada nova solução gerada pelo operador de cruzamento é submetida à busca local 2-opt(GOLDEN, 1980), da qual se obtém o conjunto de soluções S2−opt.
As soluções geradas pelo operador de cruzamento e suas respectivas soluções vizinhas em S2−opt são inseridas em P . Após isso, um operador de mutação, que troca dois genes
selecionados aleatoriamente, é aplicado às soluções de um conjunto aleatório Q2 ⊂ P.
O número de elementos em Q2 é denido de acordo com o parâmetro taxa de mutação
denido pelo usuário. As soluções que sofreram mutação são inseridas em P . O operador de seleção clássico do NSGA-II(DEB, 2002) é aplicado para selecionar indivíduos para participar da próxima iteração. Nessa implementação, o NSGA-II mantém um conjunto ilimitado S de soluções não dominadas geradas durante a execução. Quando o critério de parada é satisfeito, o NSGA-II retorna S.
4.1.4 Anytime-PLS
Anytime-PLS (Anytime-Pareto Local Search): Este método é uma extensão direta do método Pareto Local Search (PLS) proposto por Paquete, Chiarandini e Stützle (2004). O PLS explora a vizinhança de soluções arquivadas, insere novas soluções não dominadas no arquivo e remove aquelas dominadas. O processo é repetido até satisfazer um critério de parada.
A extensão Anytime-PLS (DUBOIS-LACOSTE, 2015) foi proposta com o objetivo de encontrar aproximações melhores do conjunto Pareto ótimo em comparação à sua versão original, independente de quando o algoritmo é parado. O Algoritmo 12 exibe o pseudocódigo do Anytime-PLS.
Algoritmo 12 Procedimento anytime − P LS.
Entrada: A0: um conjunto inicial de soluções não dominadas
1: s.explorada ← f also ∀s ∈ A0
2: A ← A0
3: repetir
4: s ←solução aleatória deA0
5: para todo s0 ∈ N (s)faça
6: se A {s0} então 7: s.explorada ← f also 8: A ← atualiza(A, s0) 9: m se 10: m para 11: s.explorada ← verdadeiro 12: s ∈ A|s.explorada = f also 13: até que A0 = ∅ 14: return A
nhança e aceitação, respectivamente. Na fase de seleção, uma solução é selecionada para ter sua vizinhança explorada. Na fase de exploração da vizinhança, a vizinhança da solu- ção escolhida denida por um operador de vizinhança é explorada. Na fase de aceitação, é vericado se as soluções vizinhas devem ser aceitas ou não para terem sua vizinhan- ça explorada em iterações futuras. O Anytime-PLS usa o operador de vizinhança 2-opt. Dubois-Lacoste, nez e Stützle (2015) denem variações do Anytime-PLS através de mu- danças nessas três fases. Implementamos a variação PLShOHI,6≺,*i, cujas três fases são descritas abaixo:
• Seleção OHI: A seleção é feita através do operador de seleção OHI. O OHI é uma heurística que seleciona para exploração a solução em A0 com maior potencial de
aumento no hipervolume. Mais informações sobre o OHI podem ser consultadas em Dubois-Lacoste, nez e Stützle (2015).
• Aceitação 6≺: Quando uma solução s0 ∈ N (s) que domina a solução corrente
s é encontrada, s0 é aceita para exploração futura e as demais soluções em N(s) são descartadas. Se nenhuma solução em N(s) domina s então as soluções não dominadas de N(s) são aceitas para exploração nas iterações futuras.
• Exploração da vizinhança *: Na exploração de vizinhança * todos os vizinhos determinados pelo operador de vizinhança N são explorados.