O objetivo da API Route Optimization é planejar trajetos para uma frota de veículos visitar um conjunto de locais. O objeto OptimizeToursRequest descreve as propriedades desses veículos e locais e é a estrutura principal do corpo da solicitação de cada endpoint.
A estrutura básica do objeto OptimizeToursRequest é a seguinte:
- O campo
modelcontém uma mensagemShipmentModelcom dois campos principais: campos:
Este documento descreve os seguintes tipos de mensagem:
ShipmentModel: contém a lista de remessas, veículos disponíveis e outros objetos que descrevem os relacionamentos.Shipment: descreve os locais a serem visitados por um veículo. Eles podem representar pacotes reais para coleta e entrega ou lugares em que o motorista do veículo presta um serviço.Vehicle: descreve o meio de transporte entre os locais de remessa. Cada veículo corresponde a um veículo real ou a uma pessoa que se desloca a pé.
ShipmentModel
ShipmentModel contém os elementos do problema de otimização de rotas. Ele contém um conjunto de remessas que podem ser realizadas por um conjunto de veículos, considerando as restrições e minimizando o custo geral.
A tabela abaixo descreve algumas propriedades relevantes de ShipmentModel:
| Propriedades | Descrição |
|---|---|
shipments e vehicles |
Objetos obrigatórios que contêm os detalhes de uma ou várias remessas e veículos. |
globalStartTime e globalEndTime |
Indica o início e o fim do período em que todos os veículos precisam concluir todas as remessas. Embora essas propriedades não sejam obrigatórias, é recomendável incluí-las , já que o otimizador funciona melhor quando segue as restrições de tempo. |
Consulte a documentação de referência para conferir a lista completa das propriedades em
ShipmentModel.
Exemplo de ShipmentModel
Neste exemplo, você tem um serviço de creche para cães e está começando a criar sua solicitação. Você vai definir remessas e veículos mais tarde, mas quer começar definindo o horário de funcionamento e o custo operacional por hora.
Para este exemplo, os ShipmentModel valores da propriedade na sua solicitação são os
seguintes:
| Propriedade | Valor | Descrição |
|---|---|---|
globalStartTime |
2024-02-13T00:00:00.000Z | A data e a hora de início do horário de funcionamento. |
globalEndTime |
2024-02-14T06:00:00.000Z | A data e a hora de término do horário de funcionamento. |
Confira a seguir um exemplo de código de uma mensagem ShipmentModel que incorpora os
valores do cenário de exemplo.
{ "model": { "shipments": [ ... ], "vehicles": [ ... ], "globalStartTime": "2024-02-13T00:00:00.000Z", "globalEndTime": "2024-02-14T06:00:00.000Z" } }
Shipment
O tipo de mensagem Shipment define a estrutura de propriedade de uma remessa que
pode ser entregue ou um serviço que pode ser realizado em um trajeto.
Conforme ilustrado no diagrama:
- Uma mensagem
Shipmenttem todas as informações de uma remessa ou serviço real. - Todas as
Shipmentmensagens são especificadas no camposhipments. - O campo
shipmentscontém uma ou várias mensagensShipment.
Uma Shipment mensagem requer pelo menos um pickups ou deliveries objeto.
A definição desses objetos é a seguinte:
pickupsdefine o local de retirada de um envio.deliveriesdefine o local de entrega de uma remessa.- Tanto
pickupsquantodeliveriescontêm um tipo de mensagemVisitRequestque define locais e outros detalhes.
A tabela a seguir descreve os diferentes cenários com base na configuração
de pickups e deliveries em uma mensagem Shipment.
| Cenário | Descrição |
|---|---|
Somente pickups |
Supõe-se que você esteja apenas coletando a remessa. |
Somente deliveries |
Supõe-se que você tenha pré-carregado a remessa ou esteja entregando um serviço. |
Tanto pickups quanto deliveries |
O veículo atribuído precisa concluir a retirada primeiro e depois a entrega. Somente o veículo que fez a retirada pode fazer a entrega. |
Vários pickups ou deliveries |
Se uma remessa listar várias possibilidades para pickups ou deliveries, o otimizador escolherá uma opção de coleta e uma opção de entrega para usar, com base na minimização de custos e no atendimento às restrições. |
Consulte a documentação de referência para conferir a lista completa das propriedades em
Shipment.
Exemplo de Shipment
Neste exemplo, você tem um serviço de creche para cães em que busca os cães na casa deles e os entrega na sua creche. Você quer definir o local de coleta de dois cães e definir o local de entrega para sua empresa:
- A casa do primeiro cão fica na Coit Tower, em São Francisco. As coordenadas desse local são latitude 37,8024 e longitude -122,4058.
- A casa do segundo cão fica no South Sunset Playground Park, em São Francisco. As coordenadas desse local são latitude 37,7359 e longitude -122,5011.
- Sua creche para cães fica no Mission Dolores Park, em São Francisco. As coordenadas desse local são latitude 37,759773 e longitude -122,427063.
Confira a seguir um exemplo de código de uma mensagem Shipment, em que o shipments
objeto contém dois tipos de mensagem Shipmentcom as coordenadas de exemplo.
{ "model": { "shipments": [ { "pickups": [ { "arrivalLocation": { "latitude": 37.8024, "longitude": -122.4058 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ] }, { "pickups": [ { "arrivalLocation": { "latitude": 37.7359, "longitude": -122.5011 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ] } ], "vehicles": [ ... ] } }
Vehicle
O tipo de mensagem Vehicle define a estrutura de propriedade de um veículo que pode
realizar uma remessa em um trajeto.
Conforme ilustrado no diagrama:
- Uma
Vehiclemensagem tem todas as informações de um veículo real. - Todas as
Vehiclemensagens são especificadas no campovehicles. - O
vehiclescampo contém váriasVehiclemensagens.
A tabela a seguir descreve algumas propriedades relevantes de um Vehicle.
| Propriedades | Descrição |
|---|---|
startLocation e endLocation |
O local de início e término dos veículos, que fazem parte do trajeto otimizado final. Se não forem definidos, eles serão definidos como os locais de coleta da primeira remessa e de entrega da última remessa. |
costPerHour, costPerKilometer, costPerTraveledHour |
Parâmetros de custo específicos do veículo. É recomendável ter pelo menos um parâmetro de custo na sua solicitação para que a API retorne um trajeto otimizado. Consulte o conceito-chave do modelo de custo para saber mais sobre os custos. |
startTimeWindows e endTimeWindows |
Defina os períodos em que um veículo pode operar em um trajeto. Eles precisam estar dentro do período globalStartTime e globalEndTime definido em ShipmentModel. Embora essa propriedade não seja obrigatória, é recomendável incluí-la , já que o otimizador funciona melhor quando segue as restrições de tempo. |
Exemplo de Vehicle
Neste exemplo, você tem um serviço de creche para cães e quer definir o local do seu veículo no início e no fim do dia e quanto gás ele gasta. Não é necessário especificar o horário de trabalho do veículo porque ele corresponde
às horas definidas nas propriedades globalStartTime e globalEndTime
no objeto ShipmentModel.
Para este exemplo, os Vehicle valores da propriedade na sua solicitação são os
seguintes:
| Propriedade | Valor | Descrição |
|---|---|---|
startLocation |
latitude: 37.759773, longitude: -122.427063 |
As coordenadas iniciais do trajeto do seu veículo. Elas correspondem ao local da sua creche para cães, que fica no Mission Dolores Park, em São Francisco. |
endLocation |
latitude: 37.759773, longitude: -122.427063 |
As coordenadas finais do trajeto do seu veículo. Elas correspondem ao local da sua creche para cães, que fica no Mission Dolores Park, em São Francisco. |
costPerHour |
27 | Quanto você paga a um motorista para dirigir o veículo da sua creche para cães. Você paga ao motorista US$ 27 por hora. |
Confira a seguir um exemplo de código de uma mensagem Vehicle que incorpora os
valores do cenário de exemplo.
{ "model": { "shipments": [ ... ], "vehicles": [ { "startLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "endLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "costPerHour": 27 } ] } }
Consulte a documentação de referência para conferir a lista completa das propriedades em
Vehicle.
Exemplo de solicitação completa
O exemplo de código a seguir mostra uma solicitação completa, combinando os
ShipmentModel, Shipment e Vehicle exemplos mostrados neste
documento.
{ "model": { "shipments": [ { "pickups": [ { "arrivalLocation": { "latitude": 37.8024, "longitude": -122.4058 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ] }, { "pickups": [ { "arrivalLocation": { "latitude": 37.7359, "longitude": -122.5011 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ] } ], "vehicles": [ { "startLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "endLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "costPerHour": 27 } ], "globalStartTime": "2024-02-13T00:00:00.000Z", "globalEndTime": "2024-02-14T06:00:00.000Z" } }