Ciclo de vida do plano de trajeto

Nesta página, descrevemos o ciclo de vida de um plano de rota usando a API Route Optimization, desde a identificação das suas necessidades de roteamento até a integração do plano ao seu sistema.

Ao seguir as etapas do plano de rota, é possível atingir os seguintes objetivos:

  • Mapeie as operações da sua frota:traduza sua frota física, restrições complexas e metas de negócios em código para a API.
  • Otimizar os planos de rota para sua empresa:entenda como refinar seu plano de rota para que ele atenda às suas metas e melhore suas operações diárias.
  • Implante na produção:implemente seu plano de rota incluindo-o nas operações diárias.

O diagrama a seguir mostra o ciclo de vida de um plano de trajeto.

Um diagrama de fluxo da vida de um plano de rota explicado no texto abaixo

A fase de implementação de um plano de rota ocorre quando você integra a API pela primeira vez ou quando os requisitos de negócios mudam significativamente. Ele abrange as etapas de 1 a 5.

A fase de operações diárias é mais leve, e o refinamento é mínimo. Ele abrange as etapas 2 a 4.

As etapas do ciclo de vida de uma rota são as seguintes:

  1. Defina o escopo do problema:identifique e organize seus objetivos, recursos, tarefas e restrições para ter uma visão completa das suas operações antes de começar a usar a API.
  2. Mapeie seus dados:traduza a realidade da sua empresa em parâmetros de API para que o plano de rota reflita como você precisa que sua frota opere.
  3. Criar uma solicitação e receber um plano de rota:insira seus dados na API e receba um plano de rota otimizado.
  4. Refine seu plano de rota:teste o plano de rota e faça ajustes nas restrições e nos objetivos para garantir que ele atenda a todas as suas necessidades.
  5. Integrar o plano de rota:conecte o plano de rota aos seus sistemas para oferecer uma navegação prática.

Defina o escopo do problema

Antes de usar a API, você precisa organizar os detalhes das suas operações diárias em categorias de dados claras. Isso permite que você inicie o processo de implementação com clareza sobre quais são seus recursos e tarefas atuais, o que os restringe e quais são os objetivos que você quer alcançar com sua frota.

Identificar os recursos e as tarefas

Uma etapa importante ao planejar seu plano de rota é identificar os recursos e as tarefas, que são seus veículos e remessas.

Os veículos As remessas
  • Número:quantos veículos você tem?
  • Locais:onde os veículos começam e terminam?
  • Tempo:qual é o horário de trabalho dos motoristas dos veículos?
  • Capacidade:quais são os limites dos seus veículos?
  • Custos:quais são os custos de execução da sua frota?
  • Locais:onde estão os pontos de retirada e entrega?
  • Demandas:qual é o peso ou o tamanho dos pacotes?
  • Restrições:há janelas de tempo específicas para entrega?
  • Tempo de serviço:quanto tempo o motorista precisa para estacionar e descarregar?
  • Requisitos:a remessa exige um tipo específico de veículo ou motorista?

Identificar as restrições

As restrições são os limites e as restrições sobre como você pode usar seus veículos e como precisa lidar com as remessas. Eles determinam a maioria das suas operações e são vitais ao criar um plano de rota otimizado.

As restrições geralmente se enquadram em duas categorias:

Restrições rígidas Restrições flexíveis
Esses são limites que não podem ser ultrapassados. Por exemplo, um caminhão não pode transportar mais peso do que sua capacidade máxima, e um motorista não pode fazer uma coleta depois que uma loja fecha. Essas são preferências que podem ser violadas se necessário, geralmente com um custo de penalidade. Por exemplo, você pode preferir carregar um caminhão apenas até 80% da capacidade ou entregar antes de um horário de destino, mas não se importa em exceder esses limites para conseguir uma rota melhor.

As restrições comuns incluem:

  • Limites de capacidade:o peso, o volume ou o número máximo de itens que um veículo pode transportar.
  • Janelas de tempo:os horários específicos em que um local está aberto para uma visita ou os horários de turno específicos de um motorista.
  • Custos:o custo de operar um veículo ou pular uma entrega. Um dos principais objetivos da API é gerar um plano de rotas econômico.
  • Intervalos do motorista:períodos de descanso do motorista normalmente exigidos pelas leis trabalhistas após um determinado número de horas de trabalho.

Definir seus objetivos de negócio

Depois de estabelecer seus recursos, tarefas e limitações, é hora de definir quais métricas são mais importantes para sua empresa. Esses objetivos andam de mãos dadas com as restrições e ajudam você a decidir o que é mais importante ao planejar um trajeto.

Veja alguns exemplos de objetivos de negócio:

Tamanho da frota Distância Tempo Custo
Você quer minimizar o número de veículos usados ou usar toda a frota para terminar o dia de trabalho mais cedo? Você quer o caminho mais curto para economizar combustível ou prefere um trajeto mais rápido que pode ser mais longo devido ao uso de rodovias? Você quer minimizar o total de horas trabalhadas ou priorizar a chegada em horários específicos, o que pode aumentar o tempo gasto no trajeto? Você quer minimizar as despesas operacionais, como salários e combustível, ou aceitar custos mais altos para cumprir prazos rígidos?

Mapear seus dados

Depois de coletar os dados, mapeie-os para que correspondam às propriedades da API. Isso fornece ao otimizador todas as informações para retornar um plano de rota que considera sua realidade de negócios.

Use os parâmetros nas próximas tabelas para mapear os recursos, as tarefas, as restrições e os objetivos que você mapeou na seção Definir o escopo do problema.

Mapeamento de variáveis

Conceito do mundo real Parâmetro da API Descrição
Motorista ou veículo model.vehicles[] Representa um único veículo na sua frota.
Locais de depósito vehicles[].startWaypoint
vehicles[].endWaypoint
O local onde o veículo inicia e termina o trajeto.
Seu horário de funcionamento model.globalStartTime
model.globalEndTime
O horário de início mais cedo e o horário de término mais tarde para a operação de toda a frota.
Tarefa ou pacote model.shipments[] Representa um job. Pode ser um pickup, um delivery ou ambos.
Local da tarefa pickups[].arrivalWaypoint
deliveries[].arrivalWaypoint
A localização geográfica em que o job ocorre.
Tempo de serviço pickups[].duration
deliveries[].duration
O tempo gasto no local para concluir a tarefa (por exemplo, descarregar), sem incluir o tempo de viagem.

Mapeamento de restrições

Restrição do mundo real Parâmetro da API Descrição
Capacidade do veículo vehicles[].loadLimits Define o limite rígido ou flexível para a capacidade do veículo. Se o loadDemand de uma remessa exceder o limite restante, ela não será atribuída.
Tamanho do pacote shipments[].loadDemands A quantidade de capacidade do veículo que uma remessa consome.
Restrição de veículo shipments[].allowedVehicleIndices Restringe uma remessa para que ela só possa ser retirada ou entregue por veículos ou motoristas específicos.
Horário de funcionamento shipments[].pickups[].timeWindows ou shipments[].deliveries[].timeWindows Define os horários disponíveis para visitar um local. Se um veículo não puder chegar dentro dessa janela, a remessa será ignorada.
Limite de duração do turno vehicles[].routeDurationLimit Define um limite rígido ou flexível para o tempo que um motorista específico pode trabalhar (por exemplo, no máximo 8 horas), independentemente do horário de término global.
Intervalos do motorista vehicles[].breakRule Aplica regras de descanso específicas, como pausas obrigatórias após determinadas horas de trabalho.
Restrições da via vehicles[].travelMode Especifica o meio de transporte (por exemplo, DRIVE ou BICYCLE). Isso restringe o trajeto a vias legais e determina as velocidades usadas para calcular os tempos de viagem.

Mapeamento de objetivos

Objetivo real Parâmetro da API Descrição
Minimizar o tamanho da frota vehicles[].fixedCost Aplica um custo único para usar um veículo. Um custo fixo alto força uma rota a priorizar o uso de menos veículos em vez de aumentar a distância total ou o tempo de trabalho.
Minimizar distância vehicles[].costPerKilometer Aplica um custo para cada quilômetro percorrido. Prioriza trajetos mais curtos para economizar combustível e reduzir o desgaste.
Minimizar o tempo total vehicles[].costPerHour Aplica um custo para cada hora em que o veículo está ativo (incluindo o tempo de viagem e de espera). Prioriza a conclusão mais rápida.
Minimizar o tempo de percurso vehicles[].costPerTraveledHour Aplica um custo especificamente para o tempo gasto em movimento. Isso distingue entre ficar parado no trânsito (caro) e esperar em uma parada(potencialmente mais barato).
Priorizar determinadas tarefas shipments[].penaltyCost Aplica um custo se uma remessa específica for ignorada. Definir um valor alto garante que as tarefas críticas sejam priorizadas em relação às opcionais.

Criar a solicitação e receber uma resposta

Para usar a API Route Optimization para gerar um plano de rota, siga estas etapas:

  1. Configurar o ambiente:configure o projeto na nuvem do Google Cloud, ative a API e configure a autenticação. Para instruções, consulte Primeiros passos. Você só precisa seguir esta etapa uma vez.
  2. Envie a solicitação:crie o corpo da solicitação usando o mapeamento de dados definido na seção anterior. Para informações sobre endpoints, cabeçalhos e formatação de solicitações, consulte Fazer uma solicitação de API.
  3. Entenda a resposta:depois de receber uma resposta da API, entenda o plano de rota e o que cada parâmetro significa. Consulte Interpretar uma resposta.

Refinar o plano de rota

Traduzir a logística do mundo real em custos e restrições de API é uma tarefa complexa. Seu plano de rota inicial pode não corresponder aos objetivos de negócios ou às expectativas do motorista. Refinar o plano de rota é o processo iterativo de testar as rotas retornadas e ajustar os parâmetros até encontrar uma configuração que atinja suas metas.

Ajustar objetivos e restrições

Se o plano de rota gerado não atender às suas necessidades, modifique determinados parâmetros para alcançar resultados diferentes. Ajustar ou flexibilizar os parâmetros altera a forma como as metas conflitantes são resolvidas no plano de rota. Flexibilizar os parâmetros é uma maneira eficiente de descobrir quais deles estão causando erros nos seus planos de rota.

A tabela a seguir lista problemas comuns de roteamento e os parâmetros que você pode ajustar para resolvê-los.

Cenário Parâmetro Ajuste Descrição
Uma remessa importante é ignorada shipments[].penaltyCost Aumente o valor ou adicione custos de penalidade a outras remessas. Se a remessa for opcional, aumente o custo de penalidade para priorizá-la. Se a remessa for obrigatória (não tiver custo de penalidade), adicione custos de penalidade a outras remessas menos críticas. Isso as torna opcionais, o que libera tempo e capacidade do veículo para a remessa importante.
Envio adiado devido ao tempo softStartTime / softEndTime Adicionar janelas de tempo flexíveis As janelas de tempo rígidas descartam tarefas que estão até mesmo um minuto atrasadas. As janelas flexíveis permitem que o motorista chegue um pouco fora do horário pagando um "custo" em vez de falhar na atribuição.
Envio adiado devido ao peso loadLimits[].softMaxLoad e costPerUnitAbove Adicionar demandas de carga flexível Permite que um veículo exceda ligeiramente a capacidade ideal (com uma penalidade) em vez de deixar um pacote para trás.
Envio adiado devido à sobrecarga da frota model.vehicles[] ou shipments[].timeWindows Adicionar veículos ou flexibilizar janelas de tempo Se houver muitas remessas para a frota atual, especialmente durante os horários de pico, adicione mais veículos ou amplie as janelas de entrega para distribuir a carga de trabalho.
Os trajetos são muito longos ou ineficientes vehicles[].costPerKilometer / costPerHour Adicionar custos ou aumentar o valor deles Informa à API que o deslocamento é caro, incentivando-a a descartar paradas distantes e isoladas para criar rotas mais compactas para a frota.
Os turnos dos motoristas são muito longos vehicles[].routeDurationLimit ou model.vehicles[] Adicionar limites de duração ou adicionar veículos e limites Impõe um limite rígido (por exemplo, 8 horas) ao tempo total que um motorista passa na estrada. Adicionar veículos não vai encurtar os trajetos, a menos que você também aplique limites de duração para forçar o solucionador a distribuir a carga de trabalho pela frota maior.

Atualizar um plano de rota

Muitas vezes, é necessário atualizar um plano de rota mantendo a base igual, como adicionar uma retirada à programação de um motorista ativo. Para fazer isso, use parâmetros de injeção, que fornecem à API um início com base na solução anterior, permitindo que ela modifique o plano atual em vez de calcular um novo do zero.

Veja a seguir as diferentes maneiras de atualizar um plano de trajeto com parâmetros de injeção:

  • Transmita os trajetos de uma resposta anterior para o campo injectedFirstSolutionRoutes da nova solicitação. Isso acelera a pesquisa de otimização e é útil para replanejar antes do início das operações diárias, como integrar remessas de última hora.
  • Controle o grau de mudança usando o campo injectedSolutionConstraint. Isso é útil quando as operações já estão em andamento, permitindo que você preserve a sequência atual do motorista ou corrija partes do plano que já foram executadas.
  • Verifique se o trajeto atualizado permanece atribuído ao veículo correto definindo interpretInjectedSolutionsUsingLabels como true. Isso é útil em experimentos ao adicionar ou remover remessas e veículos, já que corresponde às rotas usando rótulos em vez de índices. Isso exige que todos os rótulos de veículos e rótulos para envio sejam exclusivos.

Integrar seu plano de rota

O plano de rota finalizado é um objeto de dados que representa um gerenciamento otimizado dos seus recursos e tarefas, seguindo suas restrições e objetivos. Use esse plano de rota nas suas operações diárias integrando-o ao seu sistema. Isso geralmente envolve a visualização do plano de rota para os gerentes de frota e o envio de instruções de navegação guiada aos motoristas.

Visualização

Para permitir que os gerentes de frota verifiquem e monitorem seu plano de trajeto, é possível visualizá-lo das seguintes maneiras:

Para permitir que os gerentes de frota verifiquem e monitorem seu plano de trajeto, mostre-o em um mapa do painel. Dependendo do estágio de desenvolvimento atual, é possível visualizar o plano de rota das seguintes maneiras:

  • Explorar sem código:use o app de otimização de rotas de código aberto para ver como a API traduz seus dados em caminhos físicos em um mapa. Esse aplicativo da web serve como uma ferramenta de exploração que permite criar cenários, ajustar parâmetros de restrição e renderizar visualmente os planos de rota resultantes antes de escrever qualquer código.
  • Mostrar a ordem das visitas:é possível mostrar a sequência de visitas como pontos numerados em um mapa para avaliar seus planos de otimização e despacho no seu próprio sistema. Para fazer isso, localize a matriz visits em cada trajeto da resposta da API. Os itens nessa matriz são ordenados exatamente como o driver deve executá-los. Você pode iterar essa lista, usar o shipmentIndex para recuperar as coordenadas de local de cada parada e usar sua biblioteca de mapeamento para renderizar marcadores numerados no mapa com base na ordem deles na lista.
  • Desenhar o trajeto físico:é possível visualizar o caminho exato planejado em um mapa para entender por que o otimizador escolheu uma sequência específica. Essa polilinha representa o trajeto pretendido para planejamento e avaliação, não o trajeto em tempo real feito por um motorista. Defina populatePolylines: true na sua solicitação para receber um campo encodedPolyline para cada trajeto e decodifique-o usando o método google.maps.geometry.encoding.decodePath() da API Maps JavaScript.

Envio para motoristas

Você pode integrar a navegação guiada ao seu aplicativo para motoristas usando o SDK de navegação ou fornecer links diretos para o aplicativo para o consumidor do Google Maps.

  • SDK Navigation:se você tiver um aplicativo de motorista personalizado, poderá integrar o SDK Navigation para Android ou iOS para navegação guiada no app. É possível integrar as informações da tarefa da resposta da API ao seu sistema e usar o SDK para navegação. Para transmitir os trajetos da resposta da API ao SDK, defina populateTransitionPolylines: true na sua solicitação. Isso gera um routeToken para cada transição na resposta.
  • Fleet Engine:para um gerenciamento avançado de frotas, importe o plano de rota gerado pela API para o Fleet Engine e monitore a execução da rota em tempo real. Enquanto a API fornece uma polilinha do caminho pretendido para avaliação, o Fleet Engine combina sua sequência planejada de visitas com o rastreamento de veículos em tempo real.