• Nenhum resultado encontrado

Desenvolvimento do ambiente de teste para o PRDVJT

Capítulo 3. Problema de Roteamento Dinâmico de Veículos com Janelas de Tempo

3.4. Descrição do ambiente de teste para o PRDVJT

3.4.4. Desenvolvimento do ambiente de teste para o PRDVJT

O ambiente de simulação consiste em módulos independentes desenvolvidos através da linguagem de programação C++. Cada módulo representa um departamento da empresa e troca informações com outros módulos através de um banco de dados MySql.

A apresentação de cada módulo é feita seguindo o processo de atendimento de um novo pedido, como foi descrito no item 1.2.3. A Figura 3.9 ilustra o processo de chegada e aceite do pedido.

Cliente liga para a empresa e faz novo pedido

Call Center da empresa recebe a

ligação e cadastra o novo pedido (Módulo Call Center)

Banco de dados dos pedidos Departamento de otimização rápida

(Módulo Aceite) decide se pedido deve ou não ser atendido no mesmo dia

Novo pedido

Pedidos em aberto Informa prazo para atendimento (mesmo dia?)

Confirma prazo para atendimento

Banco de dados dos roteiros

Recebe roteiros

Atualiza roteiro

EDI

Etapa inexistente na prática

Recebe o prazo

Figura 3.9. Etapas de recebimento de pedidos e confirmação de atendimento

Para estas etapas foram desenvolvidos dois módulos, um módulo denominado Callcenter

O módulo Callcenter simula o recebimento de ligações dos clientes. Numa fase inicial,

este módulo cadastra todos os PEC+ no banco de dados dos pedidos. Em seguida, faz a leitura de todos os PDC+ e PDC– do problema teste e fica em modo de espera. Toda vez em que a hora do sistema – tempo marcado pelo relógio do computador – for superior ao momento de chegada do pedido, este é cadastrado no banco de dados dos pedidos como pedido em aberto.

O módulo Aceite acrescenta uma etapa de otimização que atualmente não é encontrada na

prática14. Este módulo consulta o banco de dados dos pedidos a cada dois segundos a procura de pedidos em aberto. Ao encontrar um pedido em aberto, seus dados são lidos, as rotas do banco de dados dos roteiros são consultadas e um processo de otimização rápida é iniciado. A otimização rápida busca a melhor posição de inserção factível do novo pedido nos roteiros. Caso uma posição de inserção tenha sido encontrada, o pedido é marcado como aceito para atendimento no mesmo dia. Caso contrário, o pedido é agendado para o dia seguinte.

Como o método do vizinho mais próximo não possui a fase de melhor inserção, o módulo

Aceite será desativado para a realização de seus testes.

A Figura 3.10 ilustra a movimentação dos veículos, a comunicação dos motoristas com a empresa (e vice-versa), e a gestão dos roteiros e das coletas completadas – simulação da seção 1.2.4.

14 Segundo uma empresa entrevistada, segue-se, a qualquer custo, a política de atendimento: pedidos recebidos antes

das 14hs devem ser atendidos no mesmo dia. Porém, numa discussão sobre o assunto, a inserção de uma etapa de otimização rápida, como a do módulo Aceite, foi vista como uma grande contribuição para se reduzir o número de prazos não cumpridos, além de ser uma alternativa para a flexibilização da política de atendimento.

Banco de dados dos roteiros Sistema de posicionamento via

satélite informa as coordenadas dos veículos

Sistema de rastreamento consolida as informações de coordenadas com os roteiros

(Módulo GPS)

Recebe roteiro dos veículos

Central de rastreamento gerencia roteiros, horários e

coletas efetuadas (Módulo Coleta) Atualiza posição dos veículos Atualiza roteiros Controla abertura da

porta do baú, informa alterações no roteiro

Avisa que a coleta foi completada

Motorista e ajudante

Figura 3.10. Etapas de movimentação dos veículos e rastreamento das coletas

Os dois módulos que simulam estas etapas são GPS e Coleta.

O módulo GPS controla e movimenta os veículos no espaço, armazenando numa tabela do

banco de dados as seguintes informações sobre os veículos: coordenadas (x, y), momento da

última atualização da posição, carga (demanda carregada), quilometragem e tempo de viagem até o momento.

Para atualizar estas informações, a cada dez segundos o módulo GPS seleciona todos os

veículos que possuem como rótulo parado ou transitando e cujas posições não foram atualizadas

há pelo menos 4 segundos. Para cada veículo selecionado é calculada a diferença de tempo entre a hora atual e o momento da última atualização. Com esta diferença de tempo, velocidade média do veículo (40 km/h), distância e coordenadas do próximo destino, o módulo GPS projeta as

próximas coordenadas.

Se o veículo chegar a uma distância suficientemente próxima do destino (utilizamos 100 metros como distância suficientemente próxima), o rótulo do veículo é alterado para coletando,

permanecendo neste rótulo até receber novas instruções do módulo Coleta. Caso o próximo

destino seja o depósito, o rótulo do veículo é alterado para final_depósito e o veículo não poderá

mais ser utilizado para outras coletas.

Caso a simulação adote estratégia de espera, o rótulo do veículo é determinado para

esperando quando o tempo de chegada no próximo destino for inferior a ei. Seu rótulo é

posteriormente mudado para parado e em seguida para transitando quando o tempo de chegada

for maior ou igual a ei. Além disso, se o veículo estiver em espera e o tempo atual for entre 11hs

e 14hs – horário em que o motorista pode iniciar seu almoço – e o veículo ainda não efetuou a parada para almoço, o rótulo esperando é automaticamente alterado para almoçando (o motorista

recebe uma mensagem para deixar o veículo e ir almoçar), ficando neste estado por uma hora. O módulo GPS também monitora todos os horários de almoço, alterando os rótulos de almoçando para parado assim que a duração do almoço tenha sido completada.

Quando é permitida a estratégia de posicionamento, os veículos em espera podem receber o rótulo reposicionando caso sua capacidade seja inferior a 1.650 e a diferença entre ln+1 e a soma

do tempo da posição atual até um ponto estratégico com o tempo do ponto estratégico até o depósito seja superior a 30 minutos. Esta condição garante que o veículo a ser reposicionado poderá coletar um cliente adicional enquanto se movimenta até o ponto estratégico – a estratégia de posicionamento será detalhada na seção 3.5.5. Também, se o rótulo do veículo é

reposicionando e o tempo atual está entre 11hs e 14hs e o veículo não parou para almoço, o

veículo recebe o rótulo almoçando.

O módulo Coleta cria um lista de todos os veículos com rótulos coletando. Se o rótulo do

veículo é coletando, o módulo Coleta acrescenta à carga do veículo a demanda do cliente visitado

e soma o tempo de serviço do cliente ao tempo de viagem do veículo. Quando o tempo atual for superior ao tempo de viagem somado ao tempo de serviço, o módulo Coleta altera o rótulo para parado, ou, almoçando15.

15 A preferência é que os motoristas almocem próximo aos locais dos clientes. Portanto, a posição de almoço é , em

A Figura 3.11 mostra o diagrama de rótulos (estados) dos veículos.

0

0

1

1

2

2

3

3

4

4

5

5

6

6

00

Legenda dos rótulos: (0) parado, (1) transitando, veículo em movimento; (2) coletando, veículo chegou ao destino e está efetuando a coleta; (3) final_depósito, veículo terminou seu roteiro; (4) almoçando, veículo parado em horário de almoço, (5) esperando, veículo em estado de espera até novo comando, (6)

reposicionando, veículo está se movendo a um ponto de espera estratégico.

Figura 3.11. Diagrama de rótulos dos veículos

Banco de dados dos roteiros Consulta roteiro dos veículos Retorna roteiros otimizados

Informa novo roteiro (pode ocorrer diversion) Departamento de Otimização busca maximizar a lucratividade da operação em tempo real (Módulo Otimizador) Consulta roteiros modificados Central de rastreamento

gerencia roteiros, horários e coletas efetuadas (Módulo Coleta)

Figura 3.12. Otimização em tempo real dos roteiros

O módulo Otimizador consulta o banco de dados dos roteiros e as coordenadas atuais dos

veículos. A partir dessas informações, o módulo projeta como seria a posição e os rótulos dos veículos para um período futuro de tempo_projeção (tempo_projeção é definido em 20

segundos).

O módulo projeta a situação atual alguns segundos no futuro para compensar o tempo de execução da heurística de otimização. De nada adiantaria tirar uma “foto” da situação atual, otimizá-la por 10 segundos e, no momento em que a solução otimizada fosse implementada, esta não é mais vantajosa ou factível (por exemplo, um veículo entrou em horário de almoço).

Note que a definição do tempo_projeção possui um balanço: de um lado, tempos curtos

reduzem a probabilidade do método encontrar movimentos factíveis, de outro, tempos longos podem resultar em soluções pouco otimizadas.

Existem situações em que mesmo a solução projetada e otimizada não poderá ser aproveitada porque, durante o processo de otimização, ocorreu pelo menos um dos casos abaixo:

• Algum veículo chegou ao próximo destino;

• Um novo pedido chegou e este foi inserido no roteiro de algum veículo; • O horário de almoço de algum veículo começou ou terminou;

• Algum veículo entrou em espera (ou saiu da espera);

• O roteiro de algum veículo foi alterado por algum módulo (Callcenter, Aceite, GPS,

Coleta, Otimizador).

3.5. Adaptações dos métodos do problema estático para o dinâmico