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