Home   |   Structure   |   Research   |   Resources   |   Members   |   Training   |   Activities   |   Contact

EN | PT

EuPTCEEx0874-51612003000200006

EuPTCEEx0874-51612003000200006

National varietyEu
Year2003
SourceScielo

Javascript seems to be turned off, or there was a communication error. Turn on Javascript for more display options.

Uma abordagem para o problema da optimização de rotas de veı́culos baseada em operadores genéticos

Introdução

A versão básica do Problema de Optimização de Rotas de Veı́culos (PORV), genericamente conhecido na literatura de lı́ngua inglesa por Vehicle Routing Problem, consiste em determinar um conjunto de rotas a efectuar por uma frota de veı́culos, a partir de um depósito central, para servir um conjunto de clientes. O número de veı́culos e as suas capacidades, as localizações e procuras dos clientes, bem como a localização do depósito são conhecidas. Pretende-se, então, determinar quais os clientes que serão servidos por cada veı́culo e qual a configuração das rotas a efectuar pelos veı́culos de forma a minimizar a distância total percorrida.

O PORV um Problema de Optimização Combinatória pertencente classe dos problemas NP difı́ceis [12]. Os algoritmos exactos raramente podem ser usados para resolver, em tempo útil, instâncias com mais de 50 clientes, mesmo para instâncias menores (com menos de 50 clientes) estes métodos são lentos [4], [9]. Nos poucos casos em que instâncias com 100 clientes foram resolvidas exactamente, referido que ou não foi necessário recorrer Pesquisa em Árvore, ou o número de vértices da árvore que foi necessário pesquisar era muito pequeno [4].

Assim, a maior parte da investigação sobre o PORV tem-se dirigido a métodos heurı́sticos.

Mais recentemente, várias meta-heurı́sticas e algoritmos hı́bridos têm sido desenvolvidos para o PORV. Podem-se citar, entre outros, o algoritmo hı́brido [13] que combina Arrefecimento Simulado e Pesquisa Tabu, o algoritmo baseado num Sistema de Colónia de Formigas [1] e os trabalhos baseados em algoritmos de Pesquisa Tabu [6], [11], [15] e [18].

Neste trabalho, descreve-se uma heurı́stica baseada em operadores genéticos e os resultados computacionais obtidos num conjunto de problemas-teste conhecidos da literatura. Apresentase, na secção 2, uma formalização matemática para o PORV. Na secção 3, descreve-se o Algoritmo Genético desenvolvido e implementado. Apresenta-se, na secção 4, o estudo computacional realizado, os resultados obtidos e respectiva análise. Finaliza-se com algumas conclusões e comentários, na secção 5.

2

Formalização

Apresenta-se uma formalização do PORV como um problema de Programação Não Linear com variáveis binárias [5], por ser a que está subjacente ao algoritmo desenvolvido neste trabalho.

Considerem-se as constantes: n o número de clientes (o depósito corresponde ao ı́ndice 0) m o número de veı́culos a distância entre i e j , i , j = 0, ..., n

cij qi

a procura do cliente i , i = 1, ..., n

Q a capacidade de cada veı́culo e as variáveis: (

xijk =

yik =

(

1 , se o veı́culo k vai de i para j directamente 0, caso contrário 1, se o cliente i servido pelo veı́culo k 0, caso contrário

Seja yk = (y0k , y1k , ... , ynk ) então tem-se: min

X

f (yk )

(1)

k

s.a X

(

yik

=

X

qi yik

k

1 m

, i = 1, ..., n , i = 0

(2)

, k = 1, ..., m

(3)

, i = 0, ..., n ; k = 1, ..., m

(4)

Q

i

yik {0, 1} em que para cada k , k = 1, ..., m

f (yk ) = min

X

ci j x i j k

(5)

i,j

s.a X

xijk

= yik

, i = 0, ..., n

(6)

X

xijk

= yjk

, j = 0, ..., n

(7)

j

i

X

xijk

|S| 1 , para todo o S {1, ..., n} tal que 2 |S| n 1

(8)

i,j∈S xS

xijk {0, 1}

, i, j = 0, ..., n

(9)

O objectivo (1) minimizar uma soma de funções não lineares, f (yk ). O valor de f (yk ), para cada k, k = 1, ..., m, obtido resolvendo um subproblema cuja função objectivo (5) minimiza a distância percorrida por cada veı́culo, para servir um determinado subconjunto de clientes. As restrições (2) garantem que os clientes estão afectos a um veı́culo e que o depósito servido por todos os veı́culos. As condições (3) não permitem que as capacidades dos veı́culos sejam excedidas. As restrições (4) definem as variáveis como binárias. Além disso, em cada subproblema as restrições (6) e (7) obrigam a que um veı́culo que chega a um cliente também parta desse cliente e a que cada cliente seja visitado por exactamente um veı́culo. As restrições (8) garantem que não existem subcircuitos que não contenham o depósito. As condições (9) definem as variáveis do subproblema como binárias.

Esta formalização engloba dois Problemas de Optimização Combinatória. Por um lado, as restrições (2), (3) e (4) têm a estrutura de um Problema de Afectação Generalizada, onde determinada a afectação dos clientes aos veı́culos. Por outro lado, para as variáveis y ik fixas satisfazendo (2), (3) e (4) e para cada veı́culo k, cada parcelaf (y k ) da função objectivo (1), dada por (5) a (9), define um Problema do Caixeiro Viajante (PCV), onde estabelecida a configuração de cada rota. Assim, nesta formalização o PORV definido como um Problema de Afectação Generalizada Não Linear.

3

Uma Implementação de um Algoritmo Genético

Os Algoritmos Genéticos (AGs) foram inicialmente desenvolvidos para resolver problemas da área de Inteligência Artificial [10]. Baseiam-se fortemente em processos aleatórios e em probabilidades. Como do conhecimento geral, este método utiliza um conjunto de soluções (população) que, em cada iteração (geração), são combinadas (reprodução) originando uma nova população. Assim, algumas cópias dos indı́viduos da população actual são escolhidas (selecção) para, por aplicação de operadores genéticos (cruzamento e mutação), produzirem outros indivı́duos que vão fazer parte, alguns ou todos, de uma nova população. Estes aspectos envolvidos nos AGs são descritos detalhadamente em [7].

Codificação dos Indivı́duos Apesar de os AGs terem surgido baseados numa codificação binária dos indivı́duos [7], [10], tem-se mostrado necessária a utilização de outro tipo de codificação, nomeadamente em alguns Problemas de Optimização Combinatória [14].

Para o PORV a codificação binária não parece adequada. Uma alternativa natural seria usar abordagens análogas às que têm sido utilizadas para o PCV [14]. No entanto, no PCV tem-se apenas uma rota e no PORV tratam-se mrotas, com número de clientes por rota e subconjunto de clientes em cada rota diferentes de uma solução para outra. Assim, considerouse que as representações já utilizadas para o PCV, também não seriam muito adequadas para o PORV.

Então, optou-se por codificar cada indivı́duo xi , i = 1,...,Pop, por um vector com n variáveis,xij , j = 1,...,n, onde n o número de clientes do problema, podendo cada variávelx ij tomar um valor de 1 a m, onde m o número de veı́culos, previamente definido.

Neste caso, em vez de um indivı́duo representar a configuração das rotas, representa as afectações dos clientes aos veı́culos. De acordo com a formalização dada anteriormente tem-se: y0k = 1 e yjk =

(

1 se xij = k 0 caso contrário

Por exemplo, o indivı́duo [1 1 3 2 2 2 2 3 1 2] indica que:

, j = 1, ..., n; k = 1, ..., m

(10) os clientes 1, 2, 9 são servidos pelo veı́culo 1, os clientes 4, 5, 6, 7, 10 são servidos pelo veı́culo 2, os clientes 3, 8 são servidos pelo veı́culo 3.

e, de acordo com (10), tem-se: y11 = 1 , y21 = 1 , y91 = 1 , y42 = 1 , y52 = 1 , y62 = 1 , y72 = 1 , y10 2 = 1 , y33 = 1 , y83 = 1 , sendo as restantes variáveis yij iguais a zero. Esta afectação dos clientes aos veı́culos uma solução admissı́vel do Problema de Afectação Generalizada se verificar as restrições (2), (3) e (4).

Represente-se por f xi o valor da função objectivo (1), para cada indivı́duo xi . Este valor igual distância total percorrida pelos m veı́culos para servirem os clientes de acordo com a afectação definida por esse indivı́duo e verificando as restrições (6) a (9). Para cada veı́culo k, k = 1, ..., m, e respectiva afectação yk = (y0k , ..., ynk ) obtida segundo (10), a rota a efectuar (valores de xijk ) e a distância a percorrer (valor de f (yk )) são determinadas através da resolução de um PCV. Assim vem:

Nesta implementação, os PCV foram resolvidos heuristicamente, devido ao facto do PCV ser também um problema pertencente classe dos problemas NP difı́ceis. Utilizou-se o Método da Inserção Mais Afastada, por ser computacionalmente muito rápido e se encontrarem bons resultados referidos na literatura [8], [17].

População Inicial Em geral, nos AGs a população inicial gerada aleatoriamente, o que, neste caso, produziria soluções não admissı́veis. Assim, optou-se por gerar a população inicial heuristicamente, através de um algoritmo do tipo construtivo de rota descrito em [16]. As m rotas são formadas paralelamente e os clientes são inseridos nas rotas segundo uma abordagem ávida. O algoritmo inicializado escolhendo m clientes e formando m rotas do tipo depósito–cliente–depósito. Seguidamente, em cada iteração, insere-se em cada rota o cliente que não viola as restrições e minimiza o aumento da distância percorrida pelo veı́culo para o inserir entre os clientes que já estão nessa rota.

Depois executam-se, para cada indivı́duo, procedimentos melhorativos, descritos em [16], que consistem na mudança de clientes de veı́culos com a sua capacidade quase ou completamente preenchida (mais de 95%) para outros com mais capacidade livre (menos de 90%), e na troca de 1 ou 2 clientes entre rotas, desde que a distância total percorrida seja menor.

Em geral, ao mudar os clientes iniciais de cada rota, as afectações subsequentes são diferentes levando a outra solução. Desta forma, variando a escolha dos m primeiros clientes a serem inseridos, pode-se gerar os Pop indivı́duos para formar a população inicial. Para 3 dos indivı́duos escolheram-se os clientes iniciais com base na localização e/ou procura dos clientes.

Para os restantes Pop - 3 indivı́duos, geraram-se aleatoriamente os clientes iniciais.

Tabela 1: Aptidão, roleta, ponteiro e indivı́duos seleccionados para uma população de 10 indivı́duos (selecção SUS)

Função de Aptidão e Selecção As formas de seleccionar a população baseiam-se na aptidão dos indivı́duos (valor da função objectivo, classificação dos indivı́duos, etc.). Utilizou-se a selecção SUS (Stochastic Universal Sampling), da seguinte forma: Ordenaram-se os indivı́duos pelo valor da função objectivo (dada em (11)). Atribuiu-se uma aptidão 0 ao pior indivı́duo e uma aptidão 2 ao melhor. Aos outros indivı́duos foram atribuı́das aptidões entre 0 e 2 de acordo com a sua classificação e igualmente espaçadas.

Assim, sendo perm (i) o vector que indica a classificação (de 0 a Pop-1) do indivı́duo i na população; e const = 2 /P op 1 .

a função de aptidão dada por:

A partir dos valores da aptidão construiu-se uma roleta como se exemplifica na tabela 1. Seguidamente, gerou-se um número aleatório uniformemente distribuı́do no intervalo [0, 1] e, adicionando sucessivamente uma unidade a esse número, formou-se um ponteiro múltiplo igualmente espaçado que permite identificar os indivı́duos a seleccionar, como exemplificado na tabela 1.

Cruzamento Agruparam-se, aleatoriamente, os indivı́duos seleccionados em pares (pais), de modo que não haja pares com elementos iguais (se, em algum caso, a população convergir e deixarem de existir indivı́duos diferentes o algoritmo termina). Obtiveram-se dois novos indivı́duos (filhos) trocando, no máximo, uma certa percentagem dos valores das variáveis que ocupam as mesmas posições nos vectores pais, correspondentes aos números aleatórios gerados uniformemente no intervalo [1, n]. Esta troca só se efectuou quando a solução se mantinha admissı́vel. Por exemplo, sejam:

e o número máximo de variáveis a trocar igual a 4. Então, geram-se 4 números aleatórios diferentes no intervalo [1, 12], (por exemplo 5, 7, 1, 8). Se a capacidade dos veı́culos permitir as duas primeiras trocas e não permitir a terceira, obtêm-se:

Com este tipo de actuação do operador cruzamento obtêm-se afectações, em geral, com agrupamentos de clientes pouco diferentes dos existentes nas afectações que lhes deram origem. No entanto, esta troca aleatória de clientes entre agrupamentos possibilita uma pesquisa diversificada pelo espaço das afectações admissı́veis. Como, durante o algoritmo, em cada iteração são executados vários cruzamentos entre afectações distintas esperado que alguns deles possam conduzir às melhores afectações dos clientes aos veı́culos.

Após esta operação, dos quatro indivı́duos envolvidos (pais e filhos) em cada cruzamento, passam a fazer parte da nova população os dois mais aptos.

Mutação De acordo com a forma como se definiu o operador cruzamento esperado que a sua actuação produza uma pesquisa diversificada no espaço das afectações admissı́veis dos clientes aos veı́culos e que a intensifique em torno das melhores afectações. Mas, se por um lado a aleatoriedade da pesquisa deverá, em termos probabilı́sticos, encontrar boas afectações, por outro lado o facto de não ter em conta a configuração das rotas, pode trazer algumas desvantagens.

Assim, substituiu-se o operador mutação usual por outro, que tem em conta a configuração das rotas e a distância nelas percorrida, baseado em procedimentos de k-trocas de clientes entre rotas. Utilizaram-se, para isso, os procedimentos melhorativos, referidos anteriormente, incluı́dos na heurı́stica construtiva de rota utilizada para gerar a população inicial. Aplicaramse, uma vez em cada geração, estes procedimentos aos indivı́duos resultantes de cruzamentos admissı́veis e também, no final, melhor solução obtida durante as várias gerações. Quando a aplicação do operador mutação, assim definido, tornava o indivı́duo mais apto, este substituı́a o que lhe deu origem.

O operador cruzamento, neste AG, actua especialmente a nı́vel das afectações de clientes aos veı́culos, provocando, em cada iteração, pequenas alterações nas soluções. O operador mutação (procedimentos melhorativos) também provoca algumas alterações nas afectações mas actua, principalmente, a nı́vel das configurações das rotas a partir das trocas de clientes efectuadas entre as rotas correspondentes às afectações de cada indivı́duo.

4

Experiência Computacional

Testou-se o AG descrito num conjunto de problemas-teste conhecidos da literatura (tabela 2), e disponı́veis na Internet, no endereço http://branchandcut.org/VRP/data.

Tipo dos dados Gerados uniformemente.

Iguais ao 8, com outro número e capacidade dos veı́culos.

Iguais ao 11, com outro número e capacidade dos veı́culos.

Obtidos a partir de aplicações a casos reais.

Estruturados - os clientes formam grupos (clusters).

Junção dos clientes dos problemas 5 e 11.

Junção dos clientes do problema 18 com os primeiros 49 clientes do problema 8.

As suas caracterı́sticas estão resumidas na tabela 3. Nesta tabela os valores do número de veı́culos e da melhor solução (ou da solução óptima) são os que constavam dos ficheiros com os dados obtidos da Internet. Os valores sublinhados correspondem solução óptima.

Todos estes ficheiros de dados contêm as coordenadas cartesianas do depósito e dos clientes. Calcularam-se as distâncias utilizando reais e arredondaram-se os resultados unidade, trabalhando com uma matriz de distâncias inteiras.

O algoritmo foi implementado em Turbo C e executado num PC com um processador Pentium MMX 200 MHz e com 16 MB de RAM.

Após algumas experiências, com diferentes valores para os parâmetros utilizados, optou-se por fixá-los como está indicado na tabela 4.

Além de se terem comparado as soluções obtidas através do AG, com as melhores conhecidas, utilizaram-se também, para comparar principalmente os tempos de execução computacional, outros dois algoritmos. Escolheram-se: uma heurı́stica de duas fases [16], computacionalmente muito rápida e a heurı́stica construtiva de rota, que serviu para gerar a população inicial, mas recorrendo só aos três critérios de escolha do cliente inicial já mencionados. Na primeira fase da heurı́stica de duas fases, os clientes são afectos aos veı́culos de uma forma semelhante do algoritmo descrito em [2], e na segunda fase utiliza-se o Método da Inserção Mais Afastada para resolver heuristicamente os PCV envolvidos. No fim, solução obtida são aplicados os procedimentos melhorativos utilizados no AG. Com esta implementação obtêm-se duas soluções. Numa os clientes são afectos aos veı́culos sequencialmente e na outra paralelamente. Com a heurı́stica construtiva de rota obtêm-se três soluções, pois, como já se referiu, utilizaram-se três critérios diferentes para a escolha dos clientes iniciais. Comparou-se a melhor das soluções obtidas com cada um destes métodos com a obtida pelo AG. Repare-se que, qualquer um destes métodos pode, devido ao número de veı́culos estar previamente definido, não obter solução admissı́vel se ficarem clientes por servir.

Estas duas heurı́sticas também foram implementadas em Turbo C e executadas no mesmo PC.

Tabela 3: Caracterı́sticas dos problemas-teste

Tabela 4: Valores dos parâmetros utilizados nos testes computacionais.

No clientes 50 Percentagem máxima de variáveis a trocar em cada cruzamento 90

No clientes > 50

Dimensão da População

No máximo de gerações

Dimensão da População

No máximo de gerações

Tabela 5: Comparação entre a melhor solução conhecida, e as soluções obtidas com o algoritmo de duas fases, o algoritmo construtivo de rota e o AG.

Apresenta-se um quadro comparativo (tabela 5) entre o AG, estas duas heurı́sticas e a melhor solução inteira conhecida. Nas tabelas desta secção tem-se: sol - solução obtida sol* - melhor solução conhecida, (que a óptima se o valor estiver sublinhado) dp - diferença percentual, sendo dp =

sol sol∗ x 100 sol

Verifica-se que a solução obtida com o AG atinge em 3 instâncias o óptimo, em 1 (problema 17) obtém um valor melhor do que a melhor solução inteira conhecida, em 4 está a menos de 2% da melhor solução conhecida. No total, em 12 dos 19 problemas a solução obtida com o AG está a menos de 5% da melhor solução conhecida, o que já não ocorre com as outras duas heurı́sticas. Enquanto as outras duas heurı́sticas obtêm as melhores soluções para os dados de [3], o AG obtém, também, muito boas soluções para os problemas de menor dimensão deste conjunto, mas já não obtém bons resultados para os de dimensão 75 e 100.

Nas instâncias para as quais este algoritmo obteve as melhores soluções, a procura , em geral, inferior a 95% da capacidade total dos veı́culos. No entanto, este facto não explica o bom comportamento do algoritmo, visto noutras instâncias, em que a procura total dos clientes igual ou menor que 95% da capacidade total dos veı́culos, não se obterem bons resultados, enquanto que numa instância em que a procura total cerca de 98% da capacidade total (problema 17) obtém-se uma solução muito boa. Parece, pois, não ser muito significativa a relação entre o comportamento do algoritmo e a percentagem de ocupação dos veı́culos. Mas, nas instâncias em que a procura total dos clientes esteja muito próxima da capacidade total dos veı́culos, este AG não deve ser muito eficiente, visto ser mais provável que a maioria das trocas de valores entre os indivı́duos pais conduzam a soluções não admissı́veis Assim, o AG pode terminar sem que tenha causado grandes alterações população inicial. Isto ocorreu nos problemas 8 e 9.

de salientar que os melhores resultados obtidos com o AG correspondem aos problemas de [4], extraı́dos de aplicações reais e aos problemas 16 e 17, que são os únicos que têm os clientes em grupos [2]. Como, normalmente nas aplicações reais os clientes estão agrupados de esperar que o algoritmo tenha um bom funcionamento na resolução de problemas reais.

Em relação aos tempos de execução computacional nota-se que os correspondentes ao AG são bastante superiores aos dos outros dois algoritmos (ambos muito rápidos, principalmente o de duas fases). No entanto, o tempo de execução do AG foi em geral inferior a 5 minutos, mesmo trabalhando com uma população de 80 indivı́duos, o que ainda razoável. Em contrapartida os resultados obtidos com o AG foram sempre melhores (na média a dp foi de 3% contra 12% e 18% dos outros algoritmos), o que justifica o acréscimo de tempo computacional.

Constata-se, assim, que este AG mais eficiente do que algumas heurı́sticas (construtiva e de duas fases). Em relação às melhores soluções conhecidas obtidas com métodos muito mais elaborados, já não tão eficiente.

5

Conclusões e Trabalhos Futuros

Adaptar um Algoritmo Genético ao PORV não foi tarefa fácil. As maiores deficiências da abordagem realizada devem-se a: (i) Não se ter permitido que na geração da população inicial fossem produzidos indivı́duos (soluções) que violassem as restrições, o que obrigou a utilizar uma heurı́stica para gerar a população inicial; (ii) Na aplicação dos operadores genéticos também não foram permitidas violações das restrições; (iii) Cada indivı́duo representar uma afectação dos clientes aos veı́culos e não uma solução (as rotas) do PORV.

Em relação aos aspectos (i) e (ii) também se fizeram experiências gerando aleatoriamente a população inicial e permitindo violações das restrições, mas obtiveram-se fracos resultados.

Nestas experiências penalizaram-se os indivı́duos não admissı́veis atribuindo-lhes uma aptidão menor. Assim, não eram escolhidos para se reproduzirem tantas vezes como os indivı́duos admissı́veis, o que pode ter contribuı́do para os fracos resultados desta abordagem. A utilização de indivı́duos não admissı́veis de uma outra forma que lhes permita serem seleccionados mais vezes para reprodução, combinando-os com indivı́duos admissı́veis poderá diversificar a pesquisa.

O aspecto (iii) pode levar a que, eventualmente, se encontre a melhor afectação possı́vel dos clientes aos veı́culos, e nesse sentido o Algoritmo Genético seja muito eficiente, mas as rotas dos veı́culos, para servirem os clientes que lhes estão afectos, obtidas através da resolução heurı́stica dos PCV não sejam as melhores. Assim, a solução do PORV pode não ser a óptima mesmo tendo sido obtida a afectação óptima dos clientes aos veı́culos. A determinação das rotas óptimas, para uma afectação obtida pelo Algoritmo Genético, envolvia a resolução exacta de um PCV para cada veı́culo, o que proibitivo em termos de tempo de execução computacional.

Este algoritmo poderá eventualmente ficar mais eficiente mediante algumas alterações que tenham em conta os aspectos (i), (ii) e (iii) focados atrás. As alterações, que podem ser testadas, separadamente ou em conjunto em trabalhos futuros, são: Utilizar heurı́sticas mais eficientes para a resolução dos PCV envolvidos; Permitir afectações não admissı́veis, testando outros métodos de as penalizar, por exemplo, recorrendo a parâmetros penalizadores incluı́dos no cálculo da função objectivo; Alterar a actuação dos operadores genéticos tendo em conta que as soluções podem ser avaliadas segundo dois critérios. Um relativo violação das restrições de capacidade e o outro às distâncias percorridas; Gerar a maior parte da população inicial aleatoriamente e somente alguns (poucos) indivı́duos heurı́sticamente.


Download text