• Nenhum resultado encontrado

Uma nova abordagem heurística para o VCSP com changeovers 1 Estrutura da abordagem proposta

O problema de programação integrada de veículos e tripulações

4.3 Uma nova abordagem heurística para o VCSP com changeovers 1 Estrutura da abordagem proposta

No caso do VCSP com um depósito, constatou-se que, para as 20 instâncias analisadas, a média dos tempos de processamento foi de 13 segundos, evidenciando que a formulação permitiu a obtenção de soluções óptimas em tempos computacionais aceitáveis. No entanto, deve-se salientar a importância de se usar métodos heurísticos para este tipo de problema:

 Os métodos heurísticos são mais flexíveis, no que concerne à consideração de novas restrições ou de novas funções objectivo.

 Os métodos heurísticos permitem que as abordagens de planeamento desenvolvidas sejam adaptadas ao paradigma multiobjectivo com uma maior facilidade.

 Devem ser desenvolvidos algoritmos e interfaces que que facilitem o uso por parte dos planeadores em empresas de transporte público.

 O uso de solvers comerciais (baseados em programação matemática) requer, em geral, um conhecimento aprofundado de técnicas de optimização, dificultando o seu uso no cotidiano das empresas de transporte público.

Assim, será desenvolvida uma abordagem heurística para o VCSP. Tendo em vista o grande número de variáveis do problema, a abordagem heurística proposta seguirá o princípio da decomposição desenvolvido por Steinzen et al. (2007), em que o

vehicle scheduling e o crew scheduling são decompostos, mas há uma concatenação entre os dois problemas.

A seguir, na Figura 3, é ilustrada a abordagem proposta para o VCSP com

changeovers. Nesta proposta, o problema é solucionado sobre o uso dos dois recursos (viaturas e tripulantes) na cobertura das viagens. Uma heurística GRASP é proposta para a programação das viaturas e um Algoritmo Genético (Genetic Algorithm – GA) é proposto para a programação das tripulações. Deve-se observar que a intersecção entre os algoritmos consiste nos procedimentos de melhoramento do GRASP, que se destinam a integrar os blocos de viaturas aos serviços.

Figura 3: Estrutura da abordagem proposta para o VCSP com changeovers.

A inovação desta abordagem está no facto de que a programação de veículos e de tripulações ocorre directamente sobre as viagens ao contrário do que ocorre com a abordagem tradicional, em que os serviços são programados sobre os blocos gerados para as viaturas.

4.3.2 Heurística GRASP proposta para a programação de veículos

A seguir, será apresentada a heurística utilizada para a programação de veículos. O GRASP proposto é dividido em duas fases: uma fase de construção de uma programação de veículos inicial, e uma fase de melhoria, com vistas a concatenar a programação dos veículos com a programação de tripulações.

Fase de construção

A heurística construtiva é descrita no Quadro 6. As variáveis da fase de construção são m viagens, nv veículos e um vector RCL o qual consiste na lista de candidatos restrita. A RCL armazena os veículos que podem ser alocados a uma dada viagem. A cardinalidade da RCL é representada pela variável k. Uma função gulosa Γ é utilizada para seleccionar veículos armazenados na RCL.

O número de veículos é representado pela variável nv. Inicialmente, é requerida a obtenção de um limite superior para o número de veículos necessário para cobrir um conjunto de viagens. Esta aproximação pode ser obtida dividindo-se o tempo de ciclo da linha pelo seu headway13. Tendo em vista que o headway usualmente varia ao longo do dia, pode-se calcular essa quantidade de veículos separadamente para diversos períodos da operação da linha. Na fase de construção aqui reportada, foi adoptado o menor

headway 14.

Quadro 6: Heurística construtiva para a programação de veículos.

Em seguida, é criada uma matriz com nv linhas para armazenar as viagens da tabela de horários cobertas por cada veículo. Deve-se salientar que o número de

13Na área de transportes, usa-se o termo headway para representar a freqüência de um serviço, ou seja, o

intervalo de tempo decorrido entre a passagem de dois veículos de uma mesma linha.

14

Ao se considerar o menor headway obtém-se uma estimativa da quantidade de veículos que contempla a pior situação possível. Deste modo, não há como a estimativa de nv ser menor que a quantidade real de veículos requerida para a execução das viagens.

para i=1 até m faça

para j=1 até nv faça

se Γ(j) ≥ 0 e Γ(j) ≤ min(Γ) então k=k+1; RCL(k)=j; fim-do-se fim-do-para Sortear um veículo da RCL

Aloca a viagem ao veículo sorteado fim-do-para

veículos requerido para cobrir as viagens pode vir a ser menor do que nv, visto que este número é uma estimativa.

Uma função gulosa Γ é usada como critério de alocação de viagens a um veículo. Para cada veículo, calcula-se a diferença entre o tempo de término da última viagem alocada naquele veículo e o tempo de início das demais viagens. Se a diferença entre o término da última viagem alocada ao veículo j e o início da viagem i é maior ou igual a zero (ou seja, Γ(j) ≥ 0), o veículo j pode executar a viagem i. Portanto, o veículo

j é inserido na RCL.

Para não serem gerados blocos com folgas grandes, adoptou-se o seguinte critério: serão inseridos na RCL veículos que tenham folga mínima em relação à viagem

i (isto é, Γ(j) ≤ min(Γ)). Procedendo-se dessa forma, espera-se que o número de veículos nv fornecido pela heurística seja mínimo.

Fase de melhoramento

Após a solução inicial construída, tem-se uma programação de veículos. Essa programação não leva em conta os serviços de tripulantes, por isso, na prática, não seria exequível. A fase de melhoria da heurística proposta consiste em concatenar a programação de veículos com a programação de tripulações. Portanto, é na fase de melhoramento do algoritmo de programação de veículos que reside a integração entre os dois schedulings.

Tal integração consiste em distribuir, de uma forma mais equilibrada, as viagens entre os veículos. Além disso, a fase de melhoramento tenta reduzir os tempos que os veículos ficam à espera de viagens.

A fase de melhoramento é composta por dois tipos de movimentos: movimento de inserção caudal e movimento de inserção de blocos.

O movimento de inserção caudal será descrito a seguir, no Quadro 7. A denominação “caudal” vem da propriedade do movimento de realocar as últimas viagens de um bloco para outro, de modo a equilibrar as viagens por veículo.

Quadro 7: Algoritmo do movimento de inserção caudal.

Passo 1: Gerar uma lista com as últimas viagens de cada bloco.