Выражения
Выражение — это линейная комбинация переменных модели (свободных, ресурсных, маршрутных). Выражения — это «строительный материал» для:
- выражений-ограничений — условий вида
ЗначениеРавно,ЗначениеБольше,ВсеРазличныеи т. п.; - условий опциональных интервалов;
- продвинутых сценариев работы с целевой функцией и сериализацией решения.
В большинстве типовых задач прямая работа с выражениями не требуется: ресурсы, транзиты и стандартные ограничения покрывают сценарии VRP/VRPTW/PDP. Менеджер Выражения() нужен, когда требуется тонкое условие, не выражаемое стандартными средствами — например, «посетили либо Клиент1, либо Клиент2, но не обоих».
Получение менеджера
Выражения = Модель.Выражения();
Основные методы
Модель.Выражения().Выражение(Значение) // преобразовать любое значение в выражение
Модель.Выражения().Константа(Значение) // выражение-константа
Модель.Выражения().Терм(Выражение, Коэффициент) // выражение × коэффициент
Модель.Выражения().Сумма(Выражения1, Выражения2, Выражения3, Выражения4) // сумма
Модель.Выражения().ВзвешеннаяСумма(Выражения, Коэффициенты) // взвешенная сумма
Модель.Выражения().СоздатьПостроительВыражений() // отдельный построитель для сложных выражений
Выражение(Значение) принимает:
- число — превращается в константу;
- булево — превращается в
0/1; - объект переменной — используется как переменная;
- строку — разбирается как линейная нотация (
"x + 2 * y - 1").
Пример: «посетили строго одного из двух клиентов»
Построим выражение «сумма флагов посещения Клиент1 и Клиент2» и наложим ограничение «равно 1»:
Клиент1 = Модель.Узлы().Получить("Клиент1");
Клиент2 = Модель.Узлы().Получить("Клиент2");
ТочкаКлиента1 = Модель.ТочкиМаршрута().ПолучитьПоУзлу(Клиент1);
ТочкаКлиента2 = Модель.ТочкиМаршрута().ПолучитьПоУзлу(Клиент2);
ФлагКлиента1 = Модель.Переменные().ПризнакПосещения(ТочкаКлиента1);
ФлагКлиента2 = Модель.Переменные().ПризнакПосещения(ТочкаКлиента2);
СуммаФлагов = Модель.Выражения().Сумма(ФлагКлиента1, ФлагКлиента2);
Модель.Ограничения().ЗначениеРавно(СуммаФлагов, 1);
См. также
-
Ограничения — где применяются выражения-ограничения.
-
Переменные — что используется внутри выражений.
-
Интервалы — условие активности интервала задаётся выражением.