Сделайте запрос с затратами на загрузку, чтобы оптимизатор учитывал загрузку, которую перевозят ваши транспортные средства между визитами. Понесенные затраты зависят как от объема ShipmentRoute.VehicleLoad
, так и от расстояния или продолжительности перехода (используя cost_per_kilometer
или cost_per_traveled_hour
соответственно).
Минимальный пример запроса с затратами на загрузку
Вот частичный пример запроса со стоимостью груза. В этом примере одно транспортное средство может перевозить не более 1000 кг общего weightKg
груза, что влечет за собой 1 единицу стоимости за километр, когда перевозимый weightKg
груза превышает 500 кг.
{ "model": { "vehicles": [{ "loadLimits": { "weightKg": { "maxLoad": "1000", "costPerKilometer": { "loadThreshold": "500", "costPerUnitAboveThreshold": 1 } } } }] } }
Расчет стоимости загрузки для этого примера выглядит следующим образом:
cost = max(carried load - load threshold, 0) * distance * cost per unit above threshold
Таким образом, если транспортное средство перевозит груз weightKg
600 кг на расстояние в 10 километров, расчет будет следующим:
(600 - 500) * 10 * 1 = 1000 cost units
Стоимость груза можно использовать для моделирования различных концепций, таких как повышенное потребление энергии транспортным средством при перевозке тяжелых грузов или износ транспортного средства, вызванный чрезмерной загрузкой транспортного средства.
Еще один пример запроса с затратами на загрузку
Вот еще один пример затрат на погрузку, который устанавливает стоимость за время в пути как выше, так и ниже порогового значения:
{ "model": { "vehicles": [{ "loadLimits": { "weightLbs": { "maxLoad": "1000", "costPerTraveledHour": { "loadThreshold": "900", "costPerUnitAboveThreshold": 10, "costPerUnitBelowThreshold": 1 }, }, } }] } }
Расчет стоимости загрузки для этого примера выглядит следующим образом:
cost = max(carried load - load threshold, 0) * time * cost per unit above threshold
+ min(carried load, load threshold) * time * cost per unit below threshold
Таким образом, если транспортное средство перевозит груз weightLbs
950 фунтов в течение 5 часов, расчет будет следующим:
max(950 - 900, 0) * 5 * 10 + min(950, 900) * 5 * 1 = 7000
В этом примере load_threshold
для стоимости груза weightLbs
близок к max_load
. cost_per_unit_above_threshold
применяет высокую стоимость за час пути, когда транспортное средство едет с особенно тяжелым грузом, штрафуя маршруты, которые могут увеличить износ транспортного средства или потреблять избыточное топливо. cost_per_unit_below_threshold
добавляет стоимость за единицу веса, перевозимого транспортным средством, до порогового значения, представляя повышенный расход топлива, поскольку транспортное средство перевозит больше груза.
Часто задаваемые вопросы
Вот некоторые часто задаваемые вопросы о стоимости погрузки:
Вопрос | Отвечать |
---|---|
Где указать стоимость погрузки? | Укажите стоимость загрузки в Vehicle.LoadLimit . |
Как соотносятся затраты на погрузку с отгрузками? | Стоимость загрузки применяется к отгрузкам, тип спроса на загрузку которых соответствует типу ограничения загрузки для транспортного средства, например, вес или объем. Типы загрузки являются произвольными строками, как описано в требованиях и ограничениях загрузки . |
Как выражаются затраты на погрузку? | Стоимость груза выражается в терминах расстояния или продолжительности перехода. Используйте cost_per_kilometer для указания стоимости в терминах расстояния и cost_per_traveled_hour для указания стоимости в терминах продолжительности. |
Когда применяются расходы на погрузку? | Загрузка транспортного средства сравнивается с load_threshold стоимости загрузки. Если указано cost_per_unit_above_threshold , стоимость добавляется пропорционально загрузке транспортного средства выше load_threshold с использованием формулы max(0, load - load_threshold) . Если указано cost_per_unit_below_threshold , стоимость добавляется пропорционально загрузке транспортного средства ниже load_threshold с использованием формулы min(load, load_threshold) . |
Каковы значения по умолчанию для параметров стоимости загрузки? | load_threshold , cost_per_unit_above_threshold и cost_per_unit_below_threshold по умолчанию равны нулю. |
В каких единицах выражается стоимость груза? | Стоимость погрузки выражается в тех же безразмерных единицах, что и все другие параметры стоимости, такие как global_duration_cost_per_hour или Shipment.penalty_cost . |
Где в ответе можно найти стоимость загрузки? | Понесенные затраты на загрузку отображаются в свойствах metrics и route_metrics ответных сообщений. Например, понесенная cost_per_kilometer будет отображаться как model.vehicles.load_limits.cost_per_kilometer . |
Подробное объяснение стоимости загрузки см. в справочной документации ( REST , gRPC ).
Пример: сделайте запрос OptimizeTours
Запросы OptimizeTours
также можно выполнять с использованием REST или gRPC .
Перед созданием запроса замените следующие параметры на значения, соответствующие вашей среде:
- Убедитесь, что у вас настроены учетные данные приложения по умолчанию , как описано в разделе Использование OAuth .
Установите PROJECT_NUMBER_OR_ID на номер или идентификатор вашего облачного проекта.
Следующая команда отправляет запрос
OptimizeTours
в API оптимизации маршрутов и синхронно получает ответ.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
После завершения запроса вы получите ответное сообщение.