um algoritmo hÍbrido para o problema de roteamento … · algoritmos meméticos propostos por...
TRANSCRIPT
UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE
CENTRO DE TECNOLOGIA - CT
PROGRAMA DE PÓS-GRADUAÇÃO EM ENGENHARIA DE PRODUÇÃO
UM ALGORITMO HÍBRIDO PARA O PROBLEMA DE
ROTEAMENTO DE VEÍCULOS COM FROTAS HETEROGÊNEAS
por
VANESSA DANIELLE SANTOS FERREIRA
Natal/RN
2011
VANESSA DANIELLE SANTOS FERREIRA
UM ALGORITMO HÍBRIDO PARA O PROBLEMA DE
ROTEAMENTO DE VEÍCULOS COM FROTAS HETEROGÊNEAS
Dissertação de mestrado apresentada ao
Programa de Pós-Graduação em
Engenharia de Produção - PPGEP da
Universidade Federal do Rio Grande do
Norte como requisito parcial para
obtenção do título de mestre em
Engenharia de Produção.
Orientador: Prof. Dr. Dario José Aloise.
Natal/RN
2011
i
VANESSA DANIELLE SANTOS FERREIRA
UM ALGORITMO HÍBRIDO PARA O PROBLEMA DE
ROTEAMENTO DE VEÍCULOS COM FROTAS HETEROGÊNEAS
Dissertação de mestrado apresentada ao
Programa de Pós-Graduação em
Engenharia de Produção - PPGEP da
Universidade Federal do Rio Grande do
Norte como requisito parcial para
obtenção do título de mestre em
Engenharia de Produção.
Aprovado em ____ de ______________ de 2011.
____________________________________
Prof. Dr. Dario José Aloise
Orientador
____________________________________
Prof. Dr. José Alfredo Ferreira Costa
Examinador
____________________________________
Prof. Dr. – Francisco Chagas de Lima Júnior
Examinador externo - UERN
ii
AGRADECIMENTOS
A DEUS por toda proteção e por me manter sempre firme no meu propósito.
A minha família por toda dedicação, carinho e todo amor indispensáveis nesse
processo. Meus pais, Clóvis e Sônia, figuras presentes nas dificuldades e nas alegrias, e
a minha irmã Verônica, sempre amiga e acolhedora. A vocês o meu eterno amor e
gratidão.
Ao meu noivo João Saturnino, pela presença constante em todos os momentos,
com paciência, amor e dedicação.
Aos meus amigos Allison Guedes e João Paulo Nascimento o meu
agradecimento especial por todo o apoio e incentivo. Sem vocês nada disso seria
possível.
Ao meu orientador Dario José Aloise por toda paciência, dedicação e confiança
depositada.
Ao amigo Puca Huachi que sempre esteve disponível e contribuiu
consideravelmente com dicas e sugestões valiosas.
Aos demais amigos por todo apoio e por compartilhar comigo um momento tão
importante.
iii
RESUMO
O presente trabalho visa propor uma meta-heurística híbrida para o Problema de
Roteamento de Veículos com Frotas Heterogêneas (PRVFH), que é um problema de
otimização combinatória NP-difícil, e que se caracteriza pelo uso de uma frota limitada
composta por veículos distintos com capacidades distintas. O método híbrido
desenvolvido utiliza-se de um algoritmo memético associado ao componente otimizador
Vocabulary Building. A meta-heurística híbrida resultante foi implementada na
linguagem de programação C++ e os experimentos computacionais geraram bons
resultados em relação à meta-heurística aplicada isoladamente, comprovando a
eficiência do método proposto.
Palavras-chave: problema de roteamento de veículos com frotas heterogêneas, meta-
heurística híbrida, algoritmo memético, vocabulary building.
iv
ABSTRACT
This paper aims to propose a hybrid meta-heuristics for the Heterogeneous Fleet
Vehicle Routing Problem (HVRP), which is a combinatorial optimization problem NP-
hard, and is characterized by the use of a limited fleet consists of different vehicles with
different capacities. The hybrid method developed makes use of a memetic algorithm
associated with the component optimizer Vocabulary Building. The resulting hybrid
meta-heuristic was implemented in the programming language C + + and computational
experiments generated good results in relation to meta-heuristic applied in isolation,
proving the efficiency of the proposed method.
Keywords: heterogeneous fleet vehicle routing problem, hybrid meta-heuristic,
memetic algorithm, vocabulary building.
v
LISTA DE FIGURAS
1.1 Solução de um problema de Roteamento de Veículos. . . . . . . . . . . . . . . . . . . . . . 10
2.1 Cromossomo na forma binária. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.2 Cromossomo em forma de permutação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3 Processo de cruzamento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.4 Operador de mutação. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21
2.5 Estrutura básica de um algoritmo genético. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.6 Representação do processo de busca local. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23
2.7 Estrutura simplificada do algoritmo memético. . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.8 Estrutura básica de um algoritmo de busca local. . . . . . . . . . . . . . . . . . . . . . . . . 24
2.9 Estrutura do algoritmo memético. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.10 Estrutura do vocábulo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26
2.11 Estrutura do vocabulary building. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27
3.1 Exemplo de Splitting num grafo com 5 cidades. . . . . . . . . . . . . . . . . . . . . . . . . . .30
3.2 Algoritmo do Splitting para o PRVFH. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34
3.3 Cromossomos pais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.4 Início do processo do ox crossover. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36
3.5 Cromossomos resultantes do ox crossover. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.6 Esquema de realocação de um cliente em duas viagens. . . . . . . . . . . . . . . . . . . . .37
3.7 Esquema da troca de dois clientes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.8 Esquema do 1º caso do movimento 2-OPT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.9 Esquema do 2º caso do movimento 2-OPT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.10 Estrutura do algoritmo memético SMA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.11Exemplo de identificação de arestas comuns . . . . . . . . . . . . . . . . . . . . . . . . . . . .43
3.12Contração de vértices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.13Estrutura do algoritmo híbrido proposto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44
vi
LISTA DE TABELAS
3.1 Parâmetros do algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41
4.1 Instâncias e as melhores soluções conhecidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.2 Resultados obtidos pelo Prins (2009). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46
4.3 Resultados obtidos da implementação do algoritmo memético . . . . . . . . . . . . . . . .46
4.4 Resultados obtidos de outra implementação do algoritmo memético . . . . . . . . . . .47
4.5 Resultados obtidos do AM + VB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
4.6 Comparação entre os resultados obtidos do AM e AM + VB. . . . . . . . . . . . . . . . . 48
vii
LISTA DE ABREVIATURAS
PRV Problema de roteamento de veículos. . . . . . . . . . . . . . . . . . . . . . . . . . . .10
PCV Problema do Caixeiro Viajante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
PRVC Problema de roteamento de veículos capacitados. . . . . . . . . . . . . . . . . . 11
PRVJT Problema de roteamento de veículos com janelas do tempo. . . . . . . . . 11
SMA Second memetic algoritm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
PRVFH Problema de roteamento de veículos com frotas heterogêneas. . . . . . . .13
PRVFM Problema de roteamento de veículos com frota mista . . . . . . . . . . . . . 14
PRVFM-F Problema de roteamento de veículos com frota mista e custo fixo. . . . .15
PRVFM-V Problema de roteamento de veículos com frota mista e custo variável. 15
PRVFM-FV Problema de roteamento de veículos com frota mista com custo fixo e
variável. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
AG Algoritmo genético. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
AM Algoritmo memético. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
VB Vocabulary Building . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25
PMCRR Problema de menor caminho com restrições de recurso . . . . . . . . . . . . 31
viii
SUMÁRIO
1- Introdução. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .09
1.1- Objetivos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1.1-Objetivo Geral. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
1.1.2- Objetivos Específicos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
1.2- Estrutura da Dissertação. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2- O Problema de Roteamento de Veículos com Frotas Heterogêneas. . . . 13
2.1- Definição do problema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2-Descrição do PRVFH. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15
2.3-Formulação Matemática. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16
2.4-Revisão da Literatura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
2.5- Métodos de Resolução. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.5.1- Algoritmos Genéticos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19
2.5.2- Algoritmos Meméticos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22
2.5.2.1- Busca Local. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24
2.5.3- Vocabulary Building. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.5.4- Meta-heurísticas híbridas. . . . . . . . . . . . . . . . . . . . . . . . . . . . .27
3- Algoritmo Híbrido para o Problema de Roteamento de Veículos com
frotas Heterogêneas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29
3.1- Algoritmo memético para o PRVFH. . . . . . . . . . . . . . . . . . . . . . . . . . .29
3.1.1- Splitting para o PRV. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.1.2- Splitting para o PRVFH. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
3.1.3- Seleção por torneio Binário. . . . . . . . . . . . . . . . . . . . . . . . . . .35
3.1.4- Order crossover. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35
3.1.5- Busca Local. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37
3.1.6- Algoritmo memético (SMA). . . . . . . . . . . . . . . . . . . . . . . . . 39
3.2- Algoritmo Híbrido proposto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4- Resultados Computacionais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.1- Instâncias do problema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.2- Resultados Computacionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5- Conclusão e Sugestões para Trabalhos Futuros. . . . . . . . . . . . . . . . . . . 49
9
Capítulo I
1 Introdução
O crescimento na produção de uma determinada empresa que presta serviços
fazendo entregas de encomendas se deve a rapidez com que é feito o escoamento para
logística do melhor atendimento ao cliente.
Em qualquer ramo de negócios em que a atividade de transporte estiver inserida,
é fundamental a aplicação de um sistema de otimização computacional sobre o
roteamento de veículos o qual pode trazer como benefício um ganho significativo em
produtividade operacional, melhoria no sistema de distribuição de produtos e aumento
da satisfação dos clientes.
Encontramos a aplicação dos problemas de roteamento em diversas situações,
nas áreas de segurança, serviços, saúde e lazer, como no transporte escolar, no
recolhimento de lixo, distribuição de pão, distribuição de gás, patrulhamento policial e
outros. Golden et al (2002) destaca o uso para distribuição de bebidas para
supermercados, entrega de jornais para jornaleiros e entrega de derivados do leite dos
fazendeiros.
Em uma empresa transportadora de cargas, por exemplo, as decisões sobre o
planejamento de transporte para as entregas têm como principal foco os problemas de
roteamento de veículos. Por isso a aplicação de modelos para esses problemas se torna
ainda mais importante quando é essa a atividade principal exercida pela empresa.
A resolução deste tipo de problema gera benefícios econômicos significativos
em termos de redução do tempo de transporte e consequentemente redução de custo
operacional.
O roteamento de veículos objetiva encontrar uma maneira de visitar uma série de
clientes ao menor custo possível atendendo satisfatoriamente a todas as restrições do
problema.
10
O Problema de Roteamento de Veículos (PRV) consiste em encontrar rotas que
partam de um depósito, passem por um conjunto de cidades e retorne ao mesmo,
minimizando os custos e obedecendo ao fato de cada cliente ser visitado uma única vez.
A figura seguinte exemplifica um caso de problema de roteamento de veículos
com 11 clientes e 4 veículos idênticos disponíveis:
Figura 1.1: Solução de um Problema de Roteamento de Veículos.
O problema consiste em encontrar rotas, onde uma rota é o percurso feito por um
veículo, que começa e termina sua viagem no depósito, atendendo as necessidades de
entrega ou coleta dos pontos visitados (clientes), passando somente uma vez em cada
cliente.
Segundo Cordeau et al (2007) o Problema de Roteamento de Veículos (PRV) é o
mais popular dentro do campo de otimização combinatória, além de ser uma
generalização do também bastante conhecido Problema do Caixeiro Viajante (PCV). O
PCV pode ser visto simplificadamente como um PRV de apenas um veículo.
O problema de roteamento de veículos tem uma vasta literatura. Desde que foi
introduzido por Dantzig e Ramser (1959), várias heurísticas (construtivas e de melhoria)
e meta-heurísticas tem sido propostas para a resolução do mesmo, dentre as quais as
mais famosas são a de Clarke e Wright (1964), Gillett e Miller (1974), Fisher e
Jaikumar (1981), e as meta-heurísticas algoritmo genético, algoritmo memético, busca
tabu, entre outros (Laporte, 2007).
Existem vários aspectos a serem considerados, os quais sejam: a carga total a ser
transportada, o tipo de frota se é homogênea ou heterogênea, a quantidade de veículos
11
disponíveis, se a frota é limitada ou ilimitada, a quantidade de clientes a serem
atendidos, se existem restrições de tempo para a entrega, e outros.
Dentre as variantes do PRV, encontramos o problema de roteamento de veículos
capacitados (PRVC), o problema de roteamento de veículos com janela do tempo
(PRVJT), o problema de roteamento com múltiplos depósitos, entre outros.
O caso em que a frota é composta por veículos distintos trata-se de um problema
de roteamento de veículos com frotas heterogêneas, o qual é o objeto de estudo deste
trabalho.
Este problema é bastante encontrado em situações reais, pois geralmente as
empresas possuem uma frota de veículos distintos.
Para este problema, foi desenvolvido um método híbrido que utiliza um dos
algoritmos meméticos propostos por Prins (2009), que proporciona excelentes
resultados, e que combinado a um componente otimizador, o vocabulary building,
promove melhorias. O algoritmo memético utilizado chama-se SMA (second memetic
algoritm) e se utiliza do procedimento Splitting, que permite avaliar as soluções
(exibidas em cromossomos) construindo um grafo auxiliar que particiona o problema.
O procedimento Splitting é utilizado na literatura para algumas variantes do
problema de roteamento de veículos. Uma revisão bem detalhada deste procedimento e
suas aplicações encontram-se em Duhamel, Lacomme e Prodhon (2011).
1.1 Objetivos
1.1.1 Objetivo Geral
Este trabalho tem o objetivo de desenvolver um algoritmo memético que
associado a técnica vocabulary building propõe resolver o problema de roteamento de
veículos com frotas heterogêneas. Vale salientar que esta técnica foi aplicada
anteriormente apenas para um caso particular de roteamento de veículos, o problema do
caixeiro viajante.
1.1.2 Objetivos Específicos
Os objetivos específicos a serem atingidos são os seguintes:
12
1. Fazer uma revisão de literatura sobre as metodologias utilizadas para resolver
o problema de roteamento de veículos com frotas heterogêneas;
2. Explicar o funcionamento das meta-heurísticas Algoritmo Genético e Memético, e da
técnica vocabulary building;
3. Desenvolver um método capaz de resolver de maneira eficiente o problema em
questão.
1.2-Estrutura da Dissertação
O trabalho está organizado em cinco capítulos conforme descrito. No capítulo 2
é apresentado o problema de roteamento de veículos com frotas heterogêneas, com sua
definição, formulação matemática e a revisão da literatura.
Ainda neste capítulo é feita uma abordagem sobre os algoritmos genético e
memético, dando especial destaque a esta última meta-heurística, que será utilizada com
o componente otimizador vocabulary building, dando origem a uma nova meta-
heurística hibridizada para resolver o problema em questão. O capítulo 3 descreve
detalhadamente o algoritmo proposto neste trabalho.
O capítulo 4 apresenta os resultados obtidos com o algoritmo proposto e a
comparação do mesmo com algoritmos existentes.
No capítulo 5 descreve-se a conclusão obtida do presente trabalho. E na parte
final do trabalho é visto as referências bibliográficas.
13
Capítulo II
2 O Problema de Roteamento de Veículos com
Frotas Heterogêneas
O problema de roteamento de veículos com frotas heterogêneas (PRVFH) é uma
variante clássica do problema de roteamento de veículos (PRV) em que os clientes são
servidos por frotas de veículos com capacidades distintas, custos e despesas variáveis
conforme Gendreau et al (1999).
A solução do problema determina basicamente a melhor composição para uma
frota heterogênea de veículos e o menor percurso seguido pelos veículos da frota para
atender um conjunto de clientes.
O número de veículos disponíveis na frota, a capacidade de carga e a distancia
entre os clientes são as variáveis que oferecem condições para minimizar a soma dos
custos associados aos veículos e os custos associados ao percurso das rotas.
2.1 Definição do problema
O problema de roteamento de veículos com frotas heterogêneas (PRVFH)
consiste em definir rotas para uma série de clientes que serão atendidos por uma frota
composta por veículos distintos, tal que o custo total seja minimizado e satisfaça as
seguintes condições:
I) As rotas começam e terminam no depósito;
II) Cada cliente é visitado uma única vez;
III) A demanda total da rota não pode exceder a capacidade do veículo.
De acordo com Belfiore e Yoshikazi (2006), o custo total do problema
corresponde ao custo fixo e ao custo variável de roteirização, no qual aquele se refere à
14
aquisição e manutenção da frota, e este se refere aos custos em relação à distância
percorrida.
O PRVFH (do inglês heterogeneous fleet vehicle routing problem) é classificado
como NP – difícil de acordo com Baldacci, Batarra e Vigo (2007). Essa classificação
provém da teoria da complexidade de algoritmos, o que significa que esse problema não
possui solução exata em tempo polinomial, isto é, em tempo computacional aceitável.
Para tratar de problemas NP-difíceis, utilizamos as heurísticas que são
ferramentas que nos auxiliam na busca de soluções viáveis. Porém, as heurísticas não
garantem a otimalidade, pois se prendem a ótimos locais, isto é, remetem à soluções
promissoras apenas num subconjunto do espaço. Para isso usamos as meta-heurísticas,
que também não garantem a otimalidade, mas fogem de ótimos locais, varrendo regiões
que possuem melhores soluções.
Para resolvermos este problema, utilizaremos uma meta-heurística chamada
algoritmo memético, que é um algoritmo mais evoluído que o genético, pois utiliza a
busca local.
O algoritmo genético é uma meta-heurística criada por John Holand em 1970
que imita os processos naturais e que se utiliza de operadores como cruzamento e
mutação, a fim de promover alterações que tornem os indivíduos mais aptos,
promovendo assim a evolução natural.
Já o algoritmo memético é uma meta-heurística que se baseia no algoritmo
genético e introduz o uso da técnica de busca local, que promove melhorias nas
soluções.
A busca local é uma técnica que procura uma solução melhor na vizinhança da
solução atual. Consideramos vizinhança de uma solução o conjunto de soluções com
características próximas desta.
Existem outras meta-heurísticas propostas para resolução do problema, como
por exemplo: a busca tabu, simulated annealing, etc.
O PRVFH é um problema bastante interessante devido a sua vasta
aplicabilidade, e que leva vantagem em relação ao PRV por admitir uma frota de
veículos distintos com capacidades distintas.
Na literatura existem muitas variantes do PRVFH. O problema de roteamento de
veículos com frotas mistas (PRVFM) é um caso especial do PRVFH, em que o número
de veículos de cada tipo não é limitado (Prins, 2009).
15
Além disso, o PRVFM possui três versões conhecidas na literatura por:
PRVFM-F, onde possui somente custos fixos; PRVFM-V com somente custos variáveis
e PRVFM-FV, com ambos os custos (Prins, 2009).
2.2 Descrição do PRVFH
Podemos definir o PRVFH de acordo com Baldacci e Mingozzi (2009) como
segue:
Um grafo G= (V’, E) é dado, onde V’= {0, 1, .. , n}é o conjunto de n+1 vértices
e E é o conjunto de arestas. Vértice 0 representa o depósito, enquanto o conjunto de
vértices restantes V= V’\ {0} correspondem aos n clientes. Cada cliente i ϵ V requer
uma provisão de qi unidades do depósito (nós assumimos q0 = 0). Uma frota de veículos
heterogênea está estacionada no depósito e é usada para prover os clientes. A frota de
veículos é composta de um conjunto M= {1, ..., m} de m tipos diferentes de veículos.
Para cada tipo k ϵ M, Uk veículos estão disponíveis no depósito, cada um com
capacidade igual à Qk. Com cada tipo de veículo está associado um custo fixo Fk. Para
cada aresta {i, j} ϵ E e para cada veículo de tipo k ϵ M, um custo de roteamento dijk é
dado.
Uma rota R= {0, i1, ..., ir, 0} executada por um veículo do tipo k, é um ciclo
simples em G atravessando o depósito e os clientes { i1, ..., ir } ⊆ V, com r ≥ 1, tal que a
demanda total dos clientes visitados não excede a capacidade Qk, isto é,
.
Note que se r = 1, então a rota R representa uma rota R={0, i1, 0} de apenas um
cliente. O custo de uma rota é igual à soma dos custos de roteamento e do custo fixo do
veículo associado. O PRVFH consiste em determinar um conjunto de possíveis rotas de
custo total mínimo tal que cada cliente seja visitado por um único veículo e o número de
rotas executadas pelos veículos de tipo k não é maior que Uk, k ϵ M.
16
2.3 Formulação Matemática
Seja Rk o conjunto indexado de todas as possíveis rotas do veículo de tipo k ϵ M
e seja R = .
Com cada rota L ϵ Rk está associado um custo de roteamento CL
k. Seja Ri
k ⊆ R
k
o subconjunto indexado das rotas de um veículo de tipo k de um cliente i ϵ V. Nós
usamos RLk para indicar o subconjunto de clientes que compõe a rota L ϵ R
k.
Seja XLk uma variável binária que é igual a 1 se e somente se a rota L ϵ R
k é
escolhida na solução. A formulação é descrita abaixo:
(1)
Sujeito a:
A equação (1) exibe a função objetivo que representa a minimização do
somatório dos custos das rotas que compreendem os custos fixos dos veículos
associados e os custos de roteamento. A restrição (2) especifica que cada cliente i ϵ V
não é visitado por mais de um veículo. A restrição (3) impõe um limite na quantidade
de veículos de cada tipo que pode ser usado.
(2)
(3)
(4)
17
2.4 Revisão da Literatura
Os primeiros algoritmos propostos para resolver o problema de roteamento de
veículos com frotas heterogêneas surgiram de adaptações dos algoritmos clássicos de
roteamento de veículos.
De acordo com Prins (2009), a literatura existente sobre problemas mistos e
heterogêneos é confusa.
Consideraremos que o problema de roteamento de veículos com frota mista
(PRVFM) é composto por uma frota de veículos distintos, porém com quantidade
ilimitada. O problema de roteamento de veículos com frotas heterogêneas também
possui uma frota com veículos distintos, mas com um número limitado de veículos.
Portanto, a revisão da literatura a seguir exibirá apenas os trabalhos feitos a
respeito de frotas heterogêneas.
Taillard (1999) propõe um método chamado geração de colunas, onde são
resolvidos sucessivos VRPs, isto é, para cada tipo de veículo, é resolvido um problema
de roteamento de veículos, através do uso do procedimento de memória adaptativa,
além de fazer uso da busca tabu desenvolvida por Taillard (1993). O método usado para
resolver VRPs homogêneos foi proposto inicialmente por Taillard (1994) e publicado
posteriormente por Rochat e Taillard (1995).
Tarantilis et al (2003) propõe uma variante do método threshold accepting,
chamado list based threshold accepting (LBTA), que é um método de busca estocástico.
Esse método possui estrutura simples e é guiado nos espaço de soluções através de um
parâmetro chamado threshold.
Tarantilis et al (2004) propõe o algoritmo BATA (back-tracking adaptive
threshold accepting), que é uma meta-heuristica baseada em busca local que pertence a
classe de threshold accepting. A inovação do algoritmo BATA em relação ao threshold
accepting é o fato do parâmetro threshold não somente ser reduzido durante o processo,
mas também aumentado ocasionalmente.
Li et al (2007) adaptaram o algoritmo record-to-record travel (HRTR), variante
determinística do método simulated annealing, utilizado anteriormente para resolver
PRVs. Este método gerou seis novas melhores soluções, comparados aos propostos
anteriormente.
18
Baldacci e Mingozzi (2009) propuseram um algoritmo exato para o PRVFH e
para outras variantes do PRV, que usa três tipos de procedimentos fundados na PL-
Relaxação e na relaxação Lagrangeana da formulação matemática.
Prins (2009) exibe dois algoritmos meméticos, um para o problema de
roteamento de veículos com frotas heterogêneas e outro para o problema de roteamento
de veículos com frotas mistas. Seus algoritmos propostos resolvem os três tipos de frota
mista, que compreende a que possui apenas o custo fixo, apenas o custo variável e
ambos os custos.
2.5 Métodos de resolução
O PRVFH é um problema da área de otimização, em que a modelagem tende a
maximizar ou minimizar a função objetivo e como tal consiste na busca da melhor
solução viável respeitando as restrições impostas pelo problema.
Para resolvê-lo, usaremos as heurísticas e meta-heurísticas, que nos dão soluções
aproximadas. A heurística é uma técnica que procura soluções satisfatórias em um
período de tempo razoável, considerando o objetivo do problema e as restrições
empregadas.
As meta-heurísticas são heurísticas que possuem ferramentas que permitem a
busca de regiões mais promissoras, escapando de ótimos locais.
De acordo com Osman e Laporte (1996), uma meta-heurística é formalmente
definida como um processo de geração iterativo, que guia uma heurística subordinada,
combinando inteligentemente diferentes conceitos para explorar o espaço de busca, o
qual deve ser modelado para um problema específico.
Neste contexto, a meta-heurística utilizada é representada pelo algoritmo
memético. Juntamente com ela, utilizaremos a técnica vocabulary building.
Os algoritmos meméticos, também chamados de algoritmos genéticos híbridos
(Prins, 2009), são basicamente algoritmos genéticos aperfeiçoados, pois se utilizam da
técnica de busca local, a qual é interpretada como uma evolução cultural e social dos
indivíduos na população.
O Vocabulary Building foi idealizado por Fred Glover (1992) e segundo Leite
(2006) “se baseia na transformação de fragmentos de soluções em soluções completas”.
19
2.5.1 Algoritmo Genético
O algoritmo genético (AG) é um método de resolução de problemas de
otimização que imita os mecanismos da evolução natural, segundo John Holand (1970).
Baseia-se na teoria de Darwin, que propõe que indivíduos com características
favoráveis têm mais chances de sobreviver e transmitir essas características para seus
descendentes (Bjarnodóttir, 2004).
Podemos descrever este algoritmo a partir de um conjunto de soluções, chamado
de população, onde são definidos critérios de seleção para que ao final de muitas
gerações, tenhamos obtido indivíduos mais aptos.
Essas soluções são representadas por cromossomos, que são estruturas de dados
constituídos de genes, que guardam as informações genéticas das soluções, permitindo
que evoluam sem perder as características das soluções anteriores. As formas mais
importantes para representação dos cromossomos são a forma binária ou através de
permutação (Guedes, 2006).
A figura 2.1 exemplifica um cromossomo na forma binária:
Figura 2.1: Cromossomo na forma binária.
A figura 2.2 exibe um cromossomo na forma de permutação, onde cada gene
identifica a posição de uma cidade na rota. O cromossomo representado por n clientes
servidos por m veículos, tem a forma de um vetor de comprimento n, como mostrado na
figura.
Figura 2.2: Cromossomo em forma de permutação.
De uma maneira geral, inicia-se o algoritmo com a geração da população inicial
aleatoriamente ou através de uma heurística construtiva (Girão, 2008), e segue-se para o
1 0 1 0 0
2 5 4 1 3
20
processo de avaliação, onde os indivíduos mais adaptados serão escolhidos para a etapa
seguinte (nova população).
Cada indivíduo terá a sua função de aptidão, chamada fitness, que indica a
qualidade de cada solução. A escolha de uma função de aptidão adequada influencia no
bom desempenho do algoritmo (Santos et al. 2007).
Essa função atribui uma nota a cada cromossomo, que depois será utilizada pelo
operador de seleção. A função de aptidão deve ser específica para cada problema, pois
segue o objetivo e as restrições do mesmo (Rosa e luz, 2009).
A fase de seleção fornece aos indivíduos da população preferência para o
processo de reprodução, garantindo que os indivíduos transmitam suas características
(Schneider, 1998).
Utilizamos os operadores genéticos, cruzamento e mutação, para que haja uma
intensificação e diversificação da população. O cruzamento corresponde à combinação
de dois cromossomos considerados aptos através da sua fitness. Os que não forem aptos
serão descartados.
O cruzamento ocorre da seguinte maneira: parte dos cromossomos são trocados
a partir de pontos aleatórios, chamados pontos de corte, e a partir deles, geramos dois
novos cromossomos que receberão características dos dois cromossomos iniciais,
chamados pais.
A figura 2.3 exibe o processo de cruzamento com um ponto de corte:
Pai 1
Pai 2
Filho 1
Filho 2
Figura 2.3: Processo de cruzamento.
1 1 0 1
1
0
0 1 0
0 0 0 1 1
1
1 0 0 1 0
21
O segundo operador, a mutação, promove alterações nas características dos
indivíduos, introduzindo modificações na informação genética e tem a intenção de
evitar que a solução caia em ótimos locais. Segundo Mognon (2004) “A mutação
também serve para introduzir pontos novos e inexplorados no domínio de busca do
algoritmo.”
A figura 2.4 abaixo ilustra o operador de mutação:
Figura 2.4: Operador de mutação.
Finalmente, fazemos o processo de atualização, acrescentando os indivíduos
gerados à nova população. Observe que o tamanho da população não é alterado, já que
cromossomos com baixa aptidão são descartados.
Enquanto a população gerada não for satisfatória, repetimos esses procedimentos
a fim de termos os indivíduos mais aptos.
O algoritmo genético possui a seguinte estrutura:
Figura 2.5: Estrutura básica de um Algoritmo Genético.
Início Geração da população inicial;
Avaliação da população;
Enquanto o critério de parada não for satisfeito faça
Início Selecionar os pais;
Aplicar operador de cruzamento;
Aplicar operador de mutação;
Avaliação da população;
Fim;
Fim.
1 0 0 0 1
1 1 1 0 0
22
2.5.2 Algoritmo Memético
O algoritmo memético (AM), assim como o algoritmo genético, pertence à
classe de meta-heurísticas que exploram uma população de soluções a cada iteração,
originando novas soluções através da combinação de soluções anteriores. De acordo
com Moscato e Cotta (2005) o algoritmo memético é um importante mecanismo de
resolução de problemas de otimização combinatória.
O termo memético vem de meme, unidade que exerce o mesmo papel do gene
atuando no contexto de evolução cultural (Moscato e Cotta, 2005).
O meme funciona como transmissor de conhecimento, levando informação à
nova população que será gerada através da comunicação entre os indivíduos.
O algoritmo memético baseia-se na evolução cultural dos indivíduos, onde
segundo Moscato e Cotta (2003), essa informação não é transmitida inalterada entre os
indivíduos, ela é processada e reforçada pela comunicação entre eles, enquanto que o
genético, preocupa-se com a evolução biológica.
Segundo Moscato e Cotta (2005), os algoritmos meméticos podem ser
interpretados como uma estratégia de busca em que a população de agentes cooperam e
competem.
Neste contexto, agentes funcionam como os indivíduos da população.
A estrutura do algoritmo memético é semelhante a do algoritmo genético, pois se
utiliza dos mesmos operadores de seleção, combinação e mutação, de acordo com
Coelho (2006). A única diferença ocorre pela inclusão da busca local, que promove
uma otimização dos agentes.
Os operadores genéticos (combinação e mutação), geralmente fornecem
soluções fora do espaço de ótimo local. A inserção da busca local promove uma reparo
nessas soluções, sendo aplicadas aos filhos antes de serem inclusos na população, o que
promove uma melhoria nos resultados (Radcliffe e Surry, 1994).
A figura 2.6 a seguir ilustra o que acontece com a inserção da busca local: Os
pais A e B produziram o filho C, que após ser otimizado pela busca local, resulta no
filho D.
23
Figura 2.6: Representação do processo de busca local.
O objetivo desta técnica consiste em encontrar um ótimo local através de uma
busca na vizinhança das soluções e posteriormente encaminhá-lo para as etapas do
algoritmo genético (Moscato e Norman, 1992).
O algoritmo memético possui a seguinte estrutura:
Figura 2.7: Estrutura simplificada do algoritmo memético.
Início Geração da população inicial;
Otimização da população (busca local);
Avaliação da população;
Enquanto o critério de parada não for satisfeito faça
Início Selecionar os pais;
Aplicar operador de cruzamento;
Aplicar operador de mutação;
Otimização da população (Busca local);
Avaliação da população;
Fim;
Fim.
24
2.5.2.1 Busca Local
Um algoritmo de busca local promove a busca de uma solução mais promissora
numa vizinhança desta solução. Definimos a vizinhança de um elemento como um
conjunto de elementos que possuem características próximas a ele.
Segundo Laporte (2007), a vizinhança de um elemento st, representada por N(st),
é o conjunto de todos os elementos obtidos de st, a partir de modificações na solução
corrente, como por exemplo, a troca de um vértice dessa solução por outro.
Essa heurística se inicia com uma solução inicial s0, e move uma solução de
valor f(st) para outra existente dentro de N(st). De acordo com Moscato e Cotta (2003),
essa solução inicial pode ser escolhida aleatoriamente ou através de outro algoritmo.
Essa busca pela melhor solução termina quando encontramos a melhor solução
conhecida, representada por s*, ou quando um critério de parada for satisfeito.
Abaixo vemos o esquema do algoritmo de busca local:
Figura 2.8: Estrutura básica de um algoritmo de busca local.
Início
Selecione uma solução s0;
Enquanto f(s) < f(s0), com s ϵ N(s0)
Início Selecione s ϵ N(s0) tal que f(s) < f(s0);
s0 ← s;
Fim
Fim
25
Podemos exemplificar a estrutura do algoritmo memético através da figura 2.9,
onde a busca local se encontra em destaque:
Figura 2.9: Estrutura do algoritmo memético. Fonte: Neto (2009).
2.5.3 Vocabulary Building
O Vocabulary Building (VB) é uma técnica criada por Glover (1992), cuja idéia
principal é identificar fragmentos significantes de soluções que servirão de base para
futuras combinações. (Glover, 1996).
De acordo com Glover, Laguna e Martí (2000), a técnica tem este nome devido
à analogia com o processo de união de palavras para construir sentenças e parágrafos
úteis, onde as construções valiosas em cada nível podem ser tanto visualizadas como
representadas por “palavras em uma ordem mais elevada”.
O Vocabulary Building consiste em obter fragmentos de soluções que
combinados gerem soluções completas e, segundo Glover, Laguna e Martí (2000), a
busca destes fragmentos ajuda a evitar a explosão combinatorial e a necessidade de
reinventar um modelo de solução parcial que gere boas soluções completas.
26
A técnica consiste de dois objetivos principais, segundo Glover (1996), que são
a identificação de boas soluções parciais e de caminhos dentro do espaço de vizinhança
que levem a produção de soluções completas.
A essas soluções parciais, damos o nome de vocábulo. De acordo com Glover,
Laguna e Martí (2000) o vocabulary building trabalha com elementos primitivos e
elementos compostos. No contexto de roteamento de veículos, esses elementos
correspondem a cidades e a trechos de cidades.
Na figura abaixo encontramos a estrutura do vocábulo:
Figura 2.10: estrutura do vocábulo. Fonte: Guedes (2006)
O campo que contém “:” (dois pontos) indica o histórico de construção do
vocábulo. O círculo que é apontado por esse campo é denominado árvore de quebra. O
campo que contém “#” indica a fitness do vocábulo.
De acordo com Guedes (2006), os vocábulos identificados como úteis serão
armazenados numa estrutura chamada pool de vocábulo. Esse conjunto será atualizado
de acordo com o surgimento de novos vocábulos interessantes para o problema.
O vocabulary building gera soluções parciais através de processos destrutivos e
construtivos, quebrando boas soluções e as reconstruindo através de heurísticas em
soluções completas (Glover, Laguna e Martí, 2000).
A princípio, soluções mais promissoras são armazenadas numa estrutura
chamada conjunto elite. Através de métodos destrutivos, essas soluções serão
decompostas em soluções parciais.
Dessas soluções, vocábulos presentes em todos os indivíduos serão armazenados
no pool de vocábulos. A idéia é identificar bons trechos, isto é, que aparecem com
freqüência em soluções de boa qualidade. Se um trecho está presente em várias soluções
boas, ele possui grande chance de estar em uma solução ótima.
Esses vocábulos serão combinados exata ou heuristicamente a fim de gerar
soluções parciais melhores, que resultarão em soluções completas de melhor qualidade.
27
Podemos exemplificar sua estrutura de acordo com a figura 2.11 abaixo:
Figura 2.11: Estrutura do vocabulary building.
2.5.4 Meta-heurística Híbrida
Meta-heurísticas são de grande importância na área de otimização combinatória,
já que são ferramentas que resolvem de forma aproximada os problemas dessa área. Nos
últimos anos elas têm sido combinadas a várias idéias, o que deu origem ao termo meta-
heurísticas híbridas (Raidl, 2006).
Ainda de acordo com Raidl (2006), as meta-heurísticas híbridas podem
combinar diferentes meta-heurísticas, meta-heurísticas com algoritmos específicos para
o problema em foco, meta-heurísticas com outras técnicas de Pesquisa Operacional ou
Inteligência Artificial.
Fragmentos de
soluções Construção
Soluções
completas Decomposição
Filtro
Filtro
Filtro
Filtro
28
Essa hibridização é vantajosa, pois através dela geramos sistemas com melhor
desempenho e que utilizam os benefícios das técnicas aplicadas individualmente (Raidl,
2006)
Neste trabalho o hibridismo está definido a partir da combinação de uma meta-
heurística chamada algoritmo memético com a técnica de otimização vocabulary
building.
As meta-heurísticas híbridas podem ser classificadas de acordo com o nível de
hibridização, a ordem de execução e a estratégia de controle (Raidl, 2006).
O nível de hibridização subdivide-se em alto nível, onde os algoritmos
originais conservam sua identidade individual e cooperam através de uma interface bem
definida, e o baixo nível, onde os algoritmos dependem fortemente um do outro.
A ordem de execução pode ser seqüencial, onde um algoritmo é executado
depois do outro e só é passada informação em uma direção; intercalado, onde a cada de
um algoritmo, o outro é executado; e paralelo, onde os algoritmos são executados em
paralelo e a informação pode ser passada em qualquer direção.
A estratégia de controle pode ser integrada, onde um algoritmo é componente
de outro algoritmo e colaborada, onde os algoritmos interagem, mas não são partes um
do outro.
29
Capítulo III
3 Algoritmo Híbrido para o Problema de
Roteamento de Veículos com frotas
Heterogêneas
Para este trabalho usaremos um dos algoritmos meméticos propostos por Prins
(2009) chamado SMA. Ele se utiliza do procedimento de splitting que permite avaliar as
soluções, representadas por cromossomos. Para entendermos como funciona o
procedimento splitting para o PRVFH, vamos entender primeiro como ele se processa
num contexto de roteamento de veículos. Posteriormente, descreveremos os operadores
utilizados e finalizaremos com o algoritmo proposto.
3.1 Algoritmo Memético para o PRVFH
3.1.1 Splitting para o problema de roteamento de veículos
Splitting é um procedimento que visa particionar uma rota gigante em rotas
menores que serão exibidas em um grafo auxiliar. Uma rota gigante é vista como um
percurso de um único veículo que parte do depósito e retorna ao mesmo depois de
atender todos os clientes. Esse contexto se refere ao bastante conhecido Problema do
caixeiro viajante (PCV).
A partir daí, vamos subdividir essa rota em rotas menores, que devem respeitar
as restrições impostas pelo problema. Cada rota formada é vista como um caso
particular de PCV.
As rotas formadas devem obedecer às seguintes condições:
( 6 )
( 5 )
30
Onde Ci,..., Cj é o conjunto de clientes que formam a rota do vértice i ao j, Wij a
demanda total do cliente C1 a Cj, Q a capacidade do veículo que serve as cidades.
A primeira equação garante que a demanda das cidades não exceda a capacidade
dos veículos. A segunda equação afirma que o custo Zij da subseqüência equivale ao
comprimento da mesma, Lij, que compreende a distância do depósito a cidade i, da
cidade i a cidade j, e o retorno da cidade j ao depósito.
Essas rotas vão compor um grafo auxiliar acíclico H= (X, A) com n+1 vértices,
numerados de 0 a n, onde o vértice 0 representa o depósito.
Um ótimo Splitting é dado pelo caminho de custo mínimo do vértice 0 ao vértice
n em H.
Abaixo vemos o Splitting aplicado a um PRV com 5 (cinco) clientes, de custos
indicados nas arestas e demandas dentro de parênteses próximos aos clientes.
Possível solução
b(4) 30 c(4) b c
25
10 d(2) 60 d
25 30 55
40 15 a 90
a(5) 20
35 e (7) e
Grafo Auxiliar
ab:55 cd:95
40 115 150
a:40 b:50 c:60 d:80 e:70 205
0
bc:85 bcd:120 de:90
Figura3.1: Exemplo de splitting num grafo com 5 clientes . À direita vemos o exemplo
de uma possível solução. Abaixo vemos o grafo auxiliar que indica em negrito a melhor
solução, isto é, solução com menor valor.
55
31
3.1.2 Splitting para o PRVFH
O procedimento de Splitting para o PRVFH é um pouco mais complexo. O grafo
auxiliar H possui um arco para cada viagem (Ci, Ci+1,..., Cj) tal que Wij ≤ Qt, isto é, a
demanda total Wij do cliente Ci a Cj não excede a capacidade do veículo, Qt.
No geral, a demanda de clientes que precisam de um veículo do tipo k ou maior
não deve exceder a capacidade total desses veículos. De acordo com o Prins (2009), os
tipos de veículos são organizados em uma ordem crescente de capacidade.
Para cada tipo de veículo k, 1≤ k ≤ t ( 7 )
( 8 )
Um ótimo Splitting corresponde ao caminho de menor custo do vértice 0 a n em
H, com não mais do que ak arcos para cada veículo de tipo k. Isto é, na verdade estamos
utilizando o Problema de menor caminho com restrições de recurso (PMCRR), onde
cada tipo de veículo pode ser visto como um recurso disponível em ak unidades e cada
arco requer uma unidade de um tipo de veículo compatível.
Para resolvermos este problema, utilizaremos o método de programação
dinâmica, que nada mais é que uma técnica de otimização que utiliza uma equação
recursiva para particionar um problema difícil em problemas menores, mais tratáveis.
Seja P(j, x1,..., xt) o custo do ótimo splitting para a subseqüência (C1, C2,...,Cj),
com 1≤ j ≤ n e uma frota mista com xk veículos de cada tipo k, 0 ≤ xk ≤ ak e 1≤ k ≤ t.
Este problema pode ser definido pelas seguintes equações recursivas:
P(0, x1, ..., xt) = 0, 1≤ k ≤ t, 0 ≤ xk ≤ ak ( 9 )
j > 0, P(j, x1,..., xt) = min ( P( i, x1,…,xk-1, …, xt) + Zijk / i ≤ j, Wij ≤ Qk,
0 < xk ≤ ak) ( 10 )
32
A equação (9) indica que o custo em relação ao depósito é zero. A equação (10)
exprime o custo de ir do vértice 0 ao vértice j, que é o menor valor entre o custo de
chegar em i adicionado do custo de ir de i a j com o veículo k (Zijk).
Seja ψ o número máximo de distintos vetores x, isto é, o número máximo de
vetores do tipo ( x1, x2,..., xt ) distintos. Então
(11)
A equação (11) é válida, pois para um vetor x = ( x1, x2,..., xt ) com 0 ≤ xk ≤ ak,
temos o vetor a = ( a1, a2, ..., at ) definindo o limite superior de cada posição do vetor x,
com 0 ≤ ak ≤ k. Então existem ak + 1 valores diferentes que xk pode assumir. Como o
vetor x tem t posições, para a posição 1 (x1), tem-se a1 + 1 maneiras, para x2 tem-se a2 +
1 maneira, e assim por diante. O que resulta na equação (7).
Abaixo vemos um exemplo com 3 (três) tipos de veículos com disponibilidades
de: 2 veículos para o 1º tipo; 1 veículo para o 2º tipo e 3 veículos para o 3º tipo.
Exemplo: Quantos são os possíveis vetores x distintos?
x = ( x1, x2, x3 ) , t=3 e a = ( 2, 1 ,3).
x1 poderia assumir: ( a1+1) = 2+1= 3 valores, que seriam 0, 1 e 2.
x2 poderia assumir: ( a2+1) = 1+1= 2 valores, que seriam 0, 1.
x3 poderia assumir: ( a3+1) = 3+1= 4 valores, que seriam 0, 1, 2 e 3.
Então poderíamos ter 3 * 2 * 4 = 24 vetores distintos.
Os cálculos podem ser organizados usando uma matriz de rótulos Y, de ordem
(n + 1) x ψ. As linhas indexadas de 0 a n correspondem aos clientes e as colunas
indexadas de 0 a ψ – 1 correspondem aos vetores que indicam as quantidades de carros
usados do tipo 1 ao tipo t, para cada coluna.
Um rótulo Yjh representa o menor caminho do vértice 0 a j no grafo auxiliar H.
Cada rótulo guarda a informação referente ao menor caminho usado para chegar
naquele vértice, que é o custo (Yjh.Z) e o vetor que representa a frota parcial usada para
aquele caminho (Yjh.x).
Para facilitar o manuseio e diminuir a complexidade, usa-se uma função h que
associa um vetor referente a uma coluna a um número inteiro. Então em vez de trabalhar
33
com colunas indexadas por vetores, usa-se números que representam esses vetores.
Assim, usa-se a matriz Y de colunas numeradas de 0 a ψ.
Essa função h pode ser calculada segundo as seguintes equações recursivas:
h (x, 0) = 0 ( 12 )
h( x, k) = h(x, k-1)(ak +1) +xk, para 0≤ k ≤ t. ( 13 )
Para melhor entendimento de h(x), vamos utilizar um exemplo com a = (2, 3, 1).
Se fossemos avaliar os possíveis vetores de x, e organizássemos os vetores
variando da última casa, x3, para a primeira, x1, teríamos:
(0, 0, 0) (0, 0, 1); (0, 1, 0) (0, 1, 1) (0, 2, 0) (0, 2, 1) (0, 3, 0) (0, 3, 1); (1, 0, 0)(1, 0, 1)...
Observe que os vetores poderiam ser organizados de outra forma. A quantidade
total de vetores distintos seria (2+1)*(3+1)*(1+1) = 24. Para se chegar nas variações de
x1 teríamos que passar por todas as combinações possíveis para a segunda e terceira
casa. Ou seja, para se chegar em x1 é preciso ter passado por (a2 +1)*(a3+1) números.
Para facilitar, sejam A1= a1 +1, A2= a2 +1 e A3= a3 +1.
Então, para se ter x1 = p, precisamos passar por p* A2* A3. O mesmo se quisesse
chegar em p na segunda casa: passaríamos por p* A3 números primeiro. E assim por
diante. Então para se ter um número p na primeira casa (x1) de um vetor de t posições,
teríamos que passar por p* A2* A3*...*At.
Agora, se quiséssemos chegar em p na primeira casa e r na segunda casa,
teríamos que passar por p* A2*...*At + r* A3*...* At. Então
A seguir vê-se um exemplo que simplifica a obtenção da função h(x):
(14)
34
Exemplo: Para t=3:
h(x1,x2,x3) = x1 *A2*A3 + x2*A3+ x3 = A3*(x1*A2 + x2) + x3
Chamemos de h(x,k).
h(x,3) = A3*(h (x,2)) + x3
Por indução chegamos em h(x,k) = Ak* h( x,k-1) + xk = h(x, k-1)* (ak+1) + xk.
Então, tudo isso foi para entendermos o significado dessa fórmula.
Se quiséssemos saber o número inteiro que representará o vetor (2,1,1) com a = (2,3,1),
teríamos:
h(x,3) = h(x, 3)*(a3 + 1) + x3 = [2*(a2 + 1) + 1]*(a3 + 1)+x3= [2*4 + 1]*2 + 1= 19.
Após o cálculo de h, podemos então observar o funcionamento do Splitting. A figura
3.2 descreve o algoritmo do Splitting:
Figura3.2: Algoritmo Splitting para o PRVFH.
A matriz Y é inicializada com todos os vetores x recebendo 0, os custos dos
rótulos na fila 0 com 0 e os custos dos outros rótulos com infinito. Então, para cada
vértice i, para cada arco do grafo H, cada rótulo Yip usado por i, e cada possível veículo
Inicializa matriz Y
Para t:= 0 a n faça
Para cada arco (i,j) de H faça
Para p:= 0 a ψ – 1 com Yip.Z < ∞ faça
Para k:= 1 a t com ( Yip.xk < ak ) e ( Wij ≤ Qk ) faça
U := Yip;
U.xk := U.xk + 1;
U.Z := U.Z + fk + vk. Lij;
Calcule h para o consumo do vetor U.x;
Se U.Z < Yjh.Z então
Yjh := U;
Fim;
Fim;
Fim;
Fim.
35
do tipo k, um rótulo U é calculado para o caminho obtido pela adição do arco (i,j) com
veículo k para o caminho definido pelo rótulo Yip.
U é inicializado como uma cópia de Yip, U.xk é incrementado e o custo do arco ( i,j )
para o veículo k é adicionado em U.Z. Então chamamos a função h para o vetor U.x e o
rótulo Yjh é substituído por U em caso de melhoria.
3.1.3 Seleção por torneio binário
Dois cromossomos da população atual são escolhidos aleatoriamente. O melhor
cromossomo (melhor fitness) escolhido será o primeiro Pai. De forma análoga, o
segundo pai será escolhido.
3.1.4 Order crossover (ox crossover)
Neste trabalho, utilizaremos o operador order crossover. Esse operador é
inicializado com a seleção aleatória de dois pontos nos cromossomos (pais). Chamemos
esses pontos de i e j. Esses pontos determinam uma substring que será copiada na
mesma posição nos filhos.
Para o primeiro filho, por exemplo, observamos o segundo pai e retiramos as
cidades que já estão na substring desse filho. As cidades restantes serão adicionadas ao
filho respeitando a cidades sucessivas nas posições da esquerda para direita a partir da
posição j + 1. Um procedimento similar é feito para o segundo filho.
Para entendermos melhor, se considerarmos os cromossomos Pai 1 e Pai 2:
i j
Pai 1
Pai 2
Figura 3.3: Cromossomos pais.
As substrings escolhidas são 3, 4 e 5 e 1, 3 e 4.
Então os filhos receberão as substrings nas respectivas posições:
1 2 6 5
5
3 4
3 1 6 2
7
4 7
36
Filho 1
Filho 2
Figura 3.4: Início do processo do ox crossover.
Agora para o primeiro filho, observamos o segundo pai, pai 2, que possui as
seguintes cidades: 5 6 1 3 4 7 2. Então excluímos as cidades 3, 4 e 5, e
acrescentamos as cidades restantes na ordem de sucessão a partir da posição j+1 . O
processo do segundo filho é idêntico a este.
Filho1
Filho 2
Figura3.5: Cromossomos resultantes do ox crossover.
A partir daí, um desses filhos é selecionado aleatoriamente e será avaliado pelo
procedimento Split, que depois substituirá um cromossomo Pr encontrado na pior
metade da população, isto é, entre os nc/2 últimos cromossomos. Finalmente, C é
trocado para manter organizado em uma ordem de custo crescente.
6
5 4 3
3 4 1
1 2 5 3 4 7
7 4 3 1 5 2 6
37
3.1.5 Busca Local
Neste trabalho, a busca local é utilizada numa probabilidade PLS para o filho
resultante do ox crossover e é realizada após o procedimento Splitting, da mesma forma
com que é feito em Prins (2009).
Cada iteração da busca local decompõe os movimentos de realocação de
clientes, troca de dois clientes e movimento 2-OPT, que executam movimentos para
uma ou duas viagens e promovem melhorias. Esse processo é repetido até não haver
mais melhoria. As figuras abaixo ilustram esses movimentos para 2 viagens:
Figura 3.6: Esquema de realocação de um cliente em duas viagens.
Figura 3.7:Esquema da troca de dois clientes.
38
Figura 3.8: Esquema do 1º caso 2-OPT. Neste movimento 2-OPT ocorre uma inversão no
sentido de uma viagem.
Figura 3.9: Esquema do 2º caso 2-OPT.
As viagens são finalmente concatenadas em um único cromossomo (rota
gigante) que é re-avaliado pelo Splitting. O Splitting se comporta como um operador de
melhoria adicional capaz de trocar todos os limites de viagens e reembaralhar veículos.
A busca local utilizada no algoritmo memético é a LS1, que não permite
mudança nos veículos designados para as viagens. Após os movimentos da busca local,
obtemos novas distancias entre os vértices e, portanto teremos novos custos fixo e
variáveis a serem calculados. O custo fixo é removido se uma viagem se tornar vazia.
39
3.1.6 Algoritmo Memético (SMA)
Utilizaremos o segundo algoritmo proposto pelo Prins (2009), SMA. É um
algoritmo memético com population management (AM/PM), uma nova estrutura de
algoritmo memético desenvolvida por Sorensen e Sevaux (2006). Essa estrutura
controla a diversidade da população usando uma medida de distância no espaço de
solução.
As principais características desse algoritmo são a presença de pequenas
soluções, o uso da busca local e da population management. Segundo Sorensen e
Sevaux (2006), a population management “controla a diversidade de uma pequena
população com soluções de alta qualidade”.
Para avaliar se uma solução diversifica a população, AM/PM usa uma medida de
distância no espaço de solução. Então dada uma medida de distância, e duas soluções A
e B, definimos que d(A,B) é a distância entre essas soluções.
A distância de uma solução C a população P é determinada por
D(P,C) = min {d(A, C) :A ϵ P}, (15)
que significa que a distancia de uma solução C a população P é a menor distancia entre
C e uma solução que já qualidade suficiente, pois pertence a P.
Para calcular a distância de uma solução à população calculamos |P| medidas de
distância. |P| representa a cardinalidade da população.
Para que uma solução seja adicionada a população, é necessário que sua
distância a população seja menor que um parâmetro ∆, chamado parâmetro de
diversidade. Assim, evitamos que a solução possua uma distância pequena em relação à
população, o que não contribuiria com a diversidade da mesma (Sorensen e Sevaux,
2006).
Então um filho C é aceito a população se
D(P, C) ≥ ∆. (16)
Neste trabalho, o conceito de distância utilizado é a distância para R
permutações, que provém de Campos et al (2005), comumente chamada de distância de
pares quebrada.
Para dois cromossomos A e B, d(A, B) é a quantidade de pares adjacentes em A
que são quebrados em B, isto é, que não estão na mesma ordem de sequência em B. Por
exemplo, tomando A = (1,2,3,4,5,6) e B = (4,5,6,2,3,1), (1,2) e (3,4,) são quebrados em
40
B, isto é, eles não estão na mesma ordem em B. Então d(A,B) = 2. A distância pode
variar entre 0 e n-1.
O algoritmo de SMA é descrito abaixo:
A população inicial é constituída de nc cromossomos (rotas gigantes), onde
cada uma é armazenada em Pk.T.
A população P é mantida organizada em uma ordem ascendente de custo: a
melhor solução atual é sempre P1.
O procedimento Splitting (Pk, possível) avalia a rota gigante Pk.T e se existir
uma solução viável, a solução resultante é armazenada em Pk.S e o custo em
Pk.F. Selecionamos as três primeiras rotas gigantes que serão melhoradas pela
aplicação da busca local LS1, descrita em (3.4). Essas soluções promovem
rapidez na busca e as restantes (nc -3 soluções) trazem mais diversidade.
Repetimos esses passos para cada cromossomo na população inicial e Pk só é
aceito na linha 6 se D({P1,...,Pk-1}, Pk ) ≠ 0.
O próximo laço executa np fases, onde cada uma começa organizando a
população em ordem crescente de custos, executados em ni iterações básicas
e finaliza por uma renovação parcial da população. O procedimento
renovação_parcial mantém as nk melhores soluções e substitui as nc - nk
outras por novas soluções aleatórias.
Dois pais são selecionados pelo método do torneio binário descrito em (3.3).
Através do operador ox crossover descrito em (3.4), esses pais vão gerar um
filho C que será avaliado pelo Split.
Se possível, a nova solução sofre busca local com uma probabilidade fixa de
PLS. Selecionamos aleatoriamente um cromossomo Pr na pior metade de P.
Se D(P\{Pr},C) ≥ ∆ ou o custo do filho C for menor que o da melhor solução,
guardado em P1 (isso evita a perda de uma melhor solução), Pr receberá C e Pr
será trocado para manter P ordenado.
No fim, a melhor solução está em P1.
Nós consideramos que o valor do parâmetro de diversidade, ∆, é inicializado
com um valor constante. A estratégia é que ∆ decresça linearmente de um ∆máx para um
∆min em cada fase. ∆máx será limitado na prática por uma fração de distância máxima,
isto é, ∆máx = 0,5.(n-1).
41
A tabela abaixo indica os parâmetros usados neste algoritmo:
Método nc np ni Nk LS PLS política ∆min ∆máx
SMA 30 5 4000 1 1 0.50 decrescente 1 0.5.(n-1)
Tabela 3.1: Parâmetros do algoritmo.
O pseudocódigo do SMA está descrito abaixo:
Figura 3.10: Estrutura do algoritmo memético SMA.
Para k:= 1 até nc faça
Repita
Geração aleatória da rota gigante em Pk.T
Split (Pk, possível)
Se (possível) e (k ≤ 3) então LS1(Pk)
Fim-se;
Até (possível) e (D ({P1,..., Pk-1}, Pk) ≠ 0 ) Fim_para;
Para p:= 1 até np faça
Organize P em ordem crescente de custo
Para i:= 1 até ni faça
Selecione dois pais A e B pelo torneio binário
Aplique Ox crossover Para A e B para gerar um filho C
Split (Pk, possível)
Se possível então
Se aleatório < PLS então LS1(C)
Fim_se;
Selecione aleatoriamente Pr para substituição, na pior metade de P.
Se (C.F < P1.F) ou (D(P\{Pr},C) ≥ ∆) então
Pr := C
Troca Pr para manter P ordenado
Fim_se;
Fim_se;
Fim_para;
Renovação_parcial (P, nk);
Fim_para;
42
3.2 Algoritmo Híbrido proposto
O algoritmo híbrido proposto se utiliza do algoritmo memético SMA associado
ao Vocabulary Building. A idéia é inserir a técnica utilizando a noção de contração de
vértices utilizada anteriormente por Guedes (2006) e Neto (2009) num contexto de
Problema do Caixeiro Viajante, e posteriormente por Girão (2008) e Oliveira (2010)
num contexto de Anéis Sonet.
Abaixo se descreve o processo de contração de vértices proposto neste trabalho:
Selecionamos as melhores soluções que vão compor um conjunto elite.
Identificamos as arestas presentes em todas elas.
Concatenamos os trechos formados por arestas consecutivas.
Criamos um grafo auxiliar em que cada trecho representará um único
vértice.
Criamos um conjunto de soluções para este grafo auxiliar através de
heurísticas construtivas e busca local. A esse conjunto damos o nome de
população auxiliar.
Expandimos os nós contraídos em trechos para trazer as soluções
produzidas no grafo auxiliar para soluções viáveis no grafo original.
Aplicamos a busca local nas soluções da população auxiliar (já
expandida).
Exclui-se a pior solução da população auxiliar e uni-se com a melhor
solução da população atual.
43
Abaixo ilustramos o processo de identificação de arestas comuns em quatro
soluções de um PRVFH:
Figura 3.11: Exemplo de identificação de arestas comuns.
A seguir vemos como cada trecho representará um único nó:
Figura 3.12: Contração de vértices.
44
A idéia é identificar fragmentos de boas soluções a fim de obter soluções ainda
melhores. Abaixo vemos a estrutura do algoritmo híbrido proposto:
Figura 3.13: Estrutura do algoritmo híbrido proposto.
Para k:= 1 até nc faça
Repita
Geração aleatória da rota gigante em Pk.T
Split (Pk, possível)
Se (possível) e (k ≤ 3) então LS1(Pk)
Fim_se;
Até (possível) e (D ({P1,..., Pk-1}, Pk) ≠0)
Fim_para;
Organize P em ordem crescente de custo
Para i:=1 até ni faça
Selecione dois pais A e B pelo torneio binário
Aplique ox crossover para A e B gerar um filho C
Split (Pk, possível)
Se possível então
Se aleatório < PLS então LS1(C)
Fim_se;
Selecione aleatoriamente Pr para substituição, na pior metade de P
Se (C.F < Pi.F) ou (D (P\{Pr} , C) ≥ ∆) então
Pr:= C
Troca Pr para manter P ordenado
Fim_se;
Fim_se;
Fim_para;
Contração_de_vértices (pop_atual);
Renovação_parcial(P, nk);
Fim_para.
45
Capítulo IV
4 Resultados computacionais
Este capítulo é dedicado aos resultados computacionais obtidos durante os
experimentos realizados neste trabalho. O algoritmo descrito no capítulo 3 foi
implementado na linguagem C++.
4.1 Instâncias do Problema
As instâncias utilizadas neste trabalho são baseadas nas instâncias 13-20 de
Golden et al (1984), acrescidas de custos variáveis por Taillard (1999). Foram obtidas
do site http://www.isima.fr/~lacomme/hvrp/hvrp.html, feito por CH. Duhamel, P.
Lacomme e C. Prodhon.
4.2 Resultados Computacionais
Nesta seção, serão vistos os resultados obtidos pelo algoritmo memético para a
resolução do PRVFH, conforme publicado em Prins (2009). Também serão vistos os
resultados obtidos da implementação feita neste trabalho.
Na Tabela 4.1, tem-se a relação das instâncias disponíveis, o número de vértices
e as melhores soluções conhecidas.
Tabela 4.1: Instâncias e as melhores soluções conhecidas.
Instâncias Nº de vértices Melhores soluções
conhecidas
HVRP13 50 1517,84
HVRP14 50 607,53
HVRP15 50 1015,29
HVRP16 50 1144,94
HVRP17 75 1061,96
HVRP18 75 1823,58
HVRP19 100 1117,51
HVRP20 100 1534,17
46
Na tabela abaixo, exibimos os resultados encontrados pelo Prins (2009) com a
implementação do algoritmo memético SMA:
Tabela 4.2: Resultados obtidos pelo Prins (2009).
Observe que os únicos resultados que não alcançaram o ótimo foram os valores
referentes às instâncias 17 e 19.
A tabela 4.3 exibe os resultados obtidos da implementação deste algoritmo neste
trabalho:
Instâncias Resultados Tempo Gap
HVRP13 1607,26 3m56s 0,06
HVRP14 672,00 12s 0,11
HVRP15 1120,61 10s 0,10
HVRP16 1252,03 9s 0,09
HVRP17 1203,11 34s 0,13
HVRP18 2092,89 3m18s 0,15
HVRP19 1303,84 4m38s 0,17
HVRP20 1823,16 46s 0,19 Tabela 4.3: Resultados obtidos da implementação do algoritmo memético.
Percebe-se que os resultados obtidos não foram iguais aos obtidos pelo Prins.
Isso se deve a forma com foi aplicada a busca local, na qual ele nos fornece os
procedimentos utilizados, mas não discrimina qual a ordem a ser utilizada. Os
procedimentos utilizados são: Realocação de um cliente, troca de dois clientes,
movimento 2-OPT e movimento 2-OPT (com inversão de sentido em uma rota). Nesta
implementação, a busca local foi aplicada seguindo esta ordem de procedimentos.
Instâncias Resultados
HVRP13 1517,84
HVRP14 607,53
HVRP15 1015,29
HVRP16 1144,94
HVRP17 1064,07
HVRP18 1823,58
HVRP19 1120,34
HVRP20 1534,17
47
A tabela seguinte exibe os resultados alcançados após uma pequena modificação
na ordem de aplicação dos procedimentos:
Instâncias Resultados Tempo Gap
HVRP13 1567,51 3m40s 0,03
HVRP14 619,87 14s 0,02
HVRP15 1052,82 12s 0,04
HVRP16 1147,22 11s 0,00
HVRP17 1097,50 38s 0,03
HVRP18 1881,31 3m29s 0,03
HVRP19 1168,03 3m46s 0,04
HVRP20 1645,57 1m1s 0,07
Tabela 4.4: Resultados obtidos de outra implementação do algoritmo memético.
Percebe-se que os resultados estão mais próximos dos resultados obtidos do
Prins. A ordem dos procedimentos de busca local desta implementação foi: troca de
dois clientes, movimento 2-OPT, movimento 2-OPT (com inversão de sentido em uma
rota) e realocação de um cliente.
A tabela seguinte exibe os resultados alcançados após a aplicação da técnica
vocabulary building a esta última implementação:
Instâncias Resultados Tempo Gap
HVRP13 1555,36 5m58s 0,02
HVRP14 619,23 23s 0,02
HVRP15 1038,45 16s 0,02
HVRP16 1147,22 14s 0,00
HVRP17 1103,17 48s 0,04
HVRP18 1891,32 3m21s 0,04
HVRP19 1158,01 48s 0,04
HVRP20 1622,43 1m23s 0,06 Tabela 4.5: Resultados obtidos do AM+VB.
48
Abaixo vemos uma tabela que compara os resultados obtidos do algoritmo
memético e do algoritmo memético associado ao vocabulary building:
Instâncias AM AM + VB
HVRP13 1567,51 1555,36
HVRP14 619,87 619,23
HVRP15 1052,82 1038,45
HVRP16 1147,22 1147,22
HVRP17 1097,50 1103,17
HVRP18 1881,31 1891,32
HVRP19 1168,03 1158,01
HVRP20 1645,57 1622,43
Tabela 4.6: Comparação entre os resultados obtidos do AM e AM + VB.
Depois de observar estes resultados, podemos chegar à seguinte conjectura:
Se achamos resultados de qualidade inferior e após aplicar o vocabulary building
eles melhoraram, então suponho que ao aplicar esta técnica no algoritmo do Prins com
os resultados dados por ele, vamos gerar resultados iguais ou melhores.
49
Capítulo V
5 Conclusão e Sugestões para Trabalhos Futuros
O presente trabalho abordou o problema de roteamento de veículos com frotas
heterogêneas, bastante interessante devido a sua aplicabilidade em situações reais, já
que sua frota é constituída por uma quantidade limitada de veículos distintos.
No decorrer do trabalho, descrevemos o funcionamento das meta-heurísticas
algoritmo genético e memético e abordamos o uso da técnica vocabulary building
implementada seguindo a idéia de contração de vértices. Também destacamos a
importância das meta-heurísticas híbridas, que são ferramentas que tem sido utilizadas
com maior freqüência em problemas de otimização combinatória devido aos benefícios
gerados pelo melhor desempenho do algoritmo.
O algoritmo proposto para resolução do PRVFH associa a técnica vocabulary
building ao algoritmo memético SMA proposto em Prins (2009).
Apesar dos resultados obtidos diferirem dos resultados do Prins, devido à
ausência de informações referentes aos procedimentos da busca local, demonstramos a
eficiência desta hibridização, que proporcionou em algumas instâncias resultados
melhores em relação à aplicação do algoritmo utilizado isoladamente.
Como sugestões para trabalhos futuros, poderíamos:
Utilizar outra implementação para o vocabulary building, como por
exemplo o pool de vocábulos, visto em Guedes (2006) num contexto de
caixeiro viajante.
Utilizar todas as combinações possíveis dos procedimentos de busca
local;
Empregar diversos valores aos parâmetros utilizados.
50
Referências Bibliográficas
BALDACCI, R.; BATARRA, M.; VIGO, D. Routing a Heterogeneous fleet of
vehicles. 2007.
BALDACCI,R.; MINGOZZI,A. A unified exact method for solving different classes
of vehicle routing problems.2009.
BELFIORE, P. P.; Y.YOSHIZAKI, H. T. Scatter Search para Problemas de
Roteirização de Veículos com Frota Heterogênea, Janelas de Tempo e Entregas
Fracionadas. Tese (Doutorado) Universidade de São Paulo, 2006.
BJARNODÓTTIR, ÁSLAUG SÓLEY. Solving the vehicle routing problem with
genetic algorithms. 2004.
CLARKE, G., WRIGHT, J.W. Sheduling of vehicles from a central depot to a
number of delivery points. 1964.
COELHO, ALESSANDRA MARTINS. Uma abordagem via algoritmos meméticos
para a solução do problema de horário escolar. Dissertação de mestrado. CEFET-
MG, 2006.
CORDEAU, J.F.; LAPORTE,G. ; SAVELSBERGH, M.W.P.; VIGO, D. Vehicle
routing. Capítulo do livro: Transportation, de Barnhart C. e Laporte G., 2007.
DANTZIG,G.B.; RAMSER, J.H. The truck dispatching problem. 1959.
DUHAMEL,C.; LACOME, P. ; PRODHON, C. Efficient frameworks for greedy split
and new depth first search split procedures for routing problems.2011.
FISHER, M.L.; JAIKUMAR, R. A generalized assignment heuristic for vehicle
routing.1981.
GENDREAU, M; LAPORTE, G; MUSARAGANYI, C; TAILLARD,E. A tabu search
heuristic for the heterogeneous fleet vehicle routing problem.Comp. Oper. Res.,
Elsevier Science Ltd., v26, p. 1153-1173, 1999.
GILLETT, B.E. ; MILLER, R.L. A heuristic algorithm for the vehicle-dispatch
problem. 1974.
GIRÃO, ANA CRISTINA. Busca heurística através do algoritmo genético e
memético com construção de vocábulos para o problema de atribuição de
localidades e anéis SONET. Dissertação de mestrado, UFRN 2004.
51
GLOVER,F. New Ejection Chain and Alternating Path Methods for Traveling
Salesman problems.1992.
GLOVER, F. Tabu search and adaptative memory programming - advances,
applications and challenges. 1996.
GLOVER, FRED; LAGUNA, MANUEL; MARTÍ RAFAEL. Fundamentals of
Scatter Search and Path Relinking. 2000.
GOLDEN, B.L.; ASSAD, A.A; WASIL, E.A. Routing Vehicles in the real world:
Applications in the Solid waste, Beverage, Food, Dairy, and newspaper industries.
Capítulo do livro :The vehicle routing problem, Toth, P. e Vigo, D. 2002.
GUEDES, ALISSON. Um algoritmo memético para o problema do caixeiro
viajante assimétrico:uma abordagem baseada em vocabulary building. 2006.
HOLLAND, JOHN HENRY. Hierarchical descriptions, universal spaces, and
adaptive systems, in: Arthur W. Burks, editor. Essays on Cellular Automata.
University of Illinois Press, 1970.
LAPORTE,G. What You Should Know about the Vehicle Routing Problem.2007.
LEITE, JÉSSICA. Algoritmo memético e vocabulary building:uma aplicação ao
problema do caixeiro viajante assimétrico. Dissertação de mestrado, UFRN 2006.
LI, F; GOLDEN,B; WASIL,E. A record-to-record travel algorithm for solving the
heterogeneous fleet vehicle routing problem.2007.
MOGNON, VILSON RODRIGO. Algoritmos genéticos aplicados na otimização de
antenas. Curitiba, 2004.
MOSCATO, P. & NORMAN, M. G. A memetic approach for the traveling salesman
problem implementation of computational ecology for combinatorial optimization
on message-passing systems. International Conference on Parallel Computing and
Transputer Applications, M. Valero, E. Onate, M. Jane, J. L. Larriba, and B. Suarez
(eds.), Amsterdam, The Netherlands, IOS Press, p. 177-186, 1992.
MOSCATO, PABLO; COTTA, CARLOS. A gentle introduction to memetic
algorithms, 2003.
MOSCATO, PABLO; COTTA, CARLOS. Memetic algorithms. 2005.
NETO, J.S.S. Aplicação das técnicas Path-Relinking e vocabulary building na
melhoria de performance do algoritmo memético para o problema do caixeiro
viajante assimétrico.2009.
OSMAN, IBRAHIM H.; LAPORTE, GILBERT. Metaheuristics: A bibliography.
Institute of Mathematics and Statistics, University of Kent, Canterbury, Kent CT2 7NF,
UK, 1996.
52
PRINS, CHRISTIAN. Two memetic algorithms for heterogeneous fleet vehicle
routing problems. France, 2009.
RADCLIFFE, NICHOLAS J.; SURRY, PATRICK D. Formal Memetics
Algorithms.1994.
RAIDL,GUNTER R. A Unified View on Hybrid Metaheuristics. 2006.
ROSA, THATIANE DE OLIVEIRA; LUZ, HELLEN SOUZA. Conceitos básicos de
algoritmo genético:Teoria e Prática.2009
SANTOS,J.C.; DE FREITAS OLIVEIRA,J.R.; DUTRA, L.V.; SANT’ANNA,S.J.S.;
AND RENNÓ,C.D. Seleção de atributos usando algoritmos genéticos para
classificação de regiões.2007.
SCHNEIDER, A. M. Algoritmo Adaptativo Genético para Acompanhamento da
Trajetória de Alvos Móveis. 1998.
SORENSEN, K; SEVAUX, M. MA|PM: memetic algorithms with population
management. 2006.
TAILLARD, É.D. A heuristic column generation method for the heterogeneous
fleet VRP. RAIRO. Vol. 33, p. 1-34, 1999.
TARANTILIS,CD; KIRANOUDIS,CT; VASSILIADIS, VS. A list based threshold
accepting metaheuristic for the heterogeneous fixed fleet vehicle routing
problem.2003.
TARANTILIS,CD; KIRANOUDIS,CT; VASSILIADIS, VS. A threshold accepting
metaheuristic for the heterogeneous fixed fleet vehicle routing problem.2004.