4 Algoritmos Propostos
4.6 Algoritmo de Colônia de Formigas
4.6.1 Algoritmo de Colônia de Formigas Proposto
O algoritmo que está sendo proposto neste trabalho é descrito no Algoritmo 16. Re- cebe como parâmetros de entrada: nomeInstancia instância que será solucionada, α controle de inuência do feromônio, β controle de inuência da informação heurística da rota, γ controle de inuência da informação heurística dos passageiros e ρ taxa de evaporação do feromônio. O número de formigas na colônia é |N|. A condição de parada é dada a partir do número de avaliações da função objetivo, numAvaliacoes.
Algoritmo 16: Algoritmo de Colônia de Formigas para o CaRSP 1 Entrada: nomeInstancia, α, β, γ, ρ
2 Saída: x∗ 3 início
4 G ←leInstancia (nomeInstancia);
5 τ ←iniciaFeromonio(G);
6 enquanto (numAvaliacoes < |N| × |C| × 500) faça 7 colonia ←geraFormigas (|N|, α, β, γ);
8 colonia ←buscaLocal (colonia);
9 x∗ ←retornaMelhorFormiga (colonia);
10 τ ←atualizaFeromonio (x∗, τ, ρ);
11 retorne (x∗); 12 m
Os procedimentos iniciaFeromonio() (linha 5), geraFormigas() (linha 7), buscaLocal() (linha 8) e atualizaFeromonio() (linha 10) são apresentados, respectivamente, nas seções 4.6.1.1, 4.6.1.2, 4.6.1.3 e 4.6.1.4. Já o procedimento retornaMelhorFormiga(), presente na linha 9, retorna a formiga da colônia com a melhor aptidão.
Para o problema proposto, a decisão da formiga não se limita apenas à selecionar uma aresta (i, j) a ser percorrida, mas também dene o carro, c, que será utilizado neste trecho. Assim, para algumas variáveis, surge um novo índice referente ao veículo escolhido: pck
ij,
τc ij e ηijc.
os trechos adjacentes de soluções encontradas ao longo da execução que possuam lotação ultrapassando 50% da capacidade do veículo utilizado. Esta lista não permite a inserção de trechos repetidos e é utilizada pela busca local apresentada na seção 4.6.1.3.
4.6.1.1 Procedimento iniciaFeromonio()
Seguindo a proposta de Dorigo e Stützle (2004), o feromônio inicial é denido a partir da equação (4.14). Onde n = |N|, ou seja, o número de cidades e Cnn corresponde à
média dos custos dos tours gerados pela heurística do vizinho mais próximo utilizando cada carro.
τ0 =
1
n × Cnn (4.14)
4.6.1.2 Procedimento geraFormigas()
Este procedimento é responsável por gerar |N| formigas que, por sua vez, vão compor a colônia. Cada uma destas formigas representa uma solução e começa seu tour em uma cidade diferente. Dada uma formiga f, o primeiro passo é sortear aleatoriamente, entre 1 e |C|, a quantidade de carros que serão utilizados nesta solução e armazenar em numCarros. A decisão referente ao carro que será utilizado e a próxima cidade visitada é dada a partir da equação (4.15). pckij = (τc ij)α(ηijc)β(σij)γ P l∈N k i (τc il)α(ηcil)β(σil)γ, se j ∈ N k i
0, caso contr´ario
(4.15)
A variável ηc
ij corresponde ao valor heurístico que representa a atratividade da formiga
visitar o vértice j após visitar o vértice i utilizando o carro c e é calculada a partir da equação (4.16). Onde δij corresponde à quantidade de passageiros cuja origem e destino
são, respectivamente, as cidades i e j.
ηcij = (1 + δij) dc
ij
(4.16) Já a variável σij se refere ao valor heurístico que representa a demanda de passageiros
indo da cidade i para j. Partindo da cidade i, este valor é denido para cada cidade não visitada, j, de acordo com o esquema ilustrado na Figura 16, de forma que j ∈ N, i 6= j.
Figura 16: Algoritmo de Colônia de Formigas Informação Heurística de Passageiros Para cada cidade escolhida, j, há o processo de embarque dos passageiros aptos desde a cidade inicial até j. Se a quantidade de carros selecionados durante este procedimento atingir o limite denido por numCarros, a escolha das próximas cidades considera apenas as informações referentes ao último carro utilizado.
Este procedimento assegura que na cidade 1 seja, obrigatoriamente, alugado um carro. Isto se deve ao fato de que ao nal do processo de geração de uma formiga é necessário haver um deslocamento da sequência de cidades e dos carros utilizados para que a ci- dade inicial seja a cidade 1. Isto impede o surgimento de formigas que não respeitem as características do CaRSP, ou seja, inviáveis.
4.6.1.3 Procedimento buscaLocal()
Em cada iteração, apenas uma das buscas locais propostas é aplicada sobre cada formiga da colônia e ao nal do procedimento, os passageiros são embarcados usando a heurística mostrada na seção 4.2.2, Algoritmo 2. São propostas sete estratégias, são elas:
1. Insere Trecho de Elite apresentação nesta seção;
2. Troca Aleatória de Cidades apresentado na seção 4.5.4.2.1; 3. Avalia Carros apresentado na seção 4.5.4.2.2;
4. Passageiros & Cidades apresentado na seção 4.4.1.4.2; 5. LKH Passageiros apresentado na seção 4.4.1.4.3;
6. 2-swap Custos & Devoluções apresentado na seção 4.5.4.2.3; 7. 2-opt apresentado na seção 4.4.1.4.4.
O método da roleta é utilizado para selecionar qual das estratégias será aplicada. Inicialmente, as abordagens possuem probabilidades iguais, mas à medida que conseguem melhorar as soluções originais, passam a ter maior prioridade no sorteio.
O procedimento Insere Trecho de Elite faz uso da variável listaElite, relatada na seção 4.6.1. Um elemento desta lista, t, contendo um conjunto de cidades com um alto índice de passageiros a serem embarcados é sorteada. A roleta utilizada considera uma relação proporcional entre o tamanho do trecho e a chance deste ser escolhido.
Dada uma formiga, f, o trecho escolhido, t, é inserido de forma a gerar duas soluções diferentes, f0
e f00
, seguindo a estratégia ilustrada na Figura 17. Para f0
, o trecho escolhido é inserido na sequência de cidades de f0
a partir da posição da cidade inicial de t. Já para f00, o trecho escolhido é inserido na sequência de cidades de f00 até a cidade nal de t. Ao nal, há uma etapa de reparação para substituir cada cidade repetida de f0
e f00
por uma que não foi visitada, de forma que resulte em custos mais baixos para percorrer os arcos incidentes àqueles vértices.
Figura 17: Algoritmo de Colônia de Formigas Insere Trecho deElite 4.6.1.4 Procedimento atualizaFeromonio()
Este procedimento é feito apenas em função da melhor formiga da colônia, Tbs, cujo
valor objetivo é dado por Cbs. Temos que ∆τbs
ij é inversamente proporcional a Cbsconforme
é mostrado na equação (4.17). A atualização do feromônio é aplicada apenas nos trechos e veículos utilizados por Tbs seguindo a equação (4.18). A evaporação, dada por ρ, evita que
acúmulos de feromônios cresçam indenidamente e possibilita o esquecimento de decisões realizadas no passado.
∆τijbs = 1
Cbs (4.17)