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.
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:
- 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.
- 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.
- Criar uma solicitação e receber um plano de rota:insira seus dados na API e receba um plano de rota otimizado.
- 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.
- 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 |
|---|---|
|
|
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[].startWaypointvehicles[].endWaypoint
|
O local onde o veículo começa e termina o trajeto. |
| Seu horário de funcionamento |
model.globalStartTimemodel.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[].arrivalWaypointdeliveries[].arrivalWaypoint
|
O local geográfico em que o trabalho é realizado. |
| Tempo de serviço |
pickups[].durationdeliveries[].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:
- 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.
- 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.
- 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
injectedFirstSolutionRoutesda 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
interpretInjectedSolutionsUsingLabelscomotrue. 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
visitsem 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 oshipmentIndexpara 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: truena sua solicitação para receber um campoencodedPolylinepara cada rota e decodifique-o usando o métodogoogle.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: truena sua solicitação. Isso gera umrouteTokenpara 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.