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

The loadDemands property is defined under ShipmentModel.shipments.Shipment and the loadLimits property under ShipmentModel.vehicles.Vehicle.

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

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

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

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

  • loadDemands указывает объем грузоподъемности, необходимый для конкретной партии груза .
  • loadLimits определяет максимальную грузоподъемность данного транспортного средства .

Структура

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

  • loadDemands — это свойство объекта Shipment . У одного Shipment может быть несколько запросов на перевозку.
  • loadLimits — это свойство объекта Vehicle . У Vehicle может быть несколько предельных значений нагрузки.

Контрольный список необходимых вещей

Приведенный ниже контрольный список описывает основные знания, которые помогут предотвратить потенциальные ошибки, связанные с загрузкой. Этот список поможет вам подтвердить ваш запрос и устранить неполадки в ответе.

Характеристики

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

  • Тип нагрузки: Общее свойство как для требуемой, так и для предельной нагрузки.
  • Load и LoadLimit : уникальные свойства, присущие соответственно требованиям к нагрузке и предельным значениям нагрузки.

Тип нагрузки

Тип груза — это строковый ключ, который применяется одинаково ко всем грузам и транспортным средствам. Один тип груза применяется как к требуемой нагрузке груза, так и к предельной нагрузке транспортного средства.

Для типов грузов используется синтаксис типов карт Protocol Buffers . При именовании типа груза используйте идентификаторы, описывающие тип груза и его единицу измерения. Например: weightKg , volume_gallons , palletcount или frequencyDaily .

Load и LoadLimit

Объекты Load и LoadLimit содержат определенные свойства, определяющие требования к грузоподъемности грузов и транспортных средств; в следующей таблице описаны эти свойства:

Объект Родитель Свойство Тип недвижимости Описание объекта недвижимости
Load loadDemands amount строка (формат int64) Определяет требования к грузоподъемности для указанного типа груза .
LoadLimit loadLimits maxLoad строка (формат int64) Определяет максимальную грузоподъемность транспортного средства указанного типа.

Примеры

В этом разделе рассматриваются три типа примеров:

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

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

The vehicle begins the route with 6 empty spaces representing the load limits of the vehicle. The first shipment demands space for one dog, the second shipment demands space for three dogs. The end state of the vehicle is having 4 of the 6 spaces now occupied, with two empty spaces remaining.

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

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

  • Ограничение на количество dogUnit в автомобиле до 6 означает, что в этом конкретном транспортном средстве можно перевозить только двух дополнительных собак .

  • Если количество собак превышало допустимую нагрузку, оптимизатор либо пропускал один из пунктов погрузки , либо назначал его подходящему транспортному средству.

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

Пример запроса

В следующем примере показана структура базового запроса 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
        }
      }
}