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

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-я партия: 1
2-я партия: 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.

  • Ограничение по загрузке транспортного средства на 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
        }
      }
}