A mensagem OptimizeToursRequest
(REST, gRPC) contém várias
propriedades relacionadas a
custos. Juntos, esses parâmetros de custo representam
modelo de custo. O modelo de custo captura muitas das informações de alto nível
objetivos de otimização, como:
- Priorizar trajetos
Vehicle
mais rápidos em vez de trajetos mais curtos ou outros por perto - Decidir se o custo de entrega de um
Shipment
vale o valor da conclusão doShipment
- Realizar retiradas e entregas dentro de janelas de tempo somente quando isso for econômico
Confira um exemplo de solicitação com custos
{ "model": { "globalStartTime": "2023-01-13T16:00:00-08:00", "globalEndTime": "2023-01-14T16:00:00-08:00", "shipments": [ { "deliveries": [ { "arrivalLocation": { "latitude": 37.789456, "longitude": -122.390192 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 100.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 5.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 50.0 } ], "vehicles": [ { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerHour": 40.0, "costPerKilometer": 10.0 } ] } }
Vehicle
propriedades de custo
A mensagem Vehicle
(REST, gRPC) tem várias propriedades de custo:
Vehicle.cost_per_hour
: representa o custo de operação de um veículo por hora. incluindo os tempos de trânsito, espera, visita e intervalo.Vehicle.cost_per_kilometer
: representa o custo por quilômetro percorrido pelo veículo.Vehicle.cost_per_traveled_hour
: representa o custo de operar um veículo. apenas durante o trânsito, exceto nos períodos de espera, visita e intervalo.
Esses parâmetros de custo permitem que o otimizador faça a diferença de tempo em relação à distância percorrida
compensações. Os custos gerados pela rota otimizada aparecem na resposta
mensagem como metrics.costs
:
À medida que costPerHour
aumenta, o otimizador tenta encontrar rotas mais rápidas.
que podem não ser as rotas mais curtas. Neste exemplo, o trajeto mais rápido acontece
seja o mais curto, então as alterações nos parâmetros de custo têm pouco efeito.
Shipment
propriedades de custo
A mensagem Shipment
(REST, gRPC) também tem vários parâmetros de custo:
Shipment.penalty_cost
representa o custo incorrido ao ignorar o envioShipment.VisitRequest.cost
representa o custo de uma retirada ou entrega, usada principalmente para possibilitar o equilíbrio de custos entre várias coletas ou opções de entrega para uma única remessa.
Os parâmetros de custo Shipment
usam as mesmas unidades sem dimensões que o custo Vehicle
parâmetros. O custo incorrido após a conclusão de um Shipment
exceder o custo da penalidade, o
Shipment
não está incluído no trajeto de nenhum Vehicle
e aparece no
skipped_shipments
na mensagem de resposta.
ShipmentModel
propriedades de custo
A mensagem ShipmentModel
(REST, gRPC) inclui um custo único.
propriedade, globalDurationCostPerHour
. Esse custo é incorrido com base no valor
tempo necessário para que todos os veículos concluam os ShipmentRoute
s. Aumentando
A globalDurationCostPerHour
prioriza a conclusão antecipada de todos os envios.
Propriedades de custo da resposta da otimização de rotas
A mensagem OptimizeToursResponse
(REST, gRPC) tem propriedades de custo.
que representam os custos incorridos no processo de conclusão de ShipmentRoute
s.
As propriedades metrics.costs
e metrics.totalCost
representam o número de unidades de custo incorridas em todas as rotas na resposta. Cada entrada routes
tem
Propriedades routeCosts
e routeTotalCosts
que representam os custos dessa
para uma rota específica.
Veja a resposta ao exemplo de solicitação com os custos
{ "routes": [ { "vehicleStartTime": "2023-01-14T00:00:00Z", "vehicleEndTime": "2023-01-14T00:28:22Z", "visits": [ { "isPickup": true, "startTime": "2023-01-14T00:00:00Z", "detour": "0s" }, { "shipmentIndex": 2, "isPickup": true, "startTime": "2023-01-14T00:02:30Z", "detour": "150s" }, { "startTime": "2023-01-14T00:08:55Z", "detour": "150s" }, { "shipmentIndex": 2, "startTime": "2023-01-14T00:21:21Z", "detour": "572s" } ], "transitions": [ { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:00:00Z" }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:02:30Z" }, { "travelDuration": "235s", "travelDistanceMeters": 795, "waitDuration": "0s", "totalDuration": "235s", "startTime": "2023-01-14T00:05:00Z" }, { "travelDuration": "496s", "travelDistanceMeters": 1893, "waitDuration": "0s", "totalDuration": "496s", "startTime": "2023-01-14T00:13:05Z" }, { "travelDuration": "171s", "travelDistanceMeters": 665, "waitDuration": "0s", "totalDuration": "171s", "startTime": "2023-01-14T00:25:31Z" } ], "metrics": { "performedShipmentCount": 2, "travelDuration": "902s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "800s", "totalDuration": "1702s", "travelDistanceMeters": 3353 }, "routeCosts": { "model.vehicles.cost_per_kilometer": 33.53, "model.vehicles.cost_per_hour": 18.911111111111111 }, "routeTotalCost": 52.441111111111113 } ], "skippedShipments": [ { "index": 1 } ], "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 2, "travelDuration": "902s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "800s", "totalDuration": "1702s", "travelDistanceMeters": 3353 }, "usedVehicleCount": 1, "earliestVehicleStartTime": "2023-01-14T00:00:00Z", "latestVehicleEndTime": "2023-01-14T00:28:22Z", "totalCost": 57.441111111111113, "costs": { "model.vehicles.cost_per_kilometer": 33.53, "model.vehicles.cost_per_hour": 18.911111111111111, "model.shipments.penalty_cost": 5 } } }
No exemplo de resposta, os metrics.costs
de nível superior são:
{
"metrics": {
...
"costs": {
"model.vehicles.cost_per_hour": 18.911111111111111,
"model.vehicles.cost_per_kilometer": 33.53,
"model.shipments.penalty_cost": 5
}
}
}
O valor model.shipments.penalty_cost
representa o custo incorrido devido ao
fretes pulados. A propriedade skippedShipments
lista quais remessas foram
pulado.
Neste exemplo, apenas model.shipments[1]
na solicitação de exemplo é ignorada.
model.shipments[1]
tem um custo de penalidade de cinco unidades, o que corresponde ao total
chave model.shipments.penalty_cost
na resposta de exemplo. O envio está baixo
penaltyCost
em comparação com os 40.0 costPerHour
e 10.0 da Vehicle
costPerKilometer
tornam mais econômico pular o envio do que
concluí-lo.
Tópico avançado: custos e restrições flexíveis
Várias propriedades de mensagens OptimizeToursRequest
(REST, gRPC)
representam restrições flexíveis, que são restrições que incorrem em custo quando
não pode ser atendida.
Por exemplo, as restrições de LoadLimit
do veículo (REST, gRPC) têm as propriedades softMaxLoad
e costPerUnitAboveSoftMax
. Juntos, eles geram
custo proporcional às unidades de carga que excedem softMaxLoad
, permitindo que
limite seja excedido somente se fizer sentido do ponto de vista de custos.
Da mesma forma, as restrições TimeWindow
(REST, gRPC) têm
soft_start_time
e soft_end_time
, com as
cost_per_hour_before_soft_start_time
e cost_per_hour_after_soft_end_time
que são incorridos com base em quão cedo ou tarde o evento restrito ocorre com
em relação ao TimeWindow
.
Como acontece com todos os parâmetros do modelo de custo, os custos de restrição flexível são expressos na mesmas unidades sem dimensões que outros parâmetros de custo.
LoadLimit
restrições são abordadas em detalhes na
Demandas e limites de carga. As restrições de TimeWindow
são abordadas em detalhes
em Restrições de horário de retirada e entrega.