7 PROPOSIÇÃO DE UM MODELO PARA RESOLUÇÃO DO
7.3 A PRESENTAÇÃO E D ESCRIÇÃO DO M ODELO
7.3.3 Busca Tabu Aplicada na Melhoria dos Roteiros
Para gerar uma solução inicial foi empregada a versão paralela do método das economias de Clarke e Wright (1964) na qual roteiros são construídos de forma simultânea a partir da leitura de uma lista de economias si, j em ordem decrescente dos valores. O algoritmo da versão paralela do Método das Economias é mostrado na Figura 16.
Algoritmo da versão paralela do Método das Economias
Passo 1. Selecionar um veículo disponível. Caso não haja mais veículos, parar
Passo 2. Calcular as economias si,j para todos os pares de pontos de parada i, j: si, j = d0, i + d0, j – di, j Passo 3. Ordenar os pares i, j na ordem decrescente dos valores das economias si, j
Passo 4. Começar pelo par de vértices i, j com maior economia e proceder na seqüência obtida no Passo 2. Para um par i, j da seqüência, verificar se i, j estão ou não incluídos em um roteiro
existente:
Passo 4.1. Se i e j não foram incluídos em nenhum dos roteiros já abertos, então criar um novo roteiro com os vértices i e j se a(s) restrição(ões) não for(em) violada(s)
Passo 4.2. Se exatamente um dos pontos i ou j já pertence a algum roteiro pré-estabelecido, verificar se este ponto é o primeiro ou último do roteiro. Se isso ocorrer, acrescentar a ligação i, j a esse roteiro caso a(s) restrição(ões) não seja(m) violada(s). Caso contrário, desconsiderar o par i, j.
Passo 4.3. Se ambos os vértices i e j já pertencem a dois roteiros distintos pré-estabelecidos (roteiros diferentes), verificar se ambos são extremos dos respectivos roteiros (vértices adjacentes a base). Nesse caso, unir os roteiros em um só, se a(s) restrição(s) não for(em) violada(s)
Figura 16 – Algoritmo da versão paralela do Método das Economias Fonte: Clarke e Wright (1964)
A solução inicial define uma primeira seqüência de visita aos clientes conforme os critérios do CVRP, sem exceder o peso, o comprimento do compartimento de carga, respeitando as restrições de carregamento tridimensionais e de jornada máxima de trabalho. Para o cálculo das economias si,j é definida uma matriz simétrica de distâncias euclidianas (não arredondadas)
entre os pontos. O número de veículos (que corresponde ao número de rotas) é definido nesta etapa, sendo que este valor não poderá ser ultrapassado na fase seguinte de melhoria. Uma modificação pré-melhoria é executada sobre os roteiros resultantes da solução inicial. Este procedimento é idêntico ao movimento intra-rota que será detalhado posteriormente.
O processo de melhoria da solução inicial foi realizado com a aplicação da Busca Tabu, uma metaheurística que, desde sua introdução por Glover (1986), vem sendo largamente empregada na resolução de problemas combinatoriais. O pseudo-código com o procedimento de Busca Tabu para o modelo proposto é mostrado na Figura 17.
Nas linhas de 1 a 5 da Figura 17 é feita a inicialização da Busca Tabu tornando a solução inicial (e a possível pré-melhoria) como solução corrente. Neste estágio também, a solução incumbente (a melhor solução encontrada até o momento) assume o valor da solução corrente. É inicializado também o contador de tempo, uma vez que o critério de parada é um tempo limite de processamento.
A aplicação da Busca Tabu requer inicialmente a definição de um espaço de busca e de uma estrutura de vizinhança. No modelo proposto o espaço de busca foi definido como o conjunto de rotas que satisfaz a todas as restrições, mas ele pode ser explorado considerando também as infactíveis a fim de favorecer a diversificação. Já a vizinhança é explorada através de dois tipos de movimento: inserção inter-rotas e trocas intra-rota respectivamente.
Na inserção inter-rotas (linha 12) para cada rota j toma-se cada um dos i clientes na seqüência em que aparecem e insere-se cada um destes no final de cada uma das k outras rotas. O cliente enviado é inserido na rota k sendo testado em todas as posições adjacentes aos n/2 pares de melhores economias da rota (sendo n o tamanho da rota para onde foi enviado), o que já constitui um movimento intra-rota (linha 13).
1
Procedimento de Busca Tabu para o modelo proposto Inicializa parâmetros gerais a partir da leitura da instância.
Inicializa SoluçãoCorrente a partir do método das economias considerando restrições de peso, carregamento tridimensional, distribuição de peso e tempo.
Armazena SoluçãoCorrente como a SoluçãoIncumbente Inicializa contador de tempo
Enquanto tempo for menor que tempo de critério de parada faça Inicializa MelhorTroca com maior custo possível
Para j =1 até número de rotas da SoluçãoCorrente Para i =1 até número de clientes da rota j
Para k =1 até número de rotas da SoluçãoCorrente sendo k diferente de j Inicializa TrocaAtual com SoluçãoCorrente.
Insere cliente i da rota j no final da rota k da TrocaAtual.
Faz melhoria na rota j e na rota k da TrocaAtual.
Se TrocaAtual é melhor que MelhorTroca então MelhorTroca recebe TrocaAtual.
Fim se
Se MelhorTroca é melhor que SoluçãoCorrente então Vai para ExecutarMovimento.
Se SoluçãoCorrente for melhor que SoluçãoIncumbente então SoluçãoIncumbente recebe SoluçãoCorrente
Fim se Fim enquanto
Figura 17 – Pseudo-código do procedimento de Busca Tabu Fonte: O autor
O movimento intra-rota (linha 13) inicia quando um cliente é removido da rota j para a rota k (seguindo a lógica da inserção inter-rotas). Na rota original (j) procura-se trocar cada um dos clientes de posição, avaliando a distância final resultante.
Neste tipo de movimento, caso tenha sido encontrada uma ordenação de menor distância que a inicial, é realizado o procedimento de avaliação do carregamento no veículo desta rota. Esta avaliação contempla também a verificação da factibilidade da distribuição de peso nos eixos do veículo (peso máximo por eixo). Tal distribuição é calculada para cada item considerando a concentração do peso em seu ponto central. O peso de cada item incidente no eixo traseiro é calculada através da seguinte expressão, derivada de Valente et al. (1997):
Cat = (Ddi x Pi)/Dee (20)
onde:
Cat é o peso de cada item no eixo traseiro;
Ddi é a distância entre o eixo dianteiro e o ponto central do item mi; Pi é o peso do item mi;
Dee é a distância entre eixos.
Ao final é feito o somatório dos valores de Cat calculados para todos os itens. O valor obtido é então comparado com o limite de carga conforme a especificação técnica do veículo. A carga sobre o eixo dianteiro será a diferença entre a carga total e a carga incidente no eixo traseiro.
Caso a avaliação da nova solução pela função-objetivo tenha sido melhor que a inicial então esta nova solução da rota é retornada. Do contrário retorna uma resposta informando que há uma melhor solução possível da rota inicial. O objetivo deste passo é realizar uma busca sem a verificação contínua do carregamento para cada troca de posição dos clientes já que este é o que demanda maior tempo computacional. Pelo fato de um cliente ter sido retirado da rota é muito provável que o carregamento seja bem sucedido independente da ordenação imposta na rota.
Mesmo assim supõe-se que, em boa parte das vezes, para um dado conjunto de clientes suas diferentes ordenações possíveis não impossibilitarão a factibilidade do carregamento.
Uma segunda etapa é executada no movimento intra-rota se e apenas se o valor da solução que a etapa anterior encontrou não foi melhor que a inicial (probabilidade de uma ordenação
diferente com distância menor gerar excessos no carregamento) e houve uma ordenação encontrada com menor distância. É efetuada a troca de posição dos clientes na rota dois a dois por proximidade (clientes adjacentes) avaliando a solução gerada. Para todas as trocas realizadas dois a dois verifica qual foi a melhor e se houve melhoria em relação a solução inicial reinicia o procedimento de trocas. Caso contrário retorna a solução inicialmente enviada.
Na linha 14 se uma melhoria (menor distância) é encontrada na troca do cliente que está sendo avaliado atualmente, então essa nova ordenação será escolhida como a melhor, e o procedimento é reiniciado. Quando não houver melhoria para a troca de posições realizada com todos os clientes, então o procedimento é encerrado.
A inserção inter-rotas e as trocas intra-rotas são realizadas até que não ocorram mais melhorias na solução incumbente.
Os movimentos detalhados acima são realizados possibilitando excesso de peso e também excesso de comprimento, o qual é limitado a 50% do comprimento do compartimento de carga. O número de veículos nesta etapa não pode ultrapassar o valor definido na solução inicial.
Uma solução R gerada por um movimento é avaliada através da seguinte função-objetivo:
f(R) = DT + α . Ept + β . Ec + δ1 . Eed + δ2 . Eet + π . Etc + γ f(i, j) (21)
onde:
DT representa a distância total do roteiro definido na solução;
α representa uma penalidade aplicada sobre a infactibilidade de peso total e seu valor é igual a 20ē/D onde ē representa o custo médio de uma aresta e D o peso máximo permitido para um veículo;
Ept representa o excesso de peso total;
β representa uma penalidade aplicada sobre a infactibilidade de comprimento da carga e seu valor 20ē/L onde ē representa o custo médio de uma aresta e L o comprimento máximo do compartimento de carga;
Ec representa o excesso de comprimento da carga em relação ao comprimento do compartimento de carga;
δ1 representa uma penalidade aplicada sobre a infactibilidade de peso no eixo dianteiro e seu valor é igual a 20ē/P1 onde ē representa o custo médio de uma aresta e P1 o peso máximo permitido no eixo dianteiro;
Eed representa o excesso de peso no eixo dianteiro;
δ2 representa uma penalidade aplicada sobre a infactibilidade de peso no eixo traseiro e seu valor é igual a 20ē/P2 onde ē representa o custo médio de uma aresta e P2 o peso máximo permitido no eixo traseiro;
Eet representa o excesso de peso no eixo traseiro;
π representa uma penalidade aplicada sobre a infactibilidade de tempo de ciclo e seu valor é igual a 20ē/Tc onde ē representa o custo médio de uma aresta e Tc o tempo máximo de ciclo;
Etc representa o excesso no tempo de ciclo;
γ representa um parâmetro de diversificação dado por 2n×v onde n é o número de clientes da instância e v é o número de rotas (que provém da solução inicial)
f(i, j) a razão entre o número de vezes que um movimento designa o cliente i para o veículo j e o número de movimentos aceitos
O custo médio de uma aresta é dado pela divisão entre o somatório dos coeficientes cij
de todas as arestas que compõem o grafo G (que representa a rede de atendimento) e o número de arestas em G. Além disso, os excessos de peso total, comprimento, peso no eixo dianteiro, peso no eixo traseiro e de tempo de ciclo, referem-se ao somatório das parcelas individuais que correspondem a cada roteiro da solução.
A equação 21 tem o primeiro, segundo, terceiro e sexto termos com o mesmo significado do primeiro, segundo, terceiro e quarto termos da equação 19 utilizada por Gendreau et al. (2006) e Araújo (2006).
Assim como em Gendreau et al. (2006), foram adotados valores dinâmicos para α e β que variam 10% para mais quando o excesso de peso e excesso de comprimento, entre um
movimento e outro, aumentam e 10% para menos quando diminuem. Já os coeficientes δ1, δ2 e π são mantidos estáticos, o que produz melhores resultados conforme avaliado previamente em testes.
A diversificação da busca é promovida pelo terceiro termo da expressão sendo γ = v
n×
2 (melhor valor demonstrado pelos experimentos computacionais) e f(i, j) a razão entre o número de vezes que um movimento designa o cliente i para o veículo j e o número de movimentos aceitos, estabelecido da mesma forma que em Gendreau et al. (2006).
Para restrição de vizinhança, foi adotado aqui um valor de p = min [n/4; 20]. A vizinhança de um ponto é estabelecida como os pares econômicos (si,j) que contém o ponto em consideração, ordenados conforme valores decrescentes das respectivas economias. Esta lista é percorrida até o valor p definido anteriormente. A Lista Tabu armazena o inverso de todos os movimentos feitos nas últimas iterações: se o cliente i passa da rota j para a rota k nas próximas iterações, é proibido mover o cliente i da rota k de volta para a rota j. O tabu tenure, que indica o número de iterações durante as quais um movimento deve permanecer com o status de tabu, foi definido experimentalmente como o mínimo valor entre n/2 e 15.
Como critério de aspiração considera-se que um movimento tabu é permitido se este resulta em um valor melhor para a função-objetivo do que aquele encontrado para a solução incumbente. Foi adotado também um critério de intensificação duplicando o valor de p nas 3 iterações seguintes quando a solução corrente melhora a solução incumbente.
É comentada a seguir a implementação computacional do modelo.