Ciclo de vida do plano de trajeto

Esta página descreve o ciclo de vida de um plano de rotas usando a API Route Optimization, começando pela identificação das suas necessidades de rotas e terminando com um plano de rotas integrado no seu sistema.

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

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

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

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

A fase de implementação de um plano de rotas acontece quando você integra a API pela primeira vez ou quando os requisitos da sua empresa 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 2 a 4.

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

  1. Delimite seu 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 rotas 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 e itere seu plano de rota ajustando as restrições e os objetivos para garantir que ele atenda a todas as suas necessidades.
  5. Integre o plano de rota:conecte o plano de rota aos seus sistemas atuais para oferecer uma navegação prática.

Definir o escopo do problema

Antes de usar a API, organize os detalhes das suas operações diárias em categorias de dados claras. Assim, você pode iniciar 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 recursos e tarefas

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

Identifique suas 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 entregas. Eles ditam 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 absolutas 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 a 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 a um custo de penalidade. Por exemplo, você pode preferir carregar um caminhão apenas até 80% da capacidade ou fazer uma entrega antes de um horário de destino, mas não se importa em exceder esses limites para ter uma rota melhor.

Algumas restrições comuns são:

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

Definir seus objetivos de negócios

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.

Confira 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, 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 rigorosos?

Mapear seus dados

Depois de coletar os dados, mapeie-os para corresponder às propriedades da API. Isso dá ao otimizador todas as informações necessárias para retornar um plano de rota que leve em consideração a realidade da sua empresa.

Use os parâmetros nas próximas tabelas para mapear os recursos, tarefas, restrições e objetivos que você mapeou na seção Delimitar o 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 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 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
O local geográfico em que o trabalho é realizado.
Tempo de serviço pickups[].duration
deliveries[].duration
O tempo gasto no local para concluir a tarefa (por exemplo, descarga), 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 máximo 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 desse período, o envio será ignorado.
Limite de duração do turno vehicles[].routeDurationLimit Define um limite máximo ou flexível para a duração do trabalho de um motorista específico (por exemplo, máximo de 8 horas), independente do horário de término global.
Intervalos do motorista vehicles[].breakRule Impõe regras de descanso específicas, como pausas obrigatórias 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 do mundo real Parâmetro da API Descrição
Minimizar o tamanho da frota vehicles[].fixedCost Aplica um custo único para o uso de 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 tempo de viagem e espera). Prioriza a conclusão mais rápida.
Minimizar o tempo de percurso vehicles[].costPerTraveledHour Aplica um custo especificamente ao tempo gasto em movimento. Isso distingue entre ficar parado no trânsito (caro) e esperar em um ponto de ônibus(potencialmente mais barato).
Priorizar determinadas tarefas shipments[].penaltyCost Aplica um custo se um frete específico for ignorado. Definir esse valor alto garante que as tarefas críticas sejam priorizadas em relação às opcionais.

Criar a solicitação e receber uma resposta

Usar a API Route Optimization para gerar um plano de rotas envolve as seguintes etapas:

  1. Configure seu ambiente:configure seu projeto na nuvem do Google Cloud, ative a API e configure a autenticação. Para instruções, consulte Como começar. 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 significado de cada parâmetro. Consulte Interpretar uma resposta.

Refinar seu 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 da sua empresa ou às expectativas dos motoristas. Refinar seu plano de rotas é 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, você poderá modificar alguns parâmetros para alcançar resultados diferentes. Ajustar ou flexibilizar parâmetros altera a forma como metas conflitantes são resolvidas no plano de rota. Flexibilizar parâmetros é uma maneira eficiente de descobrir quais deles estão causando erros nos 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
Um envio importante é ignorado shipments[].penaltyCost Aumentar o valor ou adicionar custos de penalidade a outros fretes Se o frete for opcional, aumente o custo da penalidade para priorizá-lo. Se o envio for obrigatório (não tiver custo de penalidade), adicione os custos de penalidade a outros, envios menos críticos. Isso os torna opcionais, liberando tempo e capacidade do veículo para a entrega importante.
Envio adiado devido ao tempo softStartTime / softEndTime Adicionar intervalos de tempo flexíveis Janelas de tempo rígidas descartam tarefas que estão até um minuto atrasadas. As janelas flexíveis permitem que o motorista chegue um pouco atrasado pagando um "custo" em vez de falhar na atribuição.
Envio adiado devido ao peso loadLimits[].softMaxLoad e costPerUnitAbove Adicionar demandas de carga flexíveis Permite que um veículo exceda um pouco 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 aumentar as janelas de tempo livre Se houver muitas entregas para a frota atual, especialmente durante os horários de pico, adicione mais veículos ou aumente os intervalos 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 rotas mais curtas para a frota.
Os turnos dos motoristas são muito longos vehicles[].routeDurationLimit ou model.vehicles[] Adicionar limites de duração ou veículos e limites Impõe um limite máximo (por exemplo, 8 horas) no 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 por uma frota maior.

Atualizar um plano de rota

Muitas vezes, é necessário atualizar um plano de rota mantendo a base a mesma, como adicionar uma retirada à programação de um motorista ativo. Para 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.

Confira a seguir diferentes maneiras de atualizar um plano de rota com parâmetros de injeção:

  • Transmita as rotas 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 a integração de envios 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 preservar a sequência atual do motorista ou corrigir partes do plano que já foram executadas.
  • Para garantir que a rota atualizada permaneça atribuída ao veículo correto, defina interpretInjectedSolutionsUsingLabels como true. Isso é útil em experimentos ao adicionar ou remover envios e veículos, já que corresponde a rotas usando rótulos em vez de índices. Isso exige que todos os rótulos de veículo e de 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 visualizar o plano de rota para os gerentes de frota e enviar instruções de navegação guiada para os motoristas.

Visualização

Para permitir que os gerentes de frota verifiquem e monitorem seu plano de rota, é possível visualizar seu plano de rota das seguintes maneiras:

Para permitir que os gerentes de frota verifiquem e monitorem seu plano de rota, você pode mostrá-lo em um mapa do painel. Dependendo da sua fase de desenvolvimento atual, é possível visualizar o plano de rotas das seguintes maneiras:

  • Explorar sem código:use o app de otimização de rotas (link em inglês) 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 exploratória que permite criar cenários, ajustar parâmetros de restrição e renderizar visualmente os planos de rotas 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 rota da resposta da API. Os itens nessa matriz são ordenados exatamente como o motorista deve executá-los. É possível 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.
  • Desenhe o trajeto físico:visualize 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 a rota em tempo real feita por um motorista. Defina populatePolylines: true na sua solicitação para receber um campo encodedPolyline para cada rota e decodifique-o usando o método google.maps.geometry.encoding.decodePath() da API Maps JavaScript.

Enviar 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 app Google Maps para consumidores.

  • 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 de tarefas da resposta da API ao seu sistema e usar o SDK para navegação. Para transmitir as rotas 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, importe o plano de rota gerado pela API para o Fleet Engine e monitore a execução da rota em tempo real. Embora a API forneça uma polilinha do caminho pretendido para avaliação, o Fleet Engine pareia sua sequência planejada de visitas com o rastreamento de veículos em tempo real.