Требования и ограничения нагрузки – это тип ограничений, который можно использовать для управления емкостью. Это ограничение определяет требуемую вместимость груза и максимальную вместимость транспортного средства, что позволяет оптимизировать назначение маршрутов на основе этих ограничений.
Требования к нагрузке и ограничения могут поддерживать такие цели, как:
- Не допускайте перегрузки транспортных средств.
- Отслеживайте, как меняется загрузка транспортных средств по мере того, как грузы забираются и доставляются.
- Приоритет отдается сопоставлению тяжелых транспортных средств с перевозками тяжелых грузов.
Требования к нагрузке и ограничения указываются в следующих свойствах:
loadDemandsуказывает объем, необходимый для конкретной отправки.loadLimitsуказывает максимальную вместимость для определенного транспортного средства.
Структура
Как показано на диаграмме, требования к нагрузке и ограничения структурированы следующим образом:
loadDemands– это свойство элементаShipment. УShipmentможет быть несколько требований к загрузке.loadLimits– это свойство элементаVehicle. У одногоVehicleможет быть несколько ограничений по нагрузке.
Контрольный список Essentials
В контрольном списке ниже описаны основные знания, которые помогут предотвратить потенциальные ошибки, связанные с загрузкой. Этот список поможет вам проверить запрос и устранить неполадки с ответом.
Свойства
В этом разделе описываются свойства, связанные с требованиями к нагрузке и ограничениями:
- Тип нагрузки. Общее свойство для требований к нагрузке и ограничений.
LoadиLoadLimit. Уникальные свойства, которые присутствуют в запросах на загрузку и ограничениях загрузки соответственно.
Тип загрузки
Тип загрузки – это строковый ключ, который применяется к отправлениям и транспортным средствам. Один тип груза применяется к требованиям к грузу для перевозки, а также к ограничению на груз для транспортного средства.
Типы загрузки используют синтаксис типа карты Protocol Buffers. Присваивая название типу нагрузки, используйте идентификаторы, описывающие тип нагрузки и ее единицу измерения. Примеры: weightKg, volume_gallons, palletcount, frequencyDaily.
Load и LoadLimit
Объекты Load и LoadLimit содержат определенные свойства, которые задают требования к вместимости транспортных средств и объему грузов. Эти свойства описаны в таблице ниже.
| Объект | Родитель | Свойство | Тип объекта | Описание ресурса |
|---|---|---|---|---|
Load |
loadDemands |
amount |
Строка (формат int64). | Определяет требования к вместимости груза указанного типа. |
LoadLimit |
loadLimits |
maxLoad |
Строка (формат int64). | Определяет максимальную грузоподъемность транспортного средства указанного типа. |
Примеры
В этом разделе приведены три типа примеров:
- Примеры кода, иллюстрирующие структуру свойств load demands и limits.
- Пример, в котором показано, как использовать требования к загрузке и ограничения в запросе к API.
- Пример запроса, который включает значения, заданные в примере сценария.
Примеры кода
В примере ниже показана структура требования к загрузке, в которой можно задать тип loadDemands в виде строки и свойство amount в виде строки в формате int64:
{ "model": { "shipments": [ ... { "loadDemands": { "MATCHING_LOAD_TYPE": { "amount": "YOUR_LOAD_AMOUNT" } } } ], "vehicles": [ ... ] } }
В примере ниже показана самая простая структура ограничения загрузки, где тип loadLimits задается в виде строки, а свойство maxLoad – в виде строки в формате int64:
{ "model": { "shipments": [ ... ], "vehicles": [ ... { "loadLimits": { "MATCHING_LOAD_TYPE": { "maxLoad": "YOUR_MAX_LOAD" } } } ] } }
Пример
В этом разделе описан сценарий, в котором вы владеете детским садом для собак и оптимизируете маршрут для перевозки нескольких собак в автомобиле с ограниченным количеством клеток.
Каждая перевозка – это одна остановка, на которой вы забираете определенное количество собак. В этом примере у каждой посылки разное место получения (дом, где вы присматриваете за собаками), но одинаковое место доставки (здание, где находится детский сад для собак).
В этом примере значения свойств в запросе следующие:
| Родитель | Свойство | Тип | Значение | Сценарий |
|---|---|---|---|---|
loadDemands |
тип загрузки | string | dogUnit |
Определяет тип груза для отправления. В этом примере используется dogUnit, где каждый dogUnit представляет одну собаку. |
loadDemands |
amount |
число | Первая отправка: 1Вторая отправка: 3 |
Указывает количество определенного типа нагрузки. В этом примере вы определяете две перевозки: в первой вы забираете одну собаку, а во второй – три. |
loadLimits |
тип загрузки; | string | dogUnit |
Определяет тип ограничения нагрузки, применяемого к транспортному средству. Это значение должно совпадать с типом загрузки груза, чтобы ограничение было актуальным. |
loadLimits |
maxLoad |
число | 6 |
Указывает максимальное количество груза определенного типа, которое может перевозить транспортное средство. В этом примере у вас есть только одно транспортное средство с максимальной вместимостью 6 dogUnit, где каждый dogUnit представляет собой одну клетку для собаки. |
На следующей диаграмме показаны пределы загрузки транспортного средства, требования к загрузке для каждой поставки и то, как каждая поставка потребляет пределы загрузки транспортного средства:

В этом примере требования к загрузке каждого отправления и ограничения на загрузку транспортного средства имеют следующие последствия:
Оптимизатор без проблем построит маршрут для перевозки собак, поскольку в автомобиле можно перевозить до шести собак, а вам нужно забрать только четырех.
При ограничении нагрузки на транспортное средство в 6
dogUnitвы можете перевозить на этом транспортном средстве только ещё двух собак.Если количество собак превышало лимит, оптимизатор пропускал один из пунктов или назначал подходящий автомобиль.
Помните, что набора предопределенных типов не существует. В этом примере вы можете изменить тип груза с единиц собак на единицы веса, чтобы ограничить вес собак, или изменить его на линейные измерения, чтобы ограничить их ширину или высоту. Это позволяет настраивать требования к нагрузке и ограничения в соответствии с вашими потребностями.
Пример запроса
В следующем примере показана структура базового запроса optimizeTours с использованием значений из примера сценария:
{ "model": { "shipments": [ { "pickups": [ { "arrivalLocation": { "latitude": 37.8024, "longitude": -122.4058 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ], "label": "One bernese mountain dog", "loadDemands": { "dogUnit": { "amount": "1" } } }, { "pickups": [ { "arrivalLocation": { "latitude": 37.7359, "longitude": -122.5011 } } ], "deliveries": [ { "arrivalLocation": { "latitude": 37.759773, "longitude": -122.427063 } } ], "label": "Three chihuahuas", "loadDemands": { "dogUnit": { "amount": "3" } } } ], "vehicles": [ { "startLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "endLocation": { "latitude": 37.759773, "longitude": -122.427063 }, "loadLimits": { "dogUnit": { "maxLoad": "6" } }, "costPerKilometer": 1.0 } ] } }
Помните, что, в отличие от этого примера, у отправки может быть несколько требований к загрузке, а у транспортного средства – несколько ограничений по весу. Это позволяет задавать сложные ограничения, которые будут учитываться при оптимизации маршрутов автопарка.
Мягкие ограничения нагрузки
Вы можете задать ограничения нагрузки в качестве мягких ограничений, добавив softMaxLoad и costPerUnitAboveSoftMax в loadLimits транспортного средства. Это позволяет оптимизатору превышать максимальную загрузку транспортного средства за определенную плату, отдавая приоритет завершению маршрута, а не строгому соблюдению лимита загрузки.
Вы можете использовать maxLoad и softMaxLoad вместе, чтобы задать как жесткое, так и мягкое ограничение нагрузки. В этом случае softMaxLoad задает нагрузку, которая может быть превышена, а maxLoad – жесткое ограничение, которое превысить нельзя. Если используются оба атрибута, значение maxLoad должно быть больше, чем softMaxLoad.
Свойства
В таблице ниже описаны свойства мягких ограничений для требований к нагрузке и лимитов.
| Родитель | Название свойства | Тип объекта | Описание ресурса |
|---|---|---|---|
loadLimits |
softMaxLoad |
Строка (формат int64). | Предпочтительная максимальная нагрузка для транспортного средства. Если груз транспортного средства превышает это значение, взимается плата. |
loadLimits |
costPerUnitAboveSoftMax |
число | Стоимость единицы груза сверх softMaxLoad. Это поле обязательно, если используется свойство softMaxLoad. Подробнее о модели затрат… |
Пример кода
В примере ниже показана структура свойств мягких ограничений для loadLimits.
{ "loadLimits": { "LOAD_TYPE": { "softMaxLoad": "LOAD_AMOUNT", "costPerUnitAboveSoftMax": COST_PER_UNIT } } }