Перейти к основному содержимому

О2_Routing_МенеджерРесурсов.Добавить

Регистрирует ресурс модели — счётчик, накапливающийся вдоль маршрута. Прирост значения ресурса при переходе по дуге задаётся транзитом — единым для всех ТС или индивидуальным (массивом транзитов по числу ТС). Ёмкость может быть единой или per-vehicle. Метод вызывается на менеджере: Модель.Ресурсы().Добавить(...).

Синтаксис

Модель.Ресурсы().Добавить(
Транзит,
МаксимальныйРезерв = 0,
Емкость = Неопределено,
НакапливатьСНуля = Истина,
Имя = Неопределено
)

Параметры

  • ТранзитФиксированнаяСтруктура, Строка, Число — транзит-источник прироста: объект транзита, имя или индекс (с нуля).
  • ТранзитМассив — массив транзитов длины, равной числу транспортных средств модели. Каждое ТС использует свой транзит.
  • МаксимальныйРезервЧисло — максимальное значение резерва (slack) на точке маршрута. Резерв позволяет учитывать ожидание или простой между прибытием и обслуживанием (например, ожидание начала временного окна). По умолчанию — 0.
  • ЕмкостьЧисло, Неопределено — единая ёмкость для всех транспортных средств. Если не указана — верхней границы значения ресурса нет.
  • ЕмкостьМассив из Число — массив ёмкостей по числу ТС, индивидуальный для каждого транспортного средства.
  • НакапливатьСНуляБулево — признак фиксации стартового значения ресурса в ноль. По умолчанию — Истина.
  • ИмяСтрока, Неопределено — уникальное имя ресурса. Если не указано, генерируется автоматически как _<индекс>.

Возвращаемое значение

  • ФиксированнаяСтруктура — объект ресурса.

Описание

Единый метод регистрации ресурсов. Через комбинацию параметров покрывает все варианты, которые ранее задавались отдельными перегрузками: единая ёмкость и общий транзит, индивидуальная ёмкость на каждое ТС, индивидуальный транзит для каждого ТС, источник-константа, источник-вектор. Конкретная форма определяется типом аргументов:

  • Транзит — структура/имя/индекс → один транзит-источник для всех ТС;
  • Транзит — массив → индивидуальный транзит для каждого ТС;
  • Емкость — число → единая ёмкость для всех ТС;
  • Емкость — массив → индивидуальная ёмкость для каждого ТС.

Пример

Грузоподъёмность с единой ёмкостью:

ВекторСпрос = О2.Утилиты().Массив(0, 1, 1, 1, 1);
Модель.Транзиты().ДобавитьВектор(ВекторСпрос, "спрос");

Модель.Ресурсы().Добавить("спрос", 0, 2, Истина, "груз");

Per-vehicle ёмкости (3 ТС с разной грузоподъёмностью):

ЕмкостиТС = О2.Утилиты().Массив(5, 3, 2);

Модель.Ресурсы().Добавить("спрос", 0, ЕмкостиТС, Истина, "груз");

Per-vehicle транзиты (грузовик и велокурьер ездят с разной скоростью):

Модель.Транзиты().ДобавитьМатрицу(ВремяГрузовика, "время_грузовик");
Модель.Транзиты().ДобавитьМатрицу(ВремяВелосипеда, "время_велосипед");

ТранзитыПоТС = О2.Утилиты().Массив("время_грузовик", "время_велосипед");

Модель.Ресурсы().Добавить(ТранзитыПоТС, 0, 600, Истина, "Время");

См. также