Um algoritmo híbrido para o problema de roteamento de veículos com frotas heterogêneas

Texto

(1)

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

(2)

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.

(3)

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

(4)

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.

(5)

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,

(6)

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.

(7)

v

LISTA DE FIGURAS

1.1Soluçã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

(8)

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

(9)

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

(10)

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

(11)

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.

(12)

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).

(13)

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

(14)

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.

(15)

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.

(16)

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çãoexata 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.

(17)

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 é,

.

(18)

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 CLk. Seja Rik⊆ Rk

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 ϵ Rk.

Seja XLk uma variável binária que é igual a 1 se e somente se a rota L ϵ Rk é 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)

(19)

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.

(20)

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

(21)

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).

Afigura 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-separa o

1 0 0 1 0

2 5 4 1

(22)

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 1 0

1 0

0 1 0

0 1 0 0 1

1

1 0 0

(23)

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 1 0 0

(24)

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).

(25)

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;

(26)

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;

(27)

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”.

(28)

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.

(29)

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

(30)

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.

(31)

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:

(32)

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

(33)

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 )

(34)

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).

(35)

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

(36)

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;

(37)

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 5 6

5

3 4

3 1

6 2

7

(38)

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 3 4 5 7 2

7 4

3 1 5

(39)

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.

(40)

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.

(41)

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.

(42)

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

(43)

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;

(44)

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).

(45)

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ó:

(46)

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);

(47)

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

(48)

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

(49)

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

(50)

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.

(51)

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;

(52)

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.

Imagem

Figura 1.1: Solução de um Problema de Roteamento de Veículos.

Figura 1.1:

Solução de um Problema de Roteamento de Veículos. p.12
Figura 2.1: Cromossomo na forma binária.

Figura 2.1:

Cromossomo na forma binária. p.21
Figura 2.3: Processo de cruzamento.

Figura 2.3:

Processo de cruzamento. p.22
Figura 2.5: Estrutura básica de um Algoritmo Genético.

Figura 2.5:

Estrutura básica de um Algoritmo Genético. p.23
Figura 2.7: Estrutura simplificada do algoritmo memético.

Figura 2.7:

Estrutura simplificada do algoritmo memético. p.25
Figura 2.6: Representação do processo de busca local.

Figura 2.6:

Representação do processo de busca local. p.25
Figura 2.8: Estrutura básica de um algoritmo de busca local.

Figura 2.8:

Estrutura básica de um algoritmo de busca local. p.26
Figura 2.11: Estrutura do vocabulary building .

Figura 2.11:

Estrutura do vocabulary building . p.29
Figura 3.6: Esquema de realocação de um cliente em duas viagens.

Figura 3.6:

Esquema de realocação de um cliente em duas viagens. p.39
Figura 3.7:Esquema da troca de dois clientes.

Figura 3.7:Esquema

da troca de dois clientes. p.39
Figura 3.9: Esquema do 2º caso 2-OPT.

Figura 3.9:

Esquema do 2º caso 2-OPT. p.40
Figura 3.8: Esquema do 1º caso 2-OPT. Neste movimento 2-OPT ocorre uma inversão no                  sentido de uma viagem

Figura 3.8:

Esquema do 1º caso 2-OPT. Neste movimento 2-OPT ocorre uma inversão no sentido de uma viagem p.40
Tabela 3.1: Parâmetros do algoritmo .

Tabela 3.1:

Parâmetros do algoritmo . p.43
Figura 3.12: Contração de vértices.

Figura 3.12:

Contração de vértices. p.45
Figura 3.11: Exemplo de identificação de arestas comuns.

Figura 3.11:

Exemplo de identificação de arestas comuns. p.45
Figura 3.13: Estrutura do algoritmo híbrido proposto.

Figura 3.13:

Estrutura do algoritmo híbrido proposto. p.46
Tabela 4.1: Instâncias e as melhores soluções conhecidas.

Tabela 4.1:

Instâncias e as melhores soluções conhecidas. p.47
Tabela 4.2: Resultados obtidos pelo Prins (2009).

Tabela 4.2:

Resultados obtidos pelo Prins (2009). p.48
Tabela 4.3: Resultados obtidos da implementação do algoritmo memético.

Tabela 4.3:

Resultados obtidos da implementação do algoritmo memético. p.48
Tabela 4.4: Resultados obtidos de outra implementação do algoritmo memético.

Tabela 4.4:

Resultados obtidos de outra implementação do algoritmo memético. p.49
Tabela 4.5: Resultados obtidos do AM+VB.

Tabela 4.5:

Resultados obtidos do AM+VB. p.49
Tabela 4.6: Comparação entre os resultados obtidos do AM e AM + VB.

Tabela 4.6:

Comparação entre os resultados obtidos do AM e AM + VB. p.50