SlideShare una empresa de Scribd logo
1 de 56
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
Roteiro
•   Motivação
•   Objetivo
•   Problema de roteamento de veículos
•   Algoritmo genético
•   Proposta de solução
•   Resultados computacionais
•   Considerações Finais

                                         2
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
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
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
Problema de roteamento de veículos




                                     6
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
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
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
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
Problema de roteamento de veículos
• Problema de roteamento de veículos com
  janela de tempo dinâmico




                                           11
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
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
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
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
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
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
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
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
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
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
Algoritmo genético
• Roda da roleta




                               22
Algoritmo genético
• Torneio




                                 23
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
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
Algoritmo genético
• Cruzamento de mapeamento parcial (PMX)




                                           26
Algoritmo genético
• Cruzamento de mapeamento parcial (PMX)




                                           27
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
Algoritmo genético
• Cruzamento de ordem (OX)




                              29
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
Algoritmo genético
• Mutação por troca (EM)




                               31
Algoritmo genético
• Mutação por inversão simples (SIM)




                                       32
Algoritmo genético
• Mutação por deslocamento (DM)




                                  33
Algoritmo genético
• Mutação por inserção (ISM)




                               34
Algoritmo genético
• Mutação por inversão (IVM)




                               35
Algoritmo genético
• Mutação scramble (SM)




                               36
Algoritmo genético




                     37
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
Proposta de solução
• Diagrama de classes da solução proposta para
  o PRV clássico




                                             39
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
Proposta de solução




                      41
Resultados Computacionais
• Ambiente de Teste
  – 4Gb RAM
  – Intel Core i5 2.53 GHz
  – 300 Gb HD
  – Windows 7 Ultimate




                                 42
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
Resultados Computacionais
                                               Coordenadas             25   7    38    28
                               Identificação                 Demanda
                                                                       26   27   61    7
                                                X      Y


• Dados utilizados
                                                                       27   30   48    15
                                    1          37      52       7
                                                                       28   43   67    14
                                    2          49      49      30
                                                                       29   58   48    6
  para teste do                     3
                                    4
                                               42
                                               20
                                                       64
                                                       26
                                                               16
                                                                9
                                                                       30   58   27    19
                                                                       31   37   60    11
  algoritmo                         5
                                    6
                                               40
                                               21
                                                       30
                                                       47
                                                               21
                                                               15      32   38   46    12

                                    7          17      63      19      33   46   10    23

• Instância E-n51-k5                8
                                    9
                                               31
                                               52
                                                       62
                                                       33
                                                               23
                                                               11
                                                                       34
                                                                       35
                                                                            61
                                                                            62
                                                                                 33
                                                                                 53
                                                                                       26
                                                                                       17

                                    10         51      21       5      36   63   59    6

                                    11         42      41      19      37   32   22    9
                                    12         31      32      29      38   45   35    15
                                    13          5      25      23      39   59   15    14

                 Coordenadas        14         12      42      21      40   5    6     7
      Depósito                      15         36      16      10      41   10   17    27
                 X       Y
                                    16         52      41      15      42   21   10    13
         0       30      40
                                    17         27      23       3      43   5    64    11
                                    18         17      33      41      44   30   15    16
                                    19         13      13       9      45   39   10    10
                                    20         57      58      28      46   32   39    5
                                    21         62      42       8      47   25   32    25
                                    22         42      57       8      48   25   55    17
                                    23         16      57      16
                                                                       49   48   28    18
                                                                                      44
                                    24          8      52      10
                                                                       50   56   37    10
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
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
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
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
Resultados Computacionais
• Comparativo entre diferentes taxas de
  mutação
                            0.96
                            0.90
                            0.84
                            0.78
                            0.72
 Probabilidade de mutação




                            0.66
                            0.60
                            0.54
                            0.48
                                                                                                                        Custo Médio
                            0.42
                                                                                                                        Custo Mínimo
                            0.36
                            0.30
                            0.24
                            0.18
                            0.12
                            0.06
                              0
                              500.00   510.00   520.00   530.00   540.00   550.00   560.00   570.00   580.00   590.00

                                                                       Custo                                                           49
Resultados Computacionais
• Comparativo entre diferentes taxas de
  cruzamento
                               1.00

                               0.90

                               0.80
 Probabilidade de cruzamento




                               0.70

                               0.60

                               0.50
                                                                                                                     Custo Médio
                               0.40                                                                                  Custo Mínimo
                               0.30

                               0.20

                               0.10

                               0.00

                                      0.00   100.00   200.00   300.00   400.00   500.00   600.00   700.00   800.00

                                                                        Custo                                                       50
Resultados Computacionais
• Comparação com resultados encontrados na
  literatura
               Melhor
               solução                Solução proposta
              conhecida
  Instância
              Custo       Custo    Custo     Desvio      Desvio    Tempo
              Mínimo      Mínimo   Médio     Mínimo      Médio     Médio

  E-n13-k4      290       278,43   278,64    -3,99%      -3,92%     4,6s

  E-n23-k3      569       470,05   470,05   -17,39%      -17,39%    4,9s

  E-n51-k5      521       527,67   558,75    1,28%       7,25%     12,1s

  E-n76-k7      683       776,03   863,55    13,62%      26,43%    19,7s

  E-n76-k8      735       835,12   954,08    13,62%      29,81%    20,7s
                                                                           51
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
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
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
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
Dúvidas?




           56

Más contenido relacionado

La actualidad más candente

Estatística básica
Estatística básicaEstatística básica
Estatística básicaJose_ferreira
 
CTBD - Classes e Especialidades
CTBD - Classes e EspecialidadesCTBD - Classes e Especialidades
CTBD - Classes e EspecialidadesJonathas Art's
 
Cap5 - Parte 2 - Intervalo De Confiança 1
Cap5 - Parte 2 - Intervalo De Confiança 1Cap5 - Parte 2 - Intervalo De Confiança 1
Cap5 - Parte 2 - Intervalo De Confiança 1Regis Andrade
 
Aula 2 - encontrando similaridades de sequências
Aula 2  - encontrando similaridades de sequênciasAula 2  - encontrando similaridades de sequências
Aula 2 - encontrando similaridades de sequênciasFrancisco Prosdocimi
 
Revestimentos ceramicos escopo bsico
Revestimentos ceramicos escopo bsicoRevestimentos ceramicos escopo bsico
Revestimentos ceramicos escopo bsicoFelipeforest
 
Manual para a primeira habilitação dos motoristas
Manual para a primeira habilitação dos motoristasManual para a primeira habilitação dos motoristas
Manual para a primeira habilitação dos motoristasCLESIOANDRADE
 
Resumo sobre Integração de Funções Racionais e Frações Parciais
Resumo sobre Integração de Funções Racionais e Frações ParciaisResumo sobre Integração de Funções Racionais e Frações Parciais
Resumo sobre Integração de Funções Racionais e Frações ParciaisGustavo Fernandes
 
Apostila direção defensiva corigida
Apostila  direção defensiva corigidaApostila  direção defensiva corigida
Apostila direção defensiva corigidaLucas Oliveira
 

La actualidad más candente (10)

Estatística básica
Estatística básicaEstatística básica
Estatística básica
 
CTBD - Classes e Especialidades
CTBD - Classes e EspecialidadesCTBD - Classes e Especialidades
CTBD - Classes e Especialidades
 
Cap5 - Parte 2 - Intervalo De Confiança 1
Cap5 - Parte 2 - Intervalo De Confiança 1Cap5 - Parte 2 - Intervalo De Confiança 1
Cap5 - Parte 2 - Intervalo De Confiança 1
 
Aula 2 - encontrando similaridades de sequências
Aula 2  - encontrando similaridades de sequênciasAula 2  - encontrando similaridades de sequências
Aula 2 - encontrando similaridades de sequências
 
Revestimentos ceramicos escopo bsico
Revestimentos ceramicos escopo bsicoRevestimentos ceramicos escopo bsico
Revestimentos ceramicos escopo bsico
 
Manual para a primeira habilitação dos motoristas
Manual para a primeira habilitação dos motoristasManual para a primeira habilitação dos motoristas
Manual para a primeira habilitação dos motoristas
 
Resumo sobre Integração de Funções Racionais e Frações Parciais
Resumo sobre Integração de Funções Racionais e Frações ParciaisResumo sobre Integração de Funções Racionais e Frações Parciais
Resumo sobre Integração de Funções Racionais e Frações Parciais
 
Propriedades do concreto armado
Propriedades do concreto armadoPropriedades do concreto armado
Propriedades do concreto armado
 
Apostila direção defensiva corigida
Apostila  direção defensiva corigidaApostila  direção defensiva corigida
Apostila direção defensiva corigida
 
7 apostila pintor
7 apostila pintor7 apostila pintor
7 apostila pintor
 

Destacado

Aplicação Algorítimo Genético
Aplicação Algorítimo GenéticoAplicação Algorítimo Genético
Aplicação Algorítimo GenéticoRodrigo Romais
 
RxJava - Programação assíncrona para Android.
RxJava - Programação assíncrona para Android.RxJava - Programação assíncrona para Android.
RxJava - Programação assíncrona para Android.Clerton Leal
 
From Hackathons to Startups: Building Products from Fresh Ideas
From Hackathons to Startups: Building Products from Fresh IdeasFrom Hackathons to Startups: Building Products from Fresh Ideas
From Hackathons to Startups: Building Products from Fresh IdeasChris Traganos
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)Armando Daniel
 
Genetic Algorithm by Example
Genetic Algorithm by ExampleGenetic Algorithm by Example
Genetic Algorithm by ExampleNobal Niraula
 
Desenvolvimento Android: Faça da maneira certa
Desenvolvimento Android: Faça da maneira certaDesenvolvimento Android: Faça da maneira certa
Desenvolvimento Android: Faça da maneira certaNelson Glauber Leal
 
Scala Data Pipelines for Music Recommendations
Scala Data Pipelines for Music RecommendationsScala Data Pipelines for Music Recommendations
Scala Data Pipelines for Music RecommendationsChris Johnson
 

Destacado (8)

Aplicação Algorítimo Genético
Aplicação Algorítimo GenéticoAplicação Algorítimo Genético
Aplicação Algorítimo Genético
 
RxJava - Programação assíncrona para Android.
RxJava - Programação assíncrona para Android.RxJava - Programação assíncrona para Android.
RxJava - Programação assíncrona para Android.
 
From Hackathons to Startups: Building Products from Fresh Ideas
From Hackathons to Startups: Building Products from Fresh IdeasFrom Hackathons to Startups: Building Products from Fresh Ideas
From Hackathons to Startups: Building Products from Fresh Ideas
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
Genetic Algorithm by Example
Genetic Algorithm by ExampleGenetic Algorithm by Example
Genetic Algorithm by Example
 
Lean Startup for Agile Product Management
Lean Startup for Agile Product ManagementLean Startup for Agile Product Management
Lean Startup for Agile Product Management
 
Desenvolvimento Android: Faça da maneira certa
Desenvolvimento Android: Faça da maneira certaDesenvolvimento Android: Faça da maneira certa
Desenvolvimento Android: Faça da maneira certa
 
Scala Data Pipelines for Music Recommendations
Scala Data Pipelines for Music RecommendationsScala Data Pipelines for Music Recommendations
Scala Data Pipelines for Music Recommendations
 

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
  • 6. Problema de roteamento de veículos 6
  • 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
  • 26. Algoritmo genético • Cruzamento de mapeamento parcial (PMX) 26
  • 27. Algoritmo genético • Cruzamento de mapeamento parcial (PMX) 27
  • 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
  • 32. Algoritmo genético • Mutação por inversão simples (SIM) 32
  • 33. Algoritmo genético • Mutação por deslocamento (DM) 33
  • 34. Algoritmo genético • Mutação por inserção (ISM) 34
  • 35. Algoritmo genético • Mutação por inversão (IVM) 35
  • 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
  • 42. Resultados Computacionais • Ambiente de Teste – 4Gb RAM – Intel Core i5 2.53 GHz – 300 Gb HD – Windows 7 Ultimate 42
  • 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
  • 44. Resultados Computacionais Coordenadas 25 7 38 28 Identificação Demanda 26 27 61 7 X Y • Dados utilizados 27 30 48 15 1 37 52 7 28 43 67 14 2 49 49 30 29 58 48 6 para teste do 3 4 42 20 64 26 16 9 30 58 27 19 31 37 60 11 algoritmo 5 6 40 21 30 47 21 15 32 38 46 12 7 17 63 19 33 46 10 23 • Instância E-n51-k5 8 9 31 52 62 33 23 11 34 35 61 62 33 53 26 17 10 51 21 5 36 63 59 6 11 42 41 19 37 32 22 9 12 31 32 29 38 45 35 15 13 5 25 23 39 59 15 14 Coordenadas 14 12 42 21 40 5 6 7 Depósito 15 36 16 10 41 10 17 27 X Y 16 52 41 15 42 21 10 13 0 30 40 17 27 23 3 43 5 64 11 18 17 33 41 44 30 15 16 19 13 13 9 45 39 10 10 20 57 58 28 46 32 39 5 21 62 42 8 47 25 32 25 22 42 57 8 48 25 55 17 23 16 57 16 49 48 28 18 44 24 8 52 10 50 56 37 10
  • 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
  • 49. Resultados Computacionais • Comparativo entre diferentes taxas de mutação 0.96 0.90 0.84 0.78 0.72 Probabilidade de mutação 0.66 0.60 0.54 0.48 Custo Médio 0.42 Custo Mínimo 0.36 0.30 0.24 0.18 0.12 0.06 0 500.00 510.00 520.00 530.00 540.00 550.00 560.00 570.00 580.00 590.00 Custo 49
  • 50. Resultados Computacionais • Comparativo entre diferentes taxas de cruzamento 1.00 0.90 0.80 Probabilidade de cruzamento 0.70 0.60 0.50 Custo Médio 0.40 Custo Mínimo 0.30 0.20 0.10 0.00 0.00 100.00 200.00 300.00 400.00 500.00 600.00 700.00 800.00 Custo 50
  • 51. Resultados Computacionais • Comparação com resultados encontrados na literatura Melhor solução Solução proposta conhecida Instância Custo Custo Custo Desvio Desvio Tempo Mínimo Mínimo Médio Mínimo Médio Médio E-n13-k4 290 278,43 278,64 -3,99% -3,92% 4,6s E-n23-k3 569 470,05 470,05 -17,39% -17,39% 4,9s E-n51-k5 521 527,67 558,75 1,28% 7,25% 12,1s E-n76-k7 683 776,03 863,55 13,62% 26,43% 19,7s E-n76-k8 735 835,12 954,08 13,62% 29,81% 20,7s 51
  • 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
  • 56. Dúvidas? 56