О2_Routing_МенеджерОграничений.ГруппаАльтернативныхУзлов
Регистрирует группу альтернативных узлов — набор узлов, из которых маршрут может посетить только часть с уплатой штрафа за каждый пропущенный узел. Метод вызывается на менеджере: Модель.Ограничения().ГруппаАльтернативныхУзлов(Узлы, Штраф, НормаПосещений).
Синтаксис
Модель.Ограничения().ГруппаАльтернативныхУзлов(Узлы, Штраф, НормаПосещений)
Параметры
- Узлы — Массив — узлы группы. Элементы массива — объекты узлов, их индексы (0-based) или имена.
- Штраф — Число — штраф за каждый непосещённый узел группы, добавляемый к целевой функции.
- НормаПосещений — Число, Неопределено — максимальное число посещаемых узлов из набора. Если не указано, ограничение не накладывается (можно посетить все или ни одного).
Возвращаемое значение
- ФиксированнаяСтруктура — объект группы альтернативных узлов.
Описание
Группы альтернативных узлов применяются в двух типичных сценариях:
- Пропуск необязательных узлов: каждый узел оборачивается в группу из одного элемента с заданным штрафом — посещение узла перестаёт быть жёстким требованием, и решатель самостоятельно решает, выгоднее ли посетить узел или заплатить штраф.
- Выбор одной из альтернатив: группа из нескольких узлов с
НормаПосещений = 1— например, выбор одной из доступных точек выгрузки.
Пример
// Необязательный клиент со штрафом 1000 за пропуск
Модель.Ограничения().ГруппаАльтернативныхУзлов(О2.Утилиты().Массив("a"), 1000);
// Из трёх альтернативных точек посещаем строго одну
Модель.Ограничения().ГруппаАльтернативныхУзлов(
О2.Утилиты().Массив("точка1", "точка2", "точка3"),
0, // штраф (за пропуск двух из трёх — ноль, выбор любой допустим)
1 // <-- норма посещений — посещается ровно одна
);