Objetivos

As propriedades de objetivo incluem "objectives" em "ShipmentModel" e "type" e "weight" em "objectives".

Os objetivos são parâmetros que podem ser usados para especificar metas de otimização de alto nível em vez de fornecer parâmetros de custo específicos do modelo de custo.

É possível usar vários objetivos em uma única solicitação e atribuir a cada um deles um peso relativo para controlar a influência na otimização geral. Os objetivos afetam todo o pedido, influenciando todos os seus veículos e envios. Por fim, você também pode usar objetivos para iniciar o desenvolvimento do seu próprio modelo de custo, conforme descrito em Gerar um modelo de custo.

É possível usar objetivos para controlar os seguintes impactos no seu plano de rota:

  • Tempo total de viagem ou distância dos seus trajetos.
  • Tempo total de trabalho em todos os veículos.
  • Número total de veículos usados.

Propriedades

A propriedade objectives é uma matriz de tipos de mensagem Objective em ShipmentModel. Cada Objective define uma meta de otimização específica e contém os campos listados na tabela a seguir:

Campo Tipo Descrição
type Enumeração Especifica a meta de otimização predefinida. Os valores aceitos são:
  • DEFAULT: usa um conjunto padrão de custos para garantir uma solução de referência, ou seja, impede que a solução use valores extremos para alcançar um objetivo. DEFAULT é adicionado automaticamente às solicitações que contêm um objetivo, com um weight de 1.0. Se você incluir esse objetivo na solicitação, a solução vai usar o weight especificado.
  • MIN_DISTANCE: minimiza a distância total percorrida.
  • MIN_WORKING_TIME: minimiza o tempo total de trabalho, somado em todos os veículos.
  • MIN_TRAVEL_TIME: minimiza o tempo total de viagem, somado em todos os veículos.
  • MIN_NUM_VEHICLES: minimiza o número de veículos usados.
weight Duplo Define a importância relativa desse objetivo. Ao usar vários objetivos, o valor weight controla a influência desse objetivo específico na otimização geral da rota em comparação com os outros. Pode ser qualquer número não negativo e não precisa somar 1. O valor padrão é 1.0.

Exemplos

Esta seção aborda dois tipos de exemplos:

  • Um exemplo de código que ilustra a estrutura da matriz objectives.
  • Um exemplo de solicitação que inclui a matriz objectives.

Amostras de código

O exemplo a seguir mostra a estrutura de objectives:

"objectives": [
  {
    "type": "OBJECTIVE_TYPE",
    "weight": WEIGHT
  }
]

Exemplo de solicitação

O exemplo a seguir mostra a estrutura de uma solicitação básica de optimizeTours que incorpora vários objetivos, em que MIN_TRAVEL_TIME é três vezes mais importante que MIN_WORKING_TIME.

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.42506261000996,
              "longitude": -122.09535511930135
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.42421503206021,
              "longitude": -122.09526063135228
            }
          }
        ]
      }
    ],
    "vehicles": [
      {
        "travelMode": "DRIVING"
      }
    ],
    "objectives": [
      {
        "type": "MIN_TRAVEL_TIME",
        "weight": 3.0
      },
      {
        "type": "MIN_WORKING_TIME"
      }
    ]
  }
}

Gerar um modelo de custo

Os objetivos são uma maneira rápida de definir metas de otimização, mas, em alguns casos, eles podem não ser específicos o suficiente. Para atingir suas metas de rotas exatas, talvez seja necessário o controle granular disponível apenas com parâmetros do modelo de custo.

Para começar a desenvolver seu próprio modelo de custo, adicione objetivos à solicitação e converta os objetivos da solicitação em parâmetros do modelo de custo usando o modo de resolução TRANSFORM_AND_RETURN_REQUEST.

Quando você envia uma solicitação usando esse modo de resolução, acontece o seguinte:

  • A API converte seus objetivos em parâmetros do modelo de custo e os retorna em um processedRequest. Em seguida, ajuste os parâmetros do modelo de custo conforme necessário para refinar seu plano de rota.
  • Ao usar vários objetivos, a API combina os custos de todos os seus objetivos e os dimensiona de acordo com os respectivos pesos.
  • Você não vai receber uma cobrança por essa solicitação, já que a API não fornece uma rota otimizada, apenas converte os objetivos em parâmetros de modelo de custo.

Exemplo de solicitação

O exemplo a seguir mostra uma solicitação usando o objetivo MIN_TRAVEL_TIME e o modo de resolução TRANSFORM_AND_RETURN_REQUEST:

{
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.42506261000996,
              "longitude": -122.09535511930135
            }
          }
        ],
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.42421503206021,
              "longitude": -122.09526063135228
            }
          }
        ]
      }
    ],
    "vehicles": [
      {
        "travelMode": "DRIVING"
      }
    ],
    "objectives": [
      {
        "type": "MIN_TRAVEL_TIME"
      }
    ]
  },
  "solvingMode": "TRANSFORM_AND_RETURN_REQUEST"
}

Exemplo de resposta

Esta é a resposta correspondente à solicitação anterior. Essa resposta inclui os parâmetros do modelo de custo gerado e o objetivo original para referência.

{
  "processedRequest": {
    "model": {
      "shipments": [
        {
          "pickups": [
            {
              "arrivalLocation": {
                "latitude": 37.425062610009959,
                "longitude": -122.09535511930135
              }
            }
          ],
          "deliveries": [
            {
              "arrivalLocation": {
                "latitude": 37.424215032060211,
                "longitude": -122.09526063135228
              }
            }
          ]
        }
      ],
      "vehicles": [
        {
          "travelMode": "DRIVING",
          "costPerHour": 30,
          "costPerTraveledHour": 330,
          "costPerKilometer": 0.2
        }
      ],
      "objectives": [
        {
          "type": "MIN_TRAVEL_TIME"
        }
      ]
    },
    "solvingMode": "TRANSFORM_AND_RETURN_REQUEST"
  }
}