Требования к нагрузке и ограничения

Свойство loadDemands определяется в ShipmentModel.shipments.Shipment, а свойство loadLimits – в ShipmentModel.vehicles.Vehicle.

Требования к нагрузке и лимиты – это тип ограничений, которые можно использовать для управления мощностью. Это ограничение определяет требуемую вместимость груза и максимальную вместимость транспортного средства, что позволяет оптимизировать назначение маршрутов на основе этих ограничений.

Требования к нагрузке и ограничения могут поддерживать такие цели, как:

  • Не допускайте перегрузки транспортных средств.
  • Отслеживайте, как меняется загрузка транспортных средств по мере того, как грузы забираются и доставляются.
  • Приоритет отдается тяжелым грузовикам с тяжелыми грузами.

Требования к нагрузке и ограничения указываются в следующих свойствах:

  • 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-я посылка: 1
2-я посылка: 3
Указывает количество определенного типа нагрузки. В этом примере вы определяете две перевозки: в первой вы забираете одну собаку, во второй – три.
loadLimits тип загрузки string dogUnit Определяет тип ограничения нагрузки, применяемого к транспортному средству. Чтобы ограничение действовало, тип загрузки должен совпадать с типом загрузки отправления.
loadLimits maxLoad число 6 Указывает максимальное количество груза определенного типа, которое может перевозить транспортное средство. В этом примере у вас есть только одно транспортное средство с максимальной вместимостью 6 dogUnit, где каждая dogUnit представляет собой одну клетку для собаки.

На следующей диаграмме показаны пределы нагрузки транспортного средства, требования к нагрузке для каждой поставки и то, как каждая поставка потребляет пределы нагрузки транспортного средства:

Транспортное средство начинает маршрут с шестью пустыми местами, что соответствует его грузоподъемности. В первой партии нужно место для одной собаки, во второй – для трех. В итоге в транспортном средстве занято четыре места из шести, а два остаются свободными.

В этом примере требования к загрузке каждого отправления и ограничения по загрузке транспортного средства имеют следующие последствия:

  • Оптимизатор без проблем сгенерирует маршрут для перевозки собак, поскольку транспортное средство может перевозить до 6 собак, а вы забираете только 4.

  • Если грузоподъемность автомобиля составляет 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
        }
      }
}