Создание объекта модели
Жизненный цикл
Модель маршрутизации создаётся в три этапа:
- Построитель параметров — собирает узлы и транспортные средства, фиксирует параметры модели (например, режим контроля целочисленности).
- Объект модели — порождается из построителя; узлы и ТС уже не меняются, а наполнение производится через менеджеры объекта модели (транзиты, ресурсы, ограничения, целевая функция и т. д.).
- Решение — получается вызовом
Модель.Решить()или через менеджер библиотекиО2.РешитьМодель(Модель)(см. Решение модели).
Создание модели через построитель
МенеджерМодели = О2
.Модели()
.МодельМаршрутизации();
Построитель = МенеджерМодели.СоздатьПостроительПараметровМодели();
Построитель.ДобавитьУзел("Депо");
Построитель.ДобавитьУзел("Клиент1");
Построитель.ДобавитьУзел("Клиент2");
Построитель.ДобавитьУзел("Клиент3");
Построитель.ДобавитьТранспортноеСредство(0, 0, "ТС1");
Модель = Построитель.СоздатьМодель();
О2.Модели() возвращает менеджер всех поддерживаемых классов моделей, МодельМаршрутизации() — менеджер модели маршрутизации, СоздатьПостроительПараметровМодели() — построитель.
Каждый вызов СоздатьМодель() возвращает независимый экземпляр модели, поэтому одного построителя достаточно для генерации нескольких моделей с одинаковой топологией. Сам построитель остаётся изменяемым и может быть дополнен между вызовами.
Контроль целочисленности
Модель маршрутизации работает только с целыми числами: значения транзитов, ёмкостей и границ ресурсов — Int64. Если в прикладной задаче значения вещественные (расстояния в километрах с долями, время в часах с долями), их нужно предварительно масштабировать (километры → метры, часы → секунды, рубли → копейки).
Поведение системы при попытке передать нецелое значение задаётся параметром КонтрольЦелыхЧисел. По умолчанию — ВызыватьИсключение:
Построитель.УстановитьКонтрольЦелыхЧисел(
Перечисления.О2_МетодыКонтроляЦелыхЧисел.Округлять
);
Менеджеры объекта модели
После создания модели наполнение производится через менеджеры — методы-аксессоры объекта модели:
Модель.Узлы() // менеджер узлов (только чтение, состав зафиксирован построителем)
Модель.ТочкиМаршрута() // менеджер точек маршрута
Модель.ТранспортныеСредства() // менеджер транспортных средств (только чтение)
Модель.Транзиты() // менеджер транзитов (матрицы, векторы, константы)
Модель.Ресурсы() // менеджер ресурсов
Модель.Ограничения() // менеджер ограничений
Модель.ЦелеваяФункция() // менеджер целевой функции
Модель.Выражения() // менеджер выражений
Модель.Интервалы() // менеджер интервалов планирования
Модель.Переменные() // менеджер переменных
Состав и назначение каждого менеджера описаны в последующих разделах раздела.
Идентификация сущностей
Методы менеджеров принимают идентификаторы узлов, транспортных средств, транзитов и ресурсов в одной из трёх форм:
- объект — фиксированная структура, возвращённая методом-фабрикой (например,
Модель.Транзиты().ДобавитьМатрицу(...)); - имя — строка, указанная при регистрации сущности (или сгенерированная автоматически —
_0,_1, ...); - индекс — целое число с 0 в порядке регистрации.
// По объекту
Транзит = Модель.Транзиты().ДобавитьМатрицу(Расстояния, "расстояния");
Модель.ЦелеваяФункция().УстановитьКоэффициентТранзита(Транзит);
// По имени
Модель.ЦелеваяФункция().УстановитьКоэффициентТранзита("расстояния");
// По индексу
Модель.ЦелеваяФункция().УстановитьКоэффициентТранзита(0);
Все три формы взаимозаменяемы и применимы к любому методу, принимающему Транзит, Ресурс, Узел или ТранспортноеСредство.
Полный перечень методов
Полный набор методов менеджера моделей и построителя — в разделе Программный интерфейс — Менеджер модели маршрутизации.