• Nenhum resultado encontrado

Os algoritmos genéticos são procedimentos de busca de propósito geral robustos. Eles po- dem rapidamente explorar um extenso espaço de busca e encontrar aquelas regiões que possuem aptidão acima da média. Entretanto, quando se trata de encontrar o ótimo global, os algoritmos genéticos algumas vezes, encontram dificuldades devido à falta de foco na busca. Isto por sua vez levanta a questão de até quanto o algoritmos genéticos podem ser competitivos para aplica- ções do mundo real quando comparados à maioria dos algoritmos e heurísticas especializadas. A resposta reside nos algoritmos genéticos híbridos.

Os algoritmos genéticos híbridos incorporam um rápido e eficiente procedimento de busca para o problema específico. Eles também tendem a usar codificações e operadores genéticos que são direcionados ao problema a ser resolvido. Desta forma, muitos algoritmos eficientes po- dem ser produzidos como demonstrado em alguns trabalhos recentes Cotta et al.; Kido, Kitano e Nakanishi(41, 42) Algoritmos genéticos híbridos são igualmente menos susceptível à análi- ses teóricas do que algoritmos genéticos padrão, mas eles são muito interessantes na prática e seu uso está aumentando. Uma descrição mais legível das motivações que estão por tráz dos algoritmos genéticos híbridos pode ser encontrada em Davis(43).

Portanto, experiências com algoritmos genéticos para resolver problemas combinatoriais mostraram que o esquema clássico do algoritmo, com mutação atuando como um operador secundário para perturbar as soluções, não produz resultados competitivos. Para ser mais efetivo, o algoritmo genético precisa ser hibridizado com um método de busca local, por exemplo, um método de descida Toth e Vigo(44).

No caso específico do problema do caixeiro viajante a busca local é relizada a cada iteração do algoritmo genético, imediatamente após a formação de uma nova geração. Toma-se a melhor solução e aplica-se o método da descida Souza(45) tentando encontrar uma solução melhor na sua vizinhança. Se encontrada, a nova solução substitui a antiga na população.

Capítulo 6

O Problema de Roteirização de Veículos

6.1 Descrição do problema

Queremos resolver o problema de roteirização na distribuição de produtos farmacêuticos de um distribuidor para os seus diversos clientes.

Existem um centro de distribuição e vários pontos de entrega (clientes). No protótipo imple- mentado para resolver o problema eles são representados pelas suas coordenadas cartesianas em um mapa. Estas coordenadas permitem o cálculo da distância linear entre dois pontos quaisquer. As distâncias entre os pontos serão utilizadas para o cálculo da distância total percorrida pelos veículos.

No sistema final é desejável substituir as distâncias lineares entre os pontos pelas distâncias percorridas pelos veículos, melhorando a precisão das soluções obtidas. Para tanto, o centro de distribuição e os pontos de entrega devem ser representados por suas coordenadas geográfi- cas (latitude e longitude), e um sistema auxiliar de mapeamento geográfico deverá fornecer as distâncias entre os pontos considerando as vias públicas utilizadas no percurso.

Existem vários veículos disponíveis para realizar as entregas. Cada veículo deve atender a um conjunto de restrições. Neste protótipo é considerada apenas a restrição de capacidades de carga dos veículos, como por exemplo o peso máximo ou volume máximo, ou a quantidade máxima de pacotes. O valor máximo transportado no veículo é uma restrição cuja implemntação é similar à limitação de capacidade dos veículos, e portanto pode ser facilmente integrada ao sistema.

1. o destino (cliente), e

2. a carga (como por exemplo o peso, o volume ou o número de pacotes).

Os dados dos pontos de entrega, dos veículos disponíveis, e das entregas são armazenados na forma de tabelas em arquivos texto, que podem ser facilmente editados em um editor de texto. O problema é otimizar a alocação das entregas para os veículos disponíveis, levando em consideração as restrições de cada veículo, de tal forma que a distância total percorrida por todos eles seja mínima.

Para resolver o problema foram implementados os algoritmos genéticos descritos por Haupt e Haupt(46) e canônico Tomassini(47). A representação das soluções e os operadores genéticos utilizados são baseados no problema do caixeiro viajante (capítulo 5. No restante deste capítulo são descritas as características peculiares ao problema de roteirização de veículos.

6.2 Representação de uma solução

Cada solução para o problema é caracterizada pela lista dos veículos a serem usados nas entregas. Para cada veículo é necessário conhecer o seu roteiro, isto é, a seqüência dos pontos de entrega a serem atendidos por ele.

Para exemplificar, consideremos o caso de 9 pontos de entrega, identificados pelos números 1, 2, 3, 4, 5, 6, 7, 8 e 9. Vamos identificar o centro de distribuição pelo número 0. Um exemplo de solução é a lista de roteiros que se segue.

veículo roteiro v1 6 − 5 − 2

v2 4 − 1 − 9 − 3

v3 7 − 8

Figura 6.1: Exemplo de roteiros.

1 2 3 4 5 6 7 8

P1

2 4 6 8 7 5 3 1

P2

A figura 6.1 mostra este roteiro graficamente. Neste exemplo o veículo v1 deve sair do centro de

O primeiro passo para utilização de um algoritmo genético é representar uma solução como um cromossomo. Para este problema o cromossomo é representado por uma lista circular de números inteiros, onde cada número inteiro identica um ponto do roteiro (o centro de distribuição (0) ou um ponto de entrega). Para o exemplo acima tem-se a lista circular

0 − 6 − 5 − 2 − 0 − 3 − 4 − 1 − 9 − 0 − 7 − 8

O roteiro de um veículo começa em um 0 e termina no 0 seguinte, uma vez que 0 está repre- sentando o centro de distribuição e cada veículo deve partir do centro de distribuição, visitar os pontos de entrega, e retornar ao centro de distribuição. Assim conseguimos extrair os roteiros

0 − 6 − 5 − 2 − 0

0 − 3 − 4 − 1 − 9 − 0 0 − 7 − 8 − 0 da solução acima, implicando na utilização de três veículos.

Esta representação pode ser também entendida como um roteiro a ser seguido por um único veículo com capacidade de carga limitada. Esta limitação faria com que este único veículo aten- desse alguns clientes (de acordo com a sua capacidade), e retornasse ao centro de distribuição para recarregar antes de atender aos clientes restantes. No exemplo acima poderíamos então interpretar a solução da seguinte forma: o veículo sai da base (0) para atender os clientes 6, 5 e 2, retorna à base (0) para recarregar e atender os clientes 3, 4, 1, e 9, e novamente retorna à base (0) para recarregar e atender agora os clientes 7 e 8, retornando definitivamente à base.

O algoritmo genético utilizado é baseado no algoritmo utilizado para solução do problema do caixeiro viajante, no capítulo 5, onde um cromossomo é representado por uma permutação de n números naturais. Desta forma uma restrição na representação adotada é a não repetição de um número na lista circular, significando que cada ponto do roteiro não deve ser visitado mais de uma vez. Porém o número que identifica o centro de distribuição pode ocorrer várias vezes. Cada ocorrência adicional do centro de distribuição significa a utilização de um veículo adicional (ou de um retorno à base para recarregar o veículo, na interpretação onde um único veículo é utilizado).

Para adaptar a representação até então proposta a esta condição de não repetição de números na lista circular, introduzimos novos pontos representando o mesmo centro de distribuição, um para cada veículo adicional. As coordenadas destes novos pontos devem ser iguais às coordena- das do centro de distribuição, uma vez que eles o representam. Assim a solução acima passaria

a ser representada, por exemplo, como

0 − 6 − 5 − 2 − 10 − 3 − 4 − 1 − 9 − 11 − 7 − 8

onde os locais 0, 10 e 11 identificam o mesmo centro de distribuição (têm as mesmas coordena- das).

De forma geral, para o caso de um único centro de distribuição, n pontos de entrega, e k veículos, uma solução é representada por uma permutação dos (n + k) primeiros números naturais. Os números do conjunto {1, 2, . . . , n} representam os pontos de entrega, e os números do conjunto {0, n + 1, n + 2, . . . , n + k − 1} representam o centro de distribuição.

Documentos relacionados