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).
Um exemplo mínimo de solicitação com custos de carga
Confira um exemplo parcial de uma solicitação com um custo de carga. Neste exemplo, o
veículo único não pode transportar mais de 1.000 kg de carga total weightKg, o que
gera uma unidade de custo por quilômetro quando a carga 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 kg por 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 uso de energia do veículo ao transportar cargas pesadas ou o desgaste do veículo causado pelo carregamento excessivo.
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 tanto acima quanto 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 kg por 5 horas, o
cálculo será:
max(950 - 900, 0) * 5 * 10 + min(950, 900) * 5 * 1 = 7000
Neste exemplo, o load_threshold para o custo de carga weightLbs está 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 muito 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 carga:
| Pergunta | Resposta |
|---|---|
| Onde especifico os custos de carga? | Especifique os custos de carga em Vehicle.LoadLimit. |
| Como os custos de carga são correspondidos aos envios? | Um custo de carga se aplica a envios 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 demandas e limites de carga. |
| 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 ao load_threshold do custo de 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 zero por padrão.
|
| Em quais unidades os custos de carga são expressos? | Os custos de carga 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 carga incorridos aparecem nas propriedades metrics e
route_metrics das mensagens de resposta. Por exemplo, um
incorrido cost_per_kilometer 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 parâmetros a seguir por valores adequados ao seu ambiente:
- Verifique se você configurou as credenciais padrão do aplicativo, conforme descrito em Usar o OAuth.
Defina PROJECT_NUMBER_OR_ID como o número ou ID do seu projeto do Cloud.
O comando a seguir envia uma solicitação
OptimizeTourspara 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.