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

Создание объекта модели

Жизненный цикл

Модель маршрутизации создаётся в три этапа:

  1. Построитель параметров — собирает узлы и транспортные средства, фиксирует параметры модели (например, режим контроля целочисленности).
  2. Объект модели — порождается из построителя; узлы и ТС уже не меняются, а наполнение производится через менеджеры объекта модели (транзиты, ресурсы, ограничения, целевая функция и т. д.).
  3. Решение — получается вызовом Модель.Решить() или через менеджер библиотеки О2.РешитьМодель(Модель) (см. Решение модели).

Создание модели через построитель

МенеджерМодели = О2
.Модели()
.МодельМаршрутизации();

Построитель = МенеджерМодели.СоздатьПостроительПараметровМодели();

Построитель.ДобавитьУзел("Депо");
Построитель.ДобавитьУзел("Клиент1");
Построитель.ДобавитьУзел("Клиент2");
Построитель.ДобавитьУзел("Клиент3");

Построитель.ДобавитьТранспортноеСредство(0, 0, "ТС1");

Модель = Построитель.СоздатьМодель();

О2.Модели() возвращает менеджер всех поддерживаемых классов моделей, МодельМаршрутизации() — менеджер модели маршрутизации, СоздатьПостроительПараметровМодели() — построитель.

Каждый вызов СоздатьМодель() возвращает независимый экземпляр модели, поэтому одного построителя достаточно для генерации нескольких моделей с одинаковой топологией. Сам построитель остаётся изменяемым и может быть дополнен между вызовами.

Контроль целочисленности

Модель маршрутизации работает только с целыми числами: значения транзитов, ёмкостей и границ ресурсов — Int64. Если в прикладной задаче значения вещественные (расстояния в километрах с долями, время в часах с долями), их нужно предварительно масштабировать (километры → метры, часы → секунды, рубли → копейки).

Поведение системы при попытке передать нецелое значение задаётся параметром КонтрольЦелыхЧисел. По умолчанию — ВызыватьИсключение:

Построитель.УстановитьКонтрольЦелыхЧисел(
Перечисления.О2_МетодыКонтроляЦелыхЧисел.Округлять
);

Менеджеры объекта модели

После создания модели наполнение производится через менеджеры — методы-аксессоры объекта модели:

Модель.Узлы() // менеджер узлов (только чтение, состав зафиксирован построителем)
Модель.ТочкиМаршрута() // менеджер точек маршрута
Модель.ТранспортныеСредства() // менеджер транспортных средств (только чтение)
Модель.Транзиты() // менеджер транзитов (матрицы, векторы, константы)
Модель.Ресурсы() // менеджер ресурсов
Модель.Ограничения() // менеджер ограничений
Модель.ЦелеваяФункция() // менеджер целевой функции
Модель.Выражения() // менеджер выражений
Модель.Интервалы() // менеджер интервалов планирования
Модель.Переменные() // менеджер переменных

Состав и назначение каждого менеджера описаны в последующих разделах раздела.

Идентификация сущностей

Методы менеджеров принимают идентификаторы узлов, транспортных средств, транзитов и ресурсов в одной из трёх форм:

  • объект — фиксированная структура, возвращённая методом-фабрикой (например, Модель.Транзиты().ДобавитьМатрицу(...));
  • имя — строка, указанная при регистрации сущности (или сгенерированная автоматически — _0, _1, ...);
  • индекс — целое число с 0 в порядке регистрации.
// По объекту
Транзит = Модель.Транзиты().ДобавитьМатрицу(Расстояния, "расстояния");
Модель.ЦелеваяФункция().УстановитьКоэффициентТранзита(Транзит);

// По имени
Модель.ЦелеваяФункция().УстановитьКоэффициентТранзита("расстояния");

// По индексу
Модель.ЦелеваяФункция().УстановитьКоэффициентТранзита(0);

Все три формы взаимозаменяемы и применимы к любому методу, принимающему Транзит, Ресурс, Узел или ТранспортноеСредство.

Полный перечень методов

Полный набор методов менеджера моделей и построителя — в разделе Программный интерфейс — Менеджер модели маршрутизации.