Um algoritmo genético é proposto para resolver o problema de roteamento de veículos, que busca minimizar a distância total percorrida pelos veículos respeitando suas capacidades. O algoritmo implementa operadores genéticos como cruzamento e mutação para gerar novas soluções e seleciona as melhores após avaliação. Resultados computacionais são apresentados usando uma instância com 43 clientes.
Um algoritmo genético para o problema de roteamento de veículos
1. Um algoritmo genético para o
problema de roteamento de
veículos
Paulo Renato Morais Oliveira
Orientador: Reinaldo Gen Ichiro Arakaki
Co-orientador: Ubirajara Moura de Freitas
1
2. Roteiro
• Motivação
• Objetivo
• Problema de roteamento de veículos
• Algoritmo genético
• Proposta de solução
• Resultados computacionais
• Considerações Finais
2
3. Motivação
• O interesse no problema de roteamento de
veículos(PRV) é dado por sua relevância
prática e por sua dificuldade computacional
– Necessidade de aperfeiçoar os processos de
distribuição
– Custos elevados de transporte
– Soluções exatas são inviáveis do ponto de vista
computacional
– Necessário o uso de métodos heurísticos ou meta-
heurísticos
3
4. Objetivo
• O objetivo deste trabalho é criar um algoritmo
genético para roteamento de veículos para
otimizar as rotas de distribuição, no qual
sejam respeitadas as restrições de capacidade
dos veículos e que a distância total percorrida
por eles sejam mínimas
4
5. Problema de roteamento de veículos
• O problema de roteamento de veículos (PRV)
é o nome dado a uma classe de problemas
que possuem as seguintes características:
– Frota de veículos com capacidade homogênea ou
heterogênea
– Um depósito e vários pontos de entrega (clientes)
– Encontrar o conjunto de rotas com um custo
mínimo que atenda toda a demanda
5
7. Problema de roteamento de veículos
• Características do problema:
– O custo total do conjunto deve ser minimizado
– Cada rota inicia e finaliza no depósito
– Cada cliente tenha sua demanda atendida por um
único veículo
– A carga não pode exceder a capacidade do veículo
7
8. Problema de roteamento de veículos
• De acordo com as características do problema
pode-se definir um vasto conjunto de
problemas de roteamento.
• Alguns exemplos:
– Restrições de tempo
– Restrições na capacidade de veículos
– Restrições de operação
8
9. Problema de roteamento de veículos
• Problema de roteamento de veículos com
janela de tempo (PRVJT)
– Inclui a restrição da janela de tempo ao PRV
também conhecido como PRVJT estático
– Os veículos devem partir do depósito somente
após a abertura do depósito e retornar antes do
fechamento do depósito
– O veículo tem que chegar a um determinado
cliente dentro de um intervalo de tempo
– Espera calculada
9
10. Problema de roteamento de veículos
• Problema de roteamento de veículos com
janela de tempo dinâmico (PRVJTD)
– Alguns clientes não são conhecidos no momento
em que os veículo saem para fazer as entregas
– A medida que as novas requisições são inseridas
tem-se um novo PRVJT estático para ser resolvido
– Tempo limite para novas requisições
– Espera calculada
10
11. Problema de roteamento de veículos
• Problema de roteamento de veículos com
janela de tempo dinâmico
11
12. Problema de roteamento de veículos
• Problema de roteamento de veículos com
pedidos de coleta e entrega simultâneo
(PRVCES)
– Pedidos atendidos de forma simultânea
– Veículo com dois tipos de cargas
– Ambas as demandas dos clientes são atendidas
pelo mesmo veículo
12
13. Problema de roteamento de veículos
• Problema de roteamento de veículos com
pedidos de coleta e entrega
– Somente um tipo de pedido
– É um caso particular do PRVCES no qual uma das
demandas é zero
– Veículo com dois tipos de cargas
13
14. Problema de roteamento de veículos
• Complexidade do PRV
– É um problema da classe NP-difícil
– Complexidade de tempo é exponencial O(cn)
– Atualmente não existe nenhuma solução exata em
tempo polinomial O(nc) para o PRV
– Necessário a utilização de métodos heurísticos ou
meta-heurísticos:
• Algoritmos genéticos
• Simulated anneling
• Busca tabu
14
15. Algoritmo genético
• São algoritmos evolutivos baseados no
princípio da seleção natural
• Indivíduos mais aptos sobrevivem e os menos
aptos tendem a serem descartados
• Genes dos indivíduos mais aptos vão se
espalhar para um maior número de indivíduos
em sucessivas gerações
• Mantém uma população de indivíduos
15
16. Algoritmo genético
• Representação da solução
– Existem várias formas de representação possíveis
para os cromossomos as mais utilizadas são:
• Binária (Clássica)
• Inteira (Ordem)
– Os operadores genéticos devem ser definidos de
acordo com a representação escolhida
16
17. Algoritmo genético
• Função de custo
– Determina a qualidade da solução
– Possibilita comparar as soluções disponíveis e
escolher as melhores
– Tende a ser minimizada
– Custo da solução (1 3 2 4 5 9 7 6 8) é dado por:
17
18. Algoritmo genético
• Função de aptidão
– Tende a ser maximizada
– Seja f(x) a função de custo, podemos definir a
função de aptidão como sendo:
– Onde fmax é o maior valor da função de custo para
a população sendo avaliada.
18
19. Algoritmo genético
• População Inicial
– Formada por um conjunto de indivíduos que
representam possíveis soluções do problema a ser
resolvido
– Pode ser criada aleatoriamente ou utilizando
algoritmos heurísticos
– Deve ser avaliada pela função de custo
19
20. Algoritmo genético
• Seleção
– Responsável por escolher quais indivíduos serão
submetidos às operações genéticas como
cruzamento e mutação
– Os indivíduos resultantes destas operações irão
compor a nova população
– Não deve ser baseada somente no melhor
indivíduo
20
21. Algoritmo genético
• Dizimação
– Ordena os indivíduos com base na aptidão
– Remove um número fixo de indivíduos com baixa
aptidão
– Cria um patamar e elimina aqueles que estiverem
abaixo deste patamar
– Os pais são escolhidos aleatoriamente entre os
restantes
21
24. Algoritmo genético
• Operadores Genéticos
– Definem regras para uma renovação eficaz de uma
população
– Responsáveis por criar novos pontos de busca no
espaço de solução
– Ocorrem de forma iterativa tentando melhorar a
aptidão dos indivíduos
24
25. Algoritmo genético
• Cruzamento
– Realizado através da escolha de pares de
indivíduos (os pais) que são usados para gerar um
par de filhos
– Os filhos apresentarão características genéticas
herdadas dos pais
– Caso os filhos forem mais aptos que os pais, eles
substituem os pais na população
– Probabilidade de cruzamento
25
28. Algoritmo genético
• Cruzamento de ponto único
– Gerar um ponto de corte
– Copiar os elementos da esquerda de um pai e
depois completar com os elementos da direita do
outro pai
28
30. Algoritmo genético
• Mutação
– Utilizada para garantir uma maior varredura do
espaço da solução
– Insere um material genético novo na população
– Evita que o algoritmo convirja muito cedo para
mínimos locais
– Probabilidade de mutação
30
38. Proposta de solução
• Como existem diversas variações de
problemas de roteamento de veículos, o foco
deste trabalho é na resolução do problema do
PRV clássico
• Foram implementados todos os métodos de
seleção e os operadores de cruzamento e
mutação apresentados anteriormente
38
39. Proposta de solução
• Diagrama de classes da solução proposta para
o PRV clássico
39
40. AG <<enumeration>>
-populacao: Populacao Selecao
-chanceMutacao: double
-chanceCrossover: double +toString(): String
+NUMERO_GERACOES: int
+TAMANHO_POPULACAO: int <<enumeration>>
+TAMANHO_INDIVIDUO: int Mutacao
+CAPACIDADE_VEICULO: int
+AG(int, int, double, double, int) +toString(): String
+exec(Selecao, Mutacao, Crossover, List<Cliente>): Individuo
+crossoverUP(Populacao): Populacao <<enumeration>>
+crossoverPMX(Populacao): Populacao Crossover
+crossoverOX(Populacao): Populacao
+mutacaoISM(Populacao): Populacao +toString(): String
+mutacaoIVM(Populacao): Populacao
+mutacaoSM(Populacao): Populacao
Cliente
+mutacaoDM(Populacao): Populacao
+mutacaoEM(Populacao): Populacao -id: int
+mutacaoSIM(Populacao): Populacao -ponto: Point
+selecaoRoleta(Populacao): Populacao -quantidade: int
+selecaoDizimacao(Populacao): Populacao
+selecaoTorneio(Populacao): Populacao +Cliente(int, Point, int)
+getId(): int
+setId(int): void
+getPonto(): Point
+setPonto(Point): void
+getQuantidade(): int
+setQuantidade(int): void
Populacao
Individuo
-individuos: List<Individuo>
-deposito: Cliente -fitness: double
+PIOR_CUSTO: int -custo: int
-cromossomo: List<Integer>
+getIndividuos(): List<Individuo>
+setIndividuos(List<Individuos>): void +getFitness(): double
+getDeposito(): Cliente +setFitness(double): void
+setDeposito(Cliente): void +getCusto(): int
+Populacao() +setCusto(int): void
+gerarPopulacao(): void +getCromossomo(): List<Integer>
+setCromossomo(List<Integer>): void
+toString(): String
+gerarAleatorio(List<Cliente>): void
+avaliarFitness(): void
+compareTo(Individuo) 40
43. Resultados Computacionais
• Parâmetros do Algoritmo genético
Parâmetro Padrão
Operador de cruzamento Cruzamento de ordem (OX)
Operador de mutação Deslocamento (DM)
Taxa de cruzamento 60%
Taxa de mutação 95%
Tamanho da população 100
Número de gerações 10000
Capacidade dos veículos 160
43
45. Resultados Computacionais
• Comparativo entre os métodos de seleção
700.00
600.00
500.00
400.00
Custo
Custo Mínimo
300.00 Custo Médio
200.00
100.00
0.00
Dizimação Roleta Torneio
Métodos de seleção
45
46. Resultados Computacionais
• Comparativo entre os operadores de mutação
580.00
560.00
540.00
520.00
Custo
Custo Mínimo
500.00 Custo Médio
480.00
460.00
440.00
EM SIM DM ISM IVM SM
Operadores de mutação
46
47. Resultados Computacionais
• Comparativo entre os operadores de
cruzamento
620.00
610.00
600.00
590.00
580.00
Custo
570.00 Custo Mínimo
Custo Médio
560.00
550.00
540.00
530.00
520.00
Ponto Único PMX OX
Operadores de cruzamento 47
48. Resultados Computacionais
• Comparativo entre diferentes tamanhos de
população
300
280
260
240
220
Tamanho da população
200
180
160
Custo Médio
140
Custo Mínimo
120
100
80
60
40
20
500 520 540 560 580 600 620 48
Custo
52. Considerações Finais
• Este trabalho apresentou um módulo para
roteamento de veículos utilizando um
algoritmo genético para otimizar rotas de
distribuição
52
53. Considerações Finais
• Contribuições:
– Técnicas e algoritmos da área de otimização
combinatória para resolução do PRV
– Implementação de um protótipo para cálculo de
rotas
– Uma representação gráfica para a apresentação
dos resultados obtidos
53
54. Considerações Finais
• Pode-se concluir que:
– O protótipo implementado demonstra que é
possível automatizar a construção de rotas com
custos otimizados
– Os algoritmos genéticos provaram ser importantes
para resolver problemas de natureza
combinatorial
54
55. Considerações Finais
• Trabalhos futuros
– Utilizar o algoritmo genético em um sistema de
informação geográfico (SIG) para utilização de
uma base de dados real
– Pesquisar novos operadores genéticos, ou utilizar
uma estratégia que combine diversos operadores
genéticos
55