Предположения
Предположения позволяют временно устанавливать дополнительные ограничения модели, чтобы проверить возможность решения. Если решение с дополнительными ограничениями не возможно, то ограничения можно снять, вернувшись к исходной модели.
Механизм предположений работает следующим образом:
- Создается булева переменная (триггер), которая отвечает за активацию одного или нескольких ограничений;
- В модель добавляются опциональные ограничения и привязываются к созданному триггеру;
- В модель добавляется предположение, устанавливающее значение триггера в ИСТИНА;
- Проверяется решение;
- При необходимости предположения очищаются и модель решается с новым набором предположений или без них.
В данном разделе в примерах ниже Модель = О2.СоздатьМодель();.
- Пример №1
- Пример №2
Пх = Модель.ПеременнаяДиапазона(-5, 5, "x");
Пy = Модель.ПеременнаяДиапазона(-2, 6, "y");
// описываем модель
// ...
// создаем переменную-триггер
СуммаПоложительна = Модель.БулеваПеременная();
// добавляем опциональное ограничение, привязанное к триггеру
Модель.Ограничения().Соотношение("x + y > 0", СуммаПоложительна);
// принудительно активируем триггер механизмом предположений
Модель.ДобавитьПредположение(СуммаПоложительна);
// пробуем решить модель
Решение = Модель.Решить();
Если Решение.РешениеНайдено() Тогда
// предположение подтвердилось
// TODO
Иначе
Модель.ОчиститьПредположения();
// TODO
КонецЕсли;
Пх = Модель.ПеременнаяДиапазона(-5, 5, "x");
Пy = Модель.ПеременнаяДиапазона(-2, 6, "y");
// описываем модель
// ...
// создаем переменную-триггер
ОбаОтрицательны = Модель.БулеваПеременная();
// добавляем опциональные ограничения, привязанное к триггеру
Модель.Ограничения().Соотношение("x < 0", ОбаОтрицательны);
Модель.Ограничения().Соотношение("y < 0", ОбаОтрицательны);
// принудительно активируем триггер механизмом предположений
Модель.ДобавитьПредположение(ОбаОтрицательны);
// пробуем решить модель
Решение = Модель.Решить();
Если Решение.РешениеНайдено() Тогда
// предположение подтвердилось
// TODO
Иначе
Модель.ОчиститьПредположения();
// TODO
КонецЕсли;
Методы механизма предположений
Механизм предположений содержит следующие методы объекта модели:
ДобавитьПредположение
Метод принимает в качестве аргумента булево выражение. При решении модели данное выражение будет принудительно установлено в значение ИСТИНА.
- Пример №1
- Пример №2
Триггер = Модель.БулеваПеременная();
Модель.ДобавиьтьПредположение(Триггер);
Триггер = Модель.БулеваПеременная();
Модель.ДобавиьтьПредположение(Модель.Отрицание(Триггер));
ОчиститьПредположения
Метод очищает все добавленные ранее предположения.
Модель.ОчиститьПредположения();