Fazer uma solicitação com custos de carregamento

Faça uma solicitação com custos de carga para que o otimizador considere a carga que seus veículos transportam entre as visitas. O custo incorrido depende da quantidade de ShipmentRoute.VehicleLoad transportada e da distância ou duração da transição (usando cost_per_kilometer ou cost_per_traveled_hour, respectivamente).

Exemplo de solicitação mínima com custos de carga

Confira um exemplo parcial de uma solicitação com um custo de carga. Neste exemplo, o veículo único pode transportar no máximo 1.000 kg de carga total de weightKg, o que custa 1 unidade de custo por quilômetro quando a carga de weightKg transportada excede 500 kg.

  {
    "model": {
      "vehicles": [{
        "loadLimits": {
          "weightKg": {
            "maxLoad": "1000",
            "costPerKilometer": {
              "loadThreshold": "500",
              "costPerUnitAboveThreshold": 1
            }
          }
        }
      }]
    }
  }
  

O cálculo do custo de carga para este exemplo é o seguinte:

cost = max(carried load - load threshold, 0) * distance * cost per unit above threshold

Portanto, se o veículo transportar uma carga de weightKg de 600 em 10 quilômetros, o cálculo será:

(600 - 500) * 10 * 1 = 1000 cost units

Os custos de carga podem ser usados para modelar vários conceitos, como o aumento do consumo de energia do veículo ao transportar cargas pesadas ou o desgaste do veículo causado por carga excessiva.

Outro exemplo de solicitação com custos de carga

Confira outro exemplo de custos de carga que impõe um custo por tempo de viagem acima e abaixo de um limite:

  {
    "model": {
      "vehicles": [{
        "loadLimits": {
          "weightLbs": {
            "maxLoad": "1000",
            "costPerTraveledHour": {
              "loadThreshold": "900",
              "costPerUnitAboveThreshold": 10,
              "costPerUnitBelowThreshold": 1
            },
          },
        }
      }]
    }
  }
  

O cálculo do custo de carga para este exemplo é o seguinte:

cost = max(carried load - load threshold, 0) * time * cost per unit above threshold
  + min(carried load, load threshold) * time * cost per unit below threshold

Portanto, se o veículo transportar uma carga de weightLbs de 950 por 5 horas, o cálculo será:

max(950 - 900, 0) * 5 * 10 + min(950, 900) * 5 * 1 = 7000

Neste exemplo, o load_threshold do custo de carga weightLbs é próximo de max_load. O cost_per_unit_above_threshold aplica um custo alto por hora de viagem quando o veículo viaja com uma carga especialmente pesada, penalizando rotas que podem aumentar o desgaste do veículo ou consumir combustível em excesso. O cost_per_unit_below_threshold adiciona um custo por unidade de peso transportada pelo veículo até o limite, representando o aumento do consumo de combustível à medida que o veículo transporta mais carga.

Perguntas frequentes

Confira algumas perguntas frequentes sobre custos de carregamento:

Pergunta Resposta
Onde especificar os custos de carga? Especifique os custos de carga em Vehicle.LoadLimit.
Como os custos de carga são combinados com os envios? Um custo de carga se aplica a remessas cujo tipo de demanda de carga corresponde ao tipo de limite de carga do veículo, como peso ou volume. Os tipos de carga são strings arbitrárias, conforme descrito em cargas e limites.
Como os custos de carga são expressos? Os custos de carga são expressos em termos de distância ou duração da transição. Use cost_per_kilometer para especificar custos em termos de distância e cost_per_traveled_hour para especificar custos em termos de duração.
Quando os custos de carga são aplicados? A carga do veículo é comparada com o load_threshold do custo da carga. Se cost_per_unit_above_threshold for especificado, o custo será adicionado proporcionalmente à carga do veículo acima do load_threshold usando a fórmula max(0, load - load_threshold). Se cost_per_unit_below_threshold for especificado, o custo será adicionado proporcionalmente à carga do veículo abaixo do load_threshold, usando a fórmula min(load, load_threshold).
Quais são os valores padrão dos parâmetros de custo de carga? load_threshold, cost_per_unit_above_threshold e cost_per_unit_below_threshold são todos iguais a zero por padrão.
Em quais unidades os custos de carga são expressos? Os custos de carregamento são expressos nas mesmas unidades sem dimensão que todos os outros parâmetros de custo, como global_duration_cost_per_hour ou Shipment.penalty_cost.
Onde encontro os custos de carga na resposta? Os custos de carregamento incorridos aparecem nas propriedades metrics e route_metrics das mensagens de resposta. Por exemplo, um cost_per_kilometer incorrido vai aparecer como model.vehicles.load_limits.cost_per_kilometer.

Para uma explicação detalhada dos custos de carga, consulte a documentação de referência (REST, gRPC).

Exemplo: fazer uma solicitação OptimizeTours

As solicitações OptimizeTours também podem ser feitas usando REST ou gRPC.

Antes de fazer uma solicitação, substitua os seguintes parâmetros pelos valores adequados para seu ambiente:

  • Verifique se você configurou as Application Default Credentials conforme descrito em Usar o OAuth.
  • Defina PROJECT_NUMBER_OR_ID como o número ou ID do projeto do Cloud.

    O comando a seguir envia uma solicitação OptimizeTours para a API Route Optimization e recebe uma resposta de forma síncrona.

    curl -X POST 'https://routeoptimization.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID:optimizeTours' \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    --data @- << EOM
    {
      "model": {
        "shipments": [
          {
            "deliveries": [
              {
                "arrivalLocation": {
                  "latitude": 37.789456,
                  "longitude": -122.390192
                },
                "duration": "250s"
              }
            ],
            "penaltyCost": 100.0,
            "loadDemands": {
              "weightKg": {
                "amount": 50
              }
            }
          },
          {
            "deliveries": [
              {
                "arrivalLocation": {
                  "latitude": 37.789116,
                  "longitude": -122.395080
                },
                "duration": "250s"
              }
            ],
            "penaltyCost": 30.0,
            "loadDemands": {
              "weightKg": {
                "amount": 10
              }
            }
          },
          {
            "deliveries": [
              {
                "arrivalLocation": {
                  "latitude": 37.795242,
                  "longitude": -122.399347
                },
                "duration": "250s"
              }
            ],
            "penaltyCost": 50.0,
            "loadDemands": {
              "weightKg": {
                "amount": 80
              }
            }
          }
        ],
        "vehicles": [
          {
            "endLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "startLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "costPerHour": 40.0,
            "costPerKilometer": 10.0,
            "loadLimits": {
              "weightKg": {
                "maxLoad": "100",
                "costPerKilometer": {
                  "loadThreshold": "15",
                  "costPerUnitAboveThreshold": 1
                }
              }
            }
          }
        ]
      }
    }
    EOM

Quando a solicitação for concluída, você vai receber uma mensagem de resposta.