XXIV Encontro Nac. de Eng. de Produção - Florianópolis, SC, Brasil, 03 a 05 de nov de 2004 Um método híbrido para a resolução do problema de roteamento de veículos Alexandre Xavier Martins (UFMG) [email protected] Marcone Jamilson Freitas Souza (UFOP) [email protected] Otávio Mello Castro (UFOP) [email protected] Resumo Neste trabalho propomos um método híbrido, no qual técnicas heurísticas são combinadas com um método exato para resolver o problema de roteamento de veículos (PRV). Inicialmente, uma solução é gerada randomicamente. A seguir esta solução é refinada por um procedimento de duas fases. Na primeira, um procedimento baseado em Simulated Annealing é aplicado com o objetivo de encontrar uma solução viável. Na segunda fase, a solução resultante é refinada por um procedimento de Busca Tabu (BT). O procedimento de Busca Tabu também chama periodicamente um método exato para melhorar a rota de cada veículo, isto é, ele aciona um método para resolver o problema do caixeiro viajante (PCV). Os resultados computacionais demonstram a robustez do método proposto para as instâncias testadas. Palavras-chave: Roteamento de Veículos, Otimização Combinatória, Metaheurísticas. 1. Introdução O Problema de Roteamento de Veículos (PRV) pode ser definido como segue: dado um conjunto de cidades (ou consumidores), cada um com uma demanda qi por um produto, e um depósito com veículos de capacidade Q, encontre a rota dos veículos minimizando os custos de transporte. Numerosas aplicações práticas do PRV são reportadas na literatura. Veja, por exemplo, Brown & Graves (1981), Fisher et al. (1982), Bell et al. (1983), Evans & Norback (1985), Golden & Watts (1987) para aplicações em indústrias químicas, de bebidas, de alimentos e petrolíferas. O interesse no PRV é devido à sua importância prática e também à sua grande dificuldade de solução. Como uma generalização do Problema do Caixeiro Viajante (PCV), o PRV pertence à classe de problemas NP-difíceis (LENSTRA, 1981), e um algoritmo em tempo polinomial para encontrar a solução ótima não é conhecido. Existem algoritmos exatos que raramente resolvem instâncias envolvendo mais que 50 cidades (RENAUD & BOCTOR, 2002). Devido ao limitado sucesso de métodos exatos, pesquisas têm sido desenvolvidas no sentido de desenvolver heurísticas capazes de encontrar boas soluções para instâncias de maior porte. Exemplos dessas heurísticas podem ser encontradas em Taillard (1993), Osman (1993), Gendreau et al. (1994) e Renaud et al.(1996). Para revisar as mais importantes heurísticas aplicadas ao PRV veja Cordeau et al. (2002) e Laporte (1992). Uma bibliografia sobre o PRV pode ser vista em Laporte & Osman (1995). Neste trabalho é proposto um método híbrido, no qual técnicas heurísticas são combinadas com um método exato, para resolver o PRV. Inicialmente uma solução é gerada aleatoriamente. Depois, esta solução é refinada por um procedimento de duas fases. Na primeira, é aplicada a metaheurística Simulated Annealing. Na segunda fase, a solução ENEGEP 2004 ABEPRO 3167 XXIV Encontro Nac. de Eng. de Produção - Florianópolis, SC, Brasil, 03 a 05 de nov de 2004 resultante da primeira é refinada por um procedimento de Busca Tabu (BT). O procedimento BT também chama periodicamente um método exato para melhorar a rota de cada veículo, isto é, um método para resolver o Problema do Caixeiro Viajante (PCV). 2. Formulação do Problema de Roteamento de Veículos Seja G = (V, A) um grafo direto onde V = {v0, v1,..., vn} é o conjunto de vértices e A = {(vi, vj): i ≠ j} é o conjunto de arcos. O vértice v0 representa um depósito onde se encontra um conjunto de veículos idênticos de capacidade Q, enquanto os vértices restantes correspondem às cidades ou consumidores. Cada consumidor vi tem uma demanda não-negativa qi e q0 = 0. A cada arco (vi, vj) está associada uma distância não-negativa cij que representa a distância entre os consumidores (nós). O PRV consiste em determinar o conjunto de rotas que devem ser seguidas pelos veículos minimizando os custos de transporte dado pelas distâncias obedecendo às seguintes restrições: (a) Cada rota começa e termina no depósito; (b) Cada cidade de V\{v0} é visitada somente uma única vez por somente um veículo; (c) A demanda total de cada rota não pode exceder a capacidade do veículo. 3. Método exato para o PCV Para encontrar a melhor seqüência de visitas em cada rota é necessário resolver o Problema do Caixeiro Viajante (PCV). Seja Vr um subconjunto de V incluindo o depósito, isto é, uma permutação de um conjunto de cidades começando do depósito (uma pétala da solução do PRV). Uma formulação exata citada em Laporte (1992) é apresentada abaixo. min ∑ ∑ cij xij (1) ∑x = 1 ∀j ∈ Vr (2) i∈Vr j∈Vr j ≠i sujeito a: i∈Vr i≠ j ij ∑x ij = 1 ∀i ∈ Vr (3) ∑y ji − ∑ y ij = 1 ∀j ∈ Vr \ {v0 } (4) j∈Vr j ≠i i∈Vr i≠ j ENEGEP 2004 i∈Vr i≠ j y ij ≤ (n − 1) xij ∀i, j ∈ Vr (5) xij ∈ {0,1} ∀i, j ∈ Vr (6) y ij ≥ 0 ∀i, j ∈ Vr (7) ABEPRO 3168 XXIV Encontro Nac. de Eng. de Produção - Florianópolis, SC, Brasil, 03 a 05 de nov de 2004 4. Representação do PRV Neste trabalho foi adotada 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. O elemento separador é representado pelo valor zero e indica o depósito. Por exemplo, se há 6 cidades, 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, chamadas pétalas, são {0-3-4-0}, {0-1-5-2-0} e {0-6-0}. 5. Estrutura de vizinhança Seja S o conjunto de soluções para o PRV. Afim de derivar um algoritmo baseado em busca local para resolver o PRV, é necessário definir uma estrutura de vizinhança, isto é, uma função N a qual está associado um conjunto de soluções N(s) com cada solução s ∈ S obtida por uma modificação parcial de s, chamada movimento. Neste trabalho são considerados dois tipos de movimentos, definindo assim duas estruturas de vizinhança, N 1 e N 2 . O primeiro movimento consiste em trocar dois números inteiros da solução. Este número pode representar o consumidor ou o depósito. O segundo movimento consiste em trocar dois consumidores que pertencem a rotas diferentes. A vizinhança N 1 ( s ) de uma dada solução s é o conjunto de todos vizinhos s' gerados pelo primeiro movimento. Por exemplo, s' ={0-3-4-0-1-0-5-2-6-0} ∈ N 1 ( s ) . A vizinhança N 2 ( s ) de uma dada solução s é o conjunto de todos vizinhos s' gerados pelo segundo movimento. Por exemplo, s' ={0-3-5-0-1-4-2-0-6-0} ∈ N 2 ( s ) . 6. Função de avaliação A função de avaliação usada neste trabalho é apresentada a seguir. Seja f1(s) a função objetivo propriamente dita de uma dada solução s, isto é, a soma de todas as distâncias percorridas, e O(s) a sobrecarga dos veículos que seguem rotas acima de suas capacidades, caso haja algum associado a esta solução. O algoritmo desenvolvido trabalha com a seguinte função de avaliação f(s) = f1(s) + β×O(s), onde β é um fator de penalidade não-negativo. 7. Simulated Annealing Simulated Annealing é uma classe de metaheurística proposta originalmente por Kirkpatrick et al. (1983), sendo uma técnica de busca local probabilística, que se fundamenta em uma analogia com a termodinâmica, ao simular o resfriamento de um conjunto de átomos aquecidos, operação conhecida como recozimento. Esta técnica começa sua busca a partir de uma solução inicial qualquer. O procedimento principal consiste em um loop que gera aleatoriamente, em cada iteração, um vizinho s’ da solução corrente s. A cada geração de um vizinho s’ de s, é testada a variação ∆ do valor da função objetivo, isto é, ∆ = f(s’) – f(s). Se ∆ < 0, o método aceita a solução e s’ passa a ser a nova solução corrente. Caso ∆ ≥ 0 a solução vizinha candidata também poderá ser aceita, mas neste caso, com uma probabilidade e-∆/T, onde T é um parâmetro do método, chamado de temperatura e que regula a probabilidade de aceitação de soluções com custo pior. ENEGEP 2004 ABEPRO 3169 XXIV Encontro Nac. de Eng. de Produção - Florianópolis, SC, Brasil, 03 a 05 de nov de 2004 A temperatura T assume, inicialmente, um valor elevado T0. Após um número fixo de iterações (o qual representa o número de iterações necessárias para o sistema atingir o equilíbrio térmico em uma dada temperatura), a temperatura é gradativamente diminuída por uma razão de resfriamento α, tal que Tn ← α * Tn-1, sendo 0 < α < 1. Com esse procedimento, dá-se, no início uma chance maior para escapar de mínimos locais e, à medida que T aproxima-se de zero, o algoritmo comporta-se como o método de descida, uma vez que diminui a probabilidade de se aceitar movimentos de piora (T→0⇒ e-∆/T →0). O procedimento pára quando a temperatura chega a um valor próximo de zero e nenhuma solução que piore o valor da melhor solução é mais aceita, isto é, quando o sistema está estável. Os parâmetros de controle do procedimento são a razão de resfriamento α, o número de iterações para cada temperatura (SAmax) e a temperatura inicial T0. A Figura 1 apresenta o algoritmo Simulated Annealing básico. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Procedimento S.A. (f(.), N(.), α, SAmax, T0, s) s* ← s; {Melhor solução obtida até então} IterT ← 0; {Número de iterações na temperatura T} {Temperatura corrente} T ← T0; enquanto (T > 0) faça enquanto (IterT < SAmax) faça IterT ← IterT + 1; Gere um vizinho qualquer s’ ∈ N(s); ∆ = f(s’) – f(s); se (∆ < 0) então s ← s’; se (f(s’) < f(s*)) então s* ← s’; senão Tome x ∈ [0,1]; se (x < e-∆/T) então s ← s’; fim-se; fim-enquanto; T ← α × T; IterT ← 0; fim-enquanto; s ← s*; Retorne s; Fim S.A.; Figura 1 – Algoritmo Simulated Annealing 8. Busca Tabu A Busca Tabu é um procedimento adaptativo, originado do trabalho de Glover (1986), que aceita movimentos de piora para escapar de ótimos locais. O procedimento começa com uma solução inicial s0 e a cada iteração explora um subconjunto V da vizinhança N(s) da solução corrente s. O membro s’ de V com menor valor nessa região segundo a função f(.) torna-se a nova solução corrente mesmo que s’ seja pior que s, isto é, que f(s’) > f(s). O critério de escolha do melhor vizinho é usado para escapar de um mínimo local. Esta estratégia, entretanto, pode fazer com que o algoritmo cicle, isto é, que retorne a uma solução já gerada anteriormente. De forma a evitar que isso ocorra, existe uma lista tabu T, a qual é uma lista de movimentos proibidos. A lista tabu clássica contém os movimentos reversos aos últimos |T| movimentos realizados e funciona como uma fila de tamanho |T|, isto é, quando ENEGEP 2004 ABEPRO 3170 XXIV Encontro Nac. de Eng. de Produção - Florianópolis, SC, Brasil, 03 a 05 de nov de 2004 um novo movimento é adicionado à lista, o mais antigo sai. Assim, na exploração do subconjunto V da vizinhança N(s) da solução corrente s, ficam excluídos da busca os vizinhos s’ que são obtidos de s por movimentos m que constam na lista tabu. procedimento BT_PCV_Exato(s, BTmax, NCWImax, NCEmax) {Melhor solução até o momento} 1 s* ← s; 2 BestIter ← 0; {Iteração na qual s* foi encontrada} 3 Iter ← 0; {Contador de iterações} 4 T ← ∅; {Lista Tabu} 5 NCWI ← 0; {Número de iterações sem melhora de f(s*)} 6 NCE ← 0; {Número de vezes que a Busca Tabu foi chamada} 7 Exact ← true; 8 enquanto (não exceder o tempo limite) faça 9 enquanto (Iter – BestIter < BTmax) faça 10 Iter ← Iter + 1; 11 Seja s’ ← s ⊕ m o melhor vizinho em N1(s) tal que o movimento 12 m não seja tabu ou s’ satisfaça o critério de aspiração; 13 Atualize a Lista Tabu T; 14 s ← s’; 15 se (f(s) < f(s*)) então 16 s ← s*; BestIter ← Iter; Exact ← true; NCWI ← 0; 17 fim-se; 18 fim-enquanto; 19 s ← s*; NCWI ← NCWI + 1; T ← ∅; 20 Sorteia |T| ∈ [|T|min, |T|max]; 21 se (NCWI ≥ NCWImax e Exact = true) então 22 s’ ← Exact_TSP(s); {Todas as pétalas} 23 se (f(s’) < f(s*)) 24 então s* ← s’; BestIter ← Iter; NCWI ← 0; 25 senão 26 NCE ← 0; 27 enquanto (NCE < NCEmax) faça 28 Iter ← Iter + 1; 29 s’ ← s ⊕ m o melhor vizinho em N2(s) 30 tal que o movimento m não seja tabu); 31 Atualize a lista tabu; 32 s” ← PCV_Exato(s); {Somente as pétalas modificadas} 33 se (f(s”) < f(s*)) 34 então s ← s”; BestIter ← Iter; NCWI ← 0; 35 senão NCE ← NCE + 1; Exact ← false; 36 fim-se; 37 fim-enquanto; 38 fim-se 39 fim-se; 40 fim-enquanto; fim TS_Exact_TSP; Figura 2 – Algoritmo BT_PCV_Exato Além da lista tabu, existe uma função de aspiração, que é um mecanismo que retira, sob certas circunstâncias, o status tabu de um movimento. Mais precisamente, para cada possível valor v da função objetivo existe um nível de aspiração A(v): uma solução s’ em V pode ser gerada se f(s’) ≤ A(f(s)), mesmo que o movimento esteja na lista tabu. No nosso caso, o critério de aspiração adotado foi por objetivo, isto é, um movimento ainda que tabu é realizado caso ele melhore a melhor solução encontrada até então. ENEGEP 2004 ABEPRO 3171 XXIV Encontro Nac. de Eng. de Produção - Florianópolis, SC, Brasil, 03 a 05 de nov de 2004 Duas regras são normalmente utilizadas de forma a interromper o procedimento. Pela primeira, pára-se quando é atingido um certo número máximo de iterações sem melhora no valor da melhor solução. Pela segunda, quando o valor da melhor solução chega a um limite inferior conhecido (ou próximo dele). Esse segundo critério evita a execução desnecessária do algoritmo quando uma solução ótima é encontrada ou quando uma solução é julgada suficientemente boa. No nosso caso, adotamos o tempo de CPU como critério de parada. Os parâmetros principais de controle do método de Busca Tabu são a cardinalidade |T| da lista tabu, a função de aspiração A, a cardinalidade do conjunto V de soluções vizinhas testadas em cada iteração e BTmax, o número máximo de iterações sem melhora no valor da melhor solução. A Busca Tabu proposta também chama uma DLL (Dynamic Link Library) do LINGO Solver para resolver de forma exata uma instância do Problema do Caixeiro Viajante (PCV), isto é, a Busca Tabu usa o LINGO para melhorar a rota de cada veículo. Apesar do PCV também ser um problema NP-completo, quando o número de cidades é pequeno este pode ser resolvido de forma eficiente por um modelo exato, e como a rota de cada veículo é limitada pela sua capacidade, o número de cidades que este visita permite o uso do modelo exato sem a perda de eficiência computacional. O pseudo-código da Busca Tabu usando o modelo exato do PCV, chamado BT_PCV_Exato, é mostrado na Figura 2. 9. O método híbrido proposto O método híbrido proposto combina Simulated Annealing e a versão da Busca Tabu relatada na seção anterior. Inicialmente, uma solução é gerada aleatoriamente. Esta solução passa por um procedimento de duas fases. Na primeira, o algoritmo Simulated Annealing é aplicado com o objetivo de encontrar uma boa solução. Depois, a solução gerada é refinada pelo procedimento BT_PCV_Exato. A Figura 3 ilustra o pseudo-código do método proposto. 1 2 3 4 procedimento SA_BT_PCV_Exato; s0 ← Construa uma solução randômica; s ← SA(s0); s* ← BT_PCV_Exato(s, BTmax, NCWImax, NCEmax); Return s*; {Retorne a melhor solução} fim SA_BT_PCV_Exato; Figura 3 – Algoritmo SA_BT_PCV_Exato 10. Testes Computacionais O método proposto foi codificado em C++ e testado em 3 instâncias clássicas do PRV disponíveis em http://ina.eivd.ch/collaborateurs/etd/problemes.dir/vrp.dir/vrp.html. Todos os experimentos foram rodados em um PC com processador Pentium IV, 1.6 GHz de clock e 256 MB de RAM. Os parâmetros utilizados para o método Simulated Annealing foram os seguintes: Temperatura Inicial = T0 = 10000; Número de Iterações sem Resfriamento = SAmax = 10000; Taxa de Resfriamento = α = 0.7. Para o método BT_PCV_Exato os parâmetros adotados foram: Cardinalidade da lista Tabu = 0.2 × |V| ≤ |T | ≤ 0.9 × |V|, onde |V| é o número de cidades a ser visitadas; Número de Iterações Sem Melhora = BTmax = 2000; NCWImax = 4; NCEmax = 25. ENEGEP 2004 ABEPRO 3172 XXIV Encontro Nac. de Eng. de Produção - Florianópolis, SC, Brasil, 03 a 05 de nov de 2004 Para cada instância foram executados 25 testes, cada qual partindo de sementes diferentes de números aleatórios. Na Tabela 1 são apresentados os resultados obtidos, na qual se compara os desempenhos dos procedimentos heurísticos com e sem o método exato, denotados respectivamente por SA_BT e SA_BT_PCV_Exato. As colunas 2 e 3 representam o número de cidades e a capacidade dos veículos para cada instância, respectivamente. A coluna “desvio” significa a porcentagem de desvio entre o melhor valor conhecido na literatura e o ( f − f * )× 100 . valor médio encontrado pelo algoritmo e é dado pela fórmula seguinte, f* Ins- Melhor Tempo valor de tân# Cap Melhor conhecido CPU Valor cia cidades (sec.) SA_BT SA_BT_PCV_Exato Valor Médio Desvio (%) Melhor Valor Valor Médio Desvio (%) 1 50 160 524.61 300 524.61 528.44 0.73 524.61 526.84 0.43 2 75 140 835.26 600 844.57 859.28 2.88 845.00 852.56 2.07 3 100 112 1082.65 900 1119.14 1130.83 4.45 1110.31 1121.71 3.61 Tabela 1 – Resultados Computacionais 11 – Conclusões Este trabalho propõe a combinação das metaheurísticas Simulated Annealing e Busca Tabu com um método exato para resolução do Problema de Roteamento de Veículos. Foi mostrado que o método proposto produz soluções de boa qualidade e é mais robusto do que o procedimento que não faz uso do método exato, já que é capaz de encontrar soluções próximas das melhores soluções conhecidas com um menor desvio. É importante observar, no entanto, que o método proposto deve ser usado quando o número de cidades em cada rota for pequeno; caso contrário, o método exato utilizado na resolução do PCV pode falhar, em vista da NP-completude deste último problema. Referências BELL, W.; DALBERTO, L.; FISHER, M. L.; GREENFIELD, A.; JAIKUMAR, R.; MACK, R. & PRUTZMAN, P. (1983), Improving distribution of industrial gases with an on-line computerized routing and scheduling systems, Interfaces, Vol. 13, p. 4-23. BROWN, G. & GRAVES, G. (1981), Real-time dispatch of petroleum tank trunks, Management Science, Vol. 27, p. 19-32. CORDEAU, J. F.; GENDREAU, M.; LAPORTE, G.; POTVIN, J. Y. & SEMET, F. (2002), A guide to vehicle routing heuristics, Journal of the Operational Research Society, Vol. 53, p. 512-522. EVANS, S & NORBACK, J (1985), The impact of a decision-support system for vehicle routing in a food service supply situation, Journal of the Operational Research Society, Vol. 36, p. 467-472. FISHER, M. L.; GREENFIELD, R.; JAIKUMAR, R. & LESTER, J. (1982), A computerized vehicle routing application, Interfaces, Vol. 1, p. 45-52. GENDREAU, M.; HERTZ, A. & LAPORTE, G. (1994), A tabu search heuristic for the vehicle routing problem, Management Science, Vol. 40, p. 1276-1290. GLOVER, F. (1986), Future paths for integer programming and links to artificial intelligence, Computers and Operations Research, Vol. 13, p. 533-549. GLOVER, F. & LAGUNA, M. (1997), Tabu Search, Kluwer Academic Publishers, Boston. ENEGEP 2004 ABEPRO 3173 XXIV Encontro Nac. de Eng. de Produção - Florianópolis, SC, Brasil, 03 a 05 de nov de 2004 GOLDEN, B. L. & WATTS, E. (1987), Computerized vehicle routing in the soft drink industry, Operations Research, Vol. 35, p. 6-17. KIRKPATRICK, S.; GELOTT, D. C. & VECCHI, M. P. (1983), Optimization by Simulated Annealing, Science, Vol. 220, p. 671-680. LAPORTE, G. (1992), The Vehicle-Routing Problem – An Overview of exact and approximate algorithms, European Journal of Operational Research, Vol. 59, p. 345-358. LAPORTE, G & OSMAN, I. H. (1995), Routing Problems: A bibliography, Annals of Operations Research, Vol. 61, p. 227-262. LENSTRA, J. & RINNOOY KAN, A. (1981), Complexity of vehicle routing and scheduling problems, Networks, Vol.11, p. 221-228. LINDO SYSTEMS INC. (2001), http://www.lindo.com, Optimization modeling with LINGO. PRADENAS, L. & PARADA, V. (1999), Use of Genetic Algorithms, Tabu Search and Simulated Annealing in the Vehicle Routing Problem, Proceedings of the Third Metaheuristics International Conference (MIC'99), p. 371-374. OSMAN, I. H. (1993), Metastrategy simulated annealing and tabu search algorithms for the vehicle routing problem, Annals of Operations Research, Vol. 41, 421-451. RENAUD, J.; BOCTOR, F. F. &. LAPORTE, G. (1996), An improved petal heuristic for the vehicle routing problem, Journal of the Operational Research Society, Vol. 47, p. 329-336. RENAUD, J. & BOCTOR, F. F. (2002), A sweep-based algorithm for the fleet size and mix vehicle routing problem, European Journal of Operational Research, Vol. 140, p. 618-628. TAILLARD, E. D. (1993), Parallel iterative search methods for vehicle routing problems, Networks 23, 661-673. ENEGEP 2004 ABEPRO 3174