Ciclo de vida do plano de trajeto

Esta página descreve o ciclo de vida de um plano de trajeto usando a API Route Optimization, desde a identificação das necessidades de roteamento até um plano de trajeto integrado no seu sistema.

Ao seguir as etapas do plano de trajeto, você pode alcançar os seguintes objetivos:

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

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

Um diagrama de fluxo do ciclo de vida de um roteiro explicado no texto abaixo

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

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

As etapas do ciclo de vida de um trajeto 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 sua realidade de negócios em parâmetros de API para que o plano de trajeto reflita como você precisa que sua frota opere.
  3. Crie uma solicitação e receba um plano de trajeto:insira seus dados na API e receba seu plano de trajeto otimizado.
  4. Refine seu plano de trajeto:teste seu plano de trajeto e faça iterações nele ajustando suas restrições e objetivos para garantir que ele cubra todas as suas necessidades.
  5. Integre o plano de trajeto:conecte o plano de trajeto aos seus sistemas atuais para fornecer navegação prática.

Definir 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 seus recursos e tarefas atuais, o que os restringe e quais são os objetivos que você quer alcançar com sua frota.

Identificar seus recursos e tarefas

Uma etapa importante ao planejar seu plano de trajeto é identificar seus recursos e 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 operação da sua frota?
  • Locais:onde estão os pontos de coleta e entrega?
  • Demandas:qual é o peso ou tamanho dos pacotes?
  • Restrições:há períodos específicos para entrega?
  • Tempo de serviço:quanto tempo o motorista precisa estacionar e descarregar?
  • Requisitos:a remessa exige um tipo de veículo ou motorista específico?

Identificar suas restrições

Suas restrições são os limites e restrições sobre como você pode usar seus veículos e como precisa lidar com suas remessas. Elas ditam a maior parte das suas operações e são essenciais ao criar um plano de trajeto otimizado.

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

Restrições rígidas Restrições flexíveis
São limites que não podem ser quebrados. 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. 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 um trajeto 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.
  • Períodos:os períodos 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 operação de um veículo ou de pular uma remessa. Um dos principais objetivos da API é gerar um plano de trajeto 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.

Estabelecer seus objetivos de negócios

Depois de estabelecer seus recursos e tarefas e as limitações deles, é 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 importa ao planejar um trajeto.

A seguir, alguns exemplos de objetivos de negócios:

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 que podem 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 rigorosos?

Mapear seus dados

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

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

Mapeamento de variáveis

Conceito 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 começa 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 recente para a operação de toda a frota.
Tarefa ou pacote model.shipments[] Representa um job. Pode ser uma pickup, uma delivery ou ambas.
Local da tarefa pickups[].arrivalWaypoint
deliveries[].arrivalWaypoint
A localização geográfica onde 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 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 coletada ou entregue por veículos ou motoristas específicos.
Horário de funcionamento shipments[].pickups[].timeWindows ou shipments[].deliveries[].timeWindows Define o horário de funcionamento para visitar um local. Se um veículo não puder chegar dentro desse período, a remessa será ignorada.
Limite de duração do turno vehicles[].routeDurationLimit Define um limite rígido ou flexível para quanto tempo 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 intervalos obrigatórios após determinadas horas de trabalho.
Restrições da via vehicles[].travelMode Especifica o modo de viagem (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 um trajeto a priorizar o uso de menos veículos em vez de aumentar a distância total ou o tempo de trabalho.
Minimizar a distância vehicles[].costPerKilometer Aplica um custo para cada quilômetro percorrido. Prioriza trajetos mais curtos para economizar combustível e desgaste.
Minimizar o tempo total vehicles[].costPerHour Aplica um custo para cada hora em que o veículo está ativo (incluindo tempo de viagem e espera). Prioriza a conclusão mais rápida.
Minimizar o tempo de direção vehicles[].costPerTraveledHour Aplica um custo especificamente para o tempo gasto em movimento. Isso distingue entre ficar 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 esse valor como alto garante que as tarefas críticas sejam priorizadas em relação às opcionais.

Criar a solicitação e receber uma resposta

O uso da API Route Optimization para gerar um plano de trajeto envolve as seguintes etapas:

  1. Configurar seu ambiente:configure seu projeto na nuvem do Google Cloud, ative a API e configure a autenticação. Para instruções, consulte Introdução. Você só precisa seguir esta etapa uma vez.
  2. Enviar 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 request.
  3. Entender a resposta:depois de receber uma resposta da API, entenda o plano de trajeto e o que cada parâmetro significa. Consulte Interpretar uma resposta.

Refinar seu plano de trajeto

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

Ajustar objetivos e restrições

Se o plano de trajeto gerado não atender às suas necessidades, você poderá modificar determinados parâmetros para alcançar resultados diferentes. Aumentar ou diminuir os parâmetros altera a forma como os objetivos conflitantes são resolvidos no plano de trajeto, e diminuir os parâmetros é uma maneira eficiente de descobrir os parâmetros que estão causando erros nos seus planos de trajeto.

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 o tempo e a capacidade do veículo para a remessa importante.
Remessa ignorada devido ao tempo softStartTime / softEndTime Adicionar períodos flexíveis Os períodos rígidos descartam tarefas que estão até um minuto atrasadas. Os períodos flexíveis permitem que o motorista chegue um pouco fora do horário pagando um "custo" em vez de falhar na atribuição.
Remessa ignorada devido ao peso loadLimits[].softMaxLoad e costPerUnitAbove Adicionar demandas de carga flexíveis Permite que um veículo exceda ligeiramente a capacidade ideal (por uma penalidade) em vez de deixar um pacote para trás.
Remessa ignorada devido à sobrecarga da frota model.vehicles[] ou shipments[].timeWindows Adicionar veículos ou períodos flexíveis Se houver muitas remessas para a frota atual, especialmente durante os horários de pico, adicione mais veículos ou amplie os períodos 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 a viagem é cara, incentivando-a a descartar paradas distantes e isoladas para criar trajetos mais curtos para a frota.
Os turnos do motorista são muito longos vehicles[].routeDurationLimit ou model.vehicles[] Adicionar limites de duração ou adicionar veículos e limites Aplica um limite rígido (por exemplo, 8 horas) ao tempo total que um motorista passa na estrada. Adicionar veículos por si só não encurta 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 trajeto

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

A seguir, mostramos 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 sua 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.
  • Defina interpretInjectedSolutionsUsingLabels como true para garantir que o trajeto atualizado permaneça atribuído ao veículo correto. Isso é útil na experimentação ao adicionar ou remover remessas e veículos, já que corresponde a trajetos usando rótulos em vez de índices. Isso exige que todos os rótulos de veículos e remessas sejam exclusivos.

Integrar seu plano de trajeto

Seu plano de trajeto 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 trajeto nas suas operações diárias integrando-o ao seu sistema. Isso normalmente envolve a visualização do plano de trajeto para 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, você pode visualizar seu plano de trajeto das seguintes maneiras:

Para permitir que os gerentes de frota verifiquem e monitorem seu plano de trajeto, você pode exibi-lo em um mapa do painel. Dependendo do estágio de desenvolvimento atual, você pode visualizar seu plano de trajeto das seguintes maneiras:

  • Explorar sem código: você pode usar o app de otimização de trajetos 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 seus planos de trajeto resultantes antes de escrever qualquer código.
  • Mostrar a ordem de visitas:você pode 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 motorista deve executá-los. Você pode iterar nessa lista, usar o shipmentIndex para recuperar as coordenadas de localização 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:você pode visualizar o caminho planejado exato em um mapa para entender por que o otimizador escolheu uma sequência específica. Essa polilinha representa o caminho 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 encodedPolyline campo para cada trajeto e decodifique-o usando o google.maps.geometry.encoding.decodePath() método da API Maps JavaScript.

Enviar para motoristas

Você pode integrar navegação guiada ao aplicativo do motorista usando o SDK do Navigation ou fornecer links diretos para o aplicativo para o consumidor do Google Maps.

  • SDK do Navigation: se você tiver um aplicativo de motorista personalizado, poderá integrar o SDK do Navigation para Android ou iOS para navegação guiada no app. Você pode 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 para o SDK, defina populateTransitionPolylines: true na sua solicitação. Isso gera um routeToken para cada transição na resposta.
  • **Fleet Engine**: para gerenciamento avançado de frota, você pode importar o plano de trajeto gerado pela API para o Fleet Engine para monitorar a execução do trajeto em tempo real. Embora a API forneça 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.