III. ĐSTĐNAF KANUN YOLUNA BAŞVURABĐLMENĐN KOŞULLARI
1. Đstinaf Kanun Yoluna Başvurmaya Hakkı Olanlar
A população filha é gerada a partir da recombinação de indivíduos da população P . Pri- meiramente, dois indivíduos "pais" são selecionados e os indivíduos "filhos" são gerados pela aplicação de um operador de cruzamento. Dois operadores são considerados neste trabalho: Cruzamento Baseado em Rota e Cruzamento Split. Ambos operadores de cruzamento tem igual probabilidade de serem selecionados para o seu uso. Cada indivíduo "filho" pode sofrer mutação dada uma probabilidade de mutação pmut. O operador de mutação utilizado neste trabalho é o Or-opt e Altera Coleta descritos na seção 5.3, também com igual probabilidade de serem selecionados para serem aplicados.
5.7.3.1 Operador de Seleção
A fase de seleção do NSGA-II ocorre em dois momentos distintos do algoritmo. O primeiro deles, quando a população inicial é gerada, o algoritmo utiliza a técnica torneio binário da seguinte forma: dados dois indivíduos a e b, se um indivíduo a domina o indivíduo b, então
Algoritmo 5.14 Geração da População Inicial
Entrada: População P op, número de indivíduos da população p, total de consumidores n
{Gerando soluções para o CVRP e VRPSPD};
1: sCV RP ← gerar solução para o CVRP utilizando GVNS; 2: sV RP SP D ← gerar solução para o VRPSPD utilizando GVNS; 3: numConsColetasAtendidasCV RP ← 0;
4: numConsColetasAtendidasV RP SP D ← n;
{Inserindo soluções na população}
5: inserir(P op, [sCV RP, sV RP SP D]);
{Calculando número de soluções geradas a partir do CVRP e VRPSPD}
6: numSolucoes ← (p − 2)/2;
{Calculando a taxa de incremento ou decremento da satisfação das demandas de coleta}
7: taxa ← n/numSolucoes;
{Gerando as demais soluções da população}
8: solucoesGeradas ← 0;
9: enquanto solucoesGeradas < numSolucoes faça
10: sCV RP ← insereColeta(taxa, sCV RP, numConsColetasAtendidasCV RP); 11: sV RP SP D ← removeColeta(taxa, sV RP SP D, numConsColetasAtendidasV RP SP D); 12: inserir(P op, [sCV RP, sV RP SP D]); 13: solucoesGeradas ← solucoesGeradas + 1; 14: fim enquanto 15: retornar P op;
o indivíduo a é copiado para a população Q; caso contrário, o indivíduo b é inserido na população Q. Se a não domina b e b não domina a, ambos indivíduos são copiados.
A partir de então, aplica-se o método de seleção por torneio de multidão, no qual uma solução si, pertencente a fronteira i após a ordenação de dominância, é considerada melhor que a solução sj, pertencente a fronteira j, se [Deb, 2001]:
1. si possui um nível de não dominância melhor que sj, ou seja, se i < j.
2. i = j e a distância de multidão de si é maior que distância de multidão de sj.
5.7.3.2 Operadores de Cruzamento
Neste trabalho foram adotados dois métodos de cruzamento: Cruzamento Baseado em Rota e Cruzamento Split. O Cruzamento Split faz uso do cruzamento sequencial comumente utilizado nos problemas do caixeiro viajante. Os métodos de cruzamento são descritos a seguir.
Cruzamento Baseado em Rota O cruzamento baseado em rota (RBX, do inglês Route Based Crossover), proposto por Potvin e Bengio [1996], seleciona aleatoriamente algumas ro- tas de um indivíduo P ai1 para serem incluídas no indivíduo F ilho1. Em seguida, os demais
consumidores não contidos na solução do F ilho1 são inseridos de acordo com a solução do indivíduo P ai2. De forma similar, algumas rotas do indivíduo P ai2 são selecionadas aleato- riamente para serem incluídas no indivíduo F ilho2 e este indivíduo é completado de acordo com as rotas do indivíduo P ai1.
(a) Indivíduo P ai1 (b) Indivíduo P ai2
(c) Indivíduo F ilho1 (d) Indivíduo
F ilho2
Figura 5.8: Cruzamento Baseado em Rota (RBX)
Este método é utilizado por recombinar tanto a posição dos consumidores nas rotas quanto o estado de coleta dos consumidores. Um exemplo do funcionamento do método de cruza- mento RBX é apresentado na figura 5.8. O quadrado negro indica a posição do depósito e as circunferências na cor clara representam os consumidores tais que suas demandas de coletas são atendidas e as circunferências na cor escura representam os consumidores com coletas não satisfeitas. As figuras (a) e (b) são os dois indivíduos (P ai1 e P ai2) selecionados para o cruzamento. O indivíduo F ilho1 é gerado a partir da recombinação dos indivíduos P ai1 e P ai2, no qual a rota 2 é totalmente mantida do P ai1 e as demais são inseridas do P ai2. Da mesma forma, o indivíduo F ilho2 mantém a rota 2 do P ai2 e o restante é inserido conforme P ai1. Quando um consumidor é copiado de uma solução P ai para uma solução F ilho, o estado de coleta desse consumidor é mantido do indivíduo P ai.
Cruzamento Split O método de cruzamento Split (SplitX), proposto por Prins [2004], consiste da transformação dos indivíduos "pais" em soluções para o problema do caixeiro viajante (TSP). A estas soluções, aplica-se o método de cruzamento sequencial (OX), deta- lhado a seguir, e então a solução para o TSP é novamente transformada em uma solução para o problema de roteamento de veículos através de um procedimento denominado Split.
A transformação de uma solução do problema de roteamento de veículos em uma solução do problema do caixeiro viajante é feita a partir da remoção das arestas de incidência ao
depósito, conforme figura 5.9. Apenas duas delas são mantidas a fim de incluir o depósito na solução.
(a) Solução VRP (b) Solução TSP
Figura 5.9: Transformando uma solução para o problema de roteamento de veículos (VRP) em uma solução para o problema do caixeiro viajante (TSP)
Assim, dada uma solução para o problema do caixeiro viajante, aplica-se o operador de cruzamento sequencial, muito comum para esse tipo de problema. Em seguida, o algoritmo transforma a solução obtida novamente em uma solução para o problema de roteamento de veículos através da inclusão de novas arestas de incidência ao depósito, particionando, assim, a solução do problema do caixeiro viajante.
O processo de transformação de um problema do caixeiro viajante em um problema de roteamento de veículo inicialmente constrói um grafo direcionado acíclico (DAG) D=(V,A) com V={v0, v1, ..., vn}, sendo n o número de consumidores e o vértice v0 representando o depósito. As arestas contidas na DAG representam diferentes rotas viáveis, definidas como: para todo vértice vi e vj pertencente V , tal que i < j, o arco (vi, vj) pertence ao conjunto de arestas A se a capacidade do veículo nesta rota não é extrapolada.
Na figura 5.10 é mostrado como gerar um grafo direcionado acíclico (figura 5.10b) a partir de uma solução do problema do caixeiro viajante (figura 5.10c). Na solução do TSP, os números indicados entre parênteses representam a demanda de entrega de cada consumidor e os valores nas arestas representam o custo de percorrê-la. Na DAG, cada aresta indica uma rota possível de ser gerada a partir da solução do TSP. Por exemplo, a aresta a : 40 indica que a rota 0 − a − 0 tem custo 40, a aresta bcd : 120 indica que a rota 0 − b − c − d − 0 tem custo 120. A aresta abc : 90, por exemplo, não aparece na DAG, pois a carga do veículo extrapola sua capacidade máxima (Q=10).
Assim sendo, dado o grafo direcionado acíclico, busca-se, então, o caminho mais curto neste grafo. Na figura 5.10b, os valores indicados acima do vértice mostram o valor do caminho mais curto de alcançar este vértice a partir do vértice v0. O valor 205 acima do último vértice indica que o caminho mais curto para alcançá-lo, partindo do vértice v0, tem custo 205, sendo que este caminho passa pelas arestas: ab : 55, c : 60, de : 90.
(a) Solução TSP (b) DAG Correspondente
(c) Solução VRP
Figura 5.10: Transformando uma solução para o problema do caixeiro viajante (TSP) em uma solução para o problema de roteamento de veículos (VRP) [Prins, 2004]
à solução do problema do caixeiro viajante. Serão criadas as seguintes rotas: 0 − a − b − 0, 0 − c − 0 e 0 − d − e − 0, como mostrado na figura 5.10a.
Cruzamento Sequencial Conforme mencionado, o operador de cruzamento Split utiliza o cruzamento sequencial (OX, do inglês Order Crossover) para recombinar indivíduos que representam soluções para o problema do caixeiro viajante.
O cruzamento sequencial copia uma subsequência da solução P ai1, obtida a partir de dois pontos de corte, para o F ilho1. Os demais pontos são inseridos na ordem em que aparecem na solução P ai2.
Um exemplo deste operador é apresentado na figura 5.11. O primeiro filho (F ilho1) recebe os valores contidos na subsequência 6 − 5 − 4 gerada pelos dois pontos de corte no P ai1, na mesma posição em que eles aparecem. O F ilho1terá, então, a seguinte configuração x − x − x − 6 − 5 − 4 − x − x − x. Em seguida, retira-se do P ai2 estes valores (6,5 e 4), gerando o trajeto 2 − 3 − 7 − 8 − 1 − 9, iniciando a sequência a partir do segundo ponto de corte. Estes valores são inseridos nesta ordem no F ilho1, também iniciando a inserção a partir do segundo ponto de corte. Logo, ao término do cruzamento, o F ilho1 será 8−1−9−6−5−4−2−3−7, conforme mostra a figura.
Como este operador foi utilizado para solucionar o problema de roteamento de veículos multiobjetivo com coleta opcional, ao copiar um consumidor para uma solução "filho" ele mantém o seu estado de coleta. Isso permite que o método consiga explorar ambos os objetivos do problema tratado.
Figura 5.11: Cruzamento Sequencial (OX)