Estrutura básica (ShipmentModel, Shipment e Vehicle)

O ShipmentModel tem um objeto "shipments" com um tipo de mensagem "Shipment" e um objeto "vehicles" com um tipo de mensagem "Vehicle".

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:

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.

Uma remessa real é igual a uma mensagem "Shipment", que está contida em um objeto "shipments".

Conforme ilustrado no diagrama:

  • Uma mensagem Shipment tem todas as informações de uma remessa ou serviço real.
  • Todas as Shipment mensagens são especificadas no campo shipments.
  • O campo shipments contém uma ou várias mensagens Shipment.

Uma Shipment mensagem requer pelo menos um pickups ou deliveries objeto. A definição desses objetos é a seguinte:

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.

Um veículo real é igual a uma mensagem "Vehicle", que está contida em um objeto "vehicles".

Conforme ilustrado no diagrama:

  • Uma Vehicle mensagem tem todas as informações de um veículo real.
  • Todas as Vehicle mensagens são especificadas no campo vehicles.
  • O vehicles campo contém várias Vehicle mensagens.

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"
  }
}