• Nenhum resultado encontrado

Algoritmo de Colônia de Formigas Proposto

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)

Documentos relacionados