Сделайте запрос с указанием стоимости загрузки, чтобы оптимизатор учёл нагрузку, которую перевозят ваши автомобили между посещениями. Понесенные затраты зависят как от количества перевезенного 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
После завершения запроса вы получите ответное сообщение.