Resolução do Problema
de Roteamento de
Veículos com Frota
Heterogênea via GRASP
e Busca Tabu
Rodrigo Geraldo Ribeiro
Denis Pinto Pinheiro
Camila Leles Rezende
O Problema de Roteamento de
Veículos (PRV):
Dado um conjunto de cidades (ou
consumidores), cada qual com uma
demanda qi por um produto, e um
depósito com veículos de capacidade Q,
encontrar as rotas para os veículos
minimizando os custos de transporte,
atendendo todos as cidades.
Características do problema:
Como uma generalização do Problema do
Caixeiro Viajante (PCV), o PRV pertence à
classe de problemas NP-Difícil (LENSTRA,
1981), portanto não existem algoritmos em
tempo polinomial para encontrar soluções
ótimas.
Os algoritmos exatos existentes raramente
conseguem resolver problemas envolvendo
mais do que 50 consumidores (RENAUD &
BOCTOR, 2002).
Abordagens de resolução:
Para problemas de maior porte:
Heurísticas.
Exemplos de heurísticas bem sucedidas:
Algoritmos baseados em Busca Tabu de
Taillard (1993), Osman (1993) e
Gendreau et al. (1994).
Heurística de pétalas de Renaud et
al.(1996).
Nossa proposta:
Um método de duas fases para a resolução
do PRV:
Fase GRASP.
Construção de uma solução inicial parcialmente gulosa.
Aplicar um método de busca local para refinar a solução
inicial.
Refinamento usando Busca Tabu
Baseado em função de avaliação que procura
minimizar as distâncias percorridas.
As estruturas de vizinhança utilizadas na Busca
Tabu e no método de busca local da fase GRASP,
são simples e proporcionam alterações na solução
capazes de escapar de ótimos locais.
Exemplo:
Consumidores
Rotas
Depósito
Características:
Depósito: qtde veículos, localização.
Veículos: capacidade.
Consumidores: localização, demanda.
Informações da Rota: distância entre os
consumidores e depósito.
Função Objetivo:
Minimizar o custo total da viagem.
Representação dos
consumidores:
Pontos no plano (x,y).
Consumidores:
Identificador,
Demanda.
Depósito:
Num. veículos.
Grafo de representação das cidades
Matriz de Distância:
0
10
15
7
16
0
12
31
20
23
0
18
50
23
19
0
• Nossa proposta de solução é aplicável a problemas assimétricos!
Formulação do Problema do
Roteamento de Veículos (PRV):
Seja G = (V, E) um grafo não direcionado, onde V = {v0, v1,..., vn} é o
conjunto dos vértices e E = {(vi, vj): vi ,vj V, i < j} é o conjunto de arestas.
O vértice v0 representa o depósito, sendo este a base de uma frota de
veículos de capacidade Q, possivelmente diferentes entre si, enquanto os
vértices remanescentes correspondem às cidades ou consumidores.
Cada consumidor vi tem uma demanda não negativa qi e q0 = 0.
Supõe-se que existe um número ilimitado de veículos no depósito.
A cada aresta (vi, vj) está associada uma distância não negativa cij que
representa a distância entre os consumidores.
Formulação do Problema do
Roteamento de Veículos (PRV):
O Problema de Roteamento de Veículos
consiste em determinar o conjunto de rotas
que deverão ser feitas pelos veículos
minimizando os custos de transporte, dado
pela distância e respeitando as seguintes
condições:
a) Cada rota começa e termina no depósito;
b) Toda cidade de V \ {v0} é visitada somente uma
vez por somente um veículo;
c) A demanda total de qualquer rota não deve
superar a capacidade Q de um veículo.
Representação do PRV:
Assumimos a representação usada por
Pradenas & Parada (1999). Uma solução do
PRV é representada por meio de uma
permutação de cidades, numeradas de 1 a n,
separadas em tantas partições quantos forem
o número de veículos usados.
Por exemplo, se há 6 consumidores, 3 veículos e a
solução s é {0-3-4-0-1-5-2-0-6-0} então as rotas
dos veículos, denominadas pétalas, são {0-3-4-0},
{0-1-5-2-0} e {0-6-0}.
Estruturas de vizinhança:
Seja S o conjunto das soluções para o
PRV. As estruturas de vizinhança são
definidas por funções N que associam um
conjunto de soluções N(s) com cada
solução obtida por uma modificação
parcial de s, chamada movimento.
Consideramos duas estruturas de
vizinhança, a saber: N 1, N 2.
Movimentos:
O primeiro movimento consiste na troca de
dois números inteiros em uma mesma pétala
da solução.
Estes números representam apenas os
consumidores.
O segundo, representa a remoção de um
número inteiro de uma pétala e sua inserção
em uma outra pétala.
Esses números representam os consumidores.
Exemplo das Estruturas de
Vizinhança:
A vizinhança N 1(s) de uma dada solução s é
o conjunto de todos os vizinhos s' gerados
pelo primeiro movimento.
Por exemplo, dada a solução s = {0-3-4-0-1-5-20-6-0}
s' ={0-3-4-0-1-2-5-0-6-0} N 1(s).
A vizinhança N 2(s) de uma dada solução s é
o conjunto de todos os vizinhos s' gerados
pelo segundo movimento.
Por exemplo, dada s1 = {0-3-4-0-1-5-2-0-6-0}
s’ = {0-4-0-1-5-2-0-3-6-0}
Função Objetivo:
Função objetivo baseada em penalização.
Seja f 1(s) representando a função objetivo
pura da solução s:
Soma das distâncias percorridas por todos os
veículos.
Seja O(s) o total das sobrecargas dos veículos
associada a esta solução, caso exista.
Função objetivo f (s) = f 1(s) + O(s)
é um fator de penalidade não negativo.
Construção de uma solução
inicial:
Fase de construção do método GRASP
(Procedimento de busca adaptativa
gulosa e randomizada).
{0-2-1-6-...}.
Algoritmo da fase de construção:
Primeiro passo:
Seleciona-se um veículo aleatoriamente.
S =S U {A}. Inicialmente S={ }.
Lista_de_Candidatos = ordenar (V \ {s} ).
Critério de ordenação relativo à distância de cada um ao
último elemento adicionado à solução.
Esse processo de seleção é uma heurística adaptativa
gulosa, que estima o benefício da seleção de cada um dos
elementos.
A heurística é adaptativa porque os benefícios associados
com a escolha de cada elemento são atualizados em cada
iteração da fase de construção para refletir as mudanças
oriundas da seleção do elemento anterior.
Algoritmo da fase de construção:
Selecionar de forma aleatória a partir da lista de
candidatos restrita (LCR).
Se o consumidor selecionado exceder a capacidade
do veículo, adiciona-se a distância da cidade do
último consumidor escolhido ao depósito, finalizando
uma rota.
A LCR é composta pelos melhores candidatos de LC.
O tamanho da LCR é definido segundo um fator [0,1],
tal que |LCR| = |LC|.
A = {4 – 7 – 15 – 10 – 28 – 13 ... }
Repete-se este procedimento até que todos os
consumidores sejam atendidos.
Fase de Refinamento
• Refinamento via Busca Tabu
• Método de busca local que utiliza
uma estrutura de dados Lista para
evitar ciclagem.
• Função de Aspiração
Algoritmo
Procedimento Grasp_TB () {
para i = 0; i < graspMAX; i++ {
Solucao s = construcao_GRASP ();
buscaLocal(s);
}
s = buscaTabu(s);
retorne s;
}
Resultados
Tipo
Capacidade
Custo
A
300
3
B
150
1
C
200
2
Resultados
Tipo Rota
40-19-41-13-25-14-24-23
B
42-44-15-45-33-10-49-9-50-16
B
4-47-12-46-32-11-38-5-37-17
B
18-6-48-27-1-22-28-31
B
39-30-34-21-29-2-20-35
B
43-7-26-8-3-36
B
Custo Total: 1141
Demanda
141
131
147
128
148
82
Resultados
Tipo Rota
40-19-41-13-25-14-24-43
B
42-44-15-45-33-10-49-9-50-16
B
4-47-12-46-32-11-38-5-37-17
B
18-6-48-27-1-22-31-8
B
39-30-34-21-29-36-35-20
B
23-7-26-28-3-2
B
Custo Total: 1110
Demanda
136
131
147
137
124
102
Conclusão
O problema de roteamento de veículos além de
possuir grande aplicabilidade no mundo real, possui uma
grande complexidade para sua resolução computacional.