Перейти к основному содержимому

Решение модели

Получение объекта решения

Для получения решения достаточно вызвать метод Решить объекта модели:

Решение = Модель.Решить();

Также решение может быть получено через менеджер библиотеки:

Решение = О2.РешитьМодель(Модель);

Метод РешитьМодель менеджера библиотеки позволяет решать не только модель, сформированную программным кодом, но и модель в виде двоичных данных, записанную ранее на диск:

ИмяФайлаМодели = "C:\path\to\my\model.o2m";

Решение = О2.РешитьМодель(ИмяФайлаМодели);

Кроме имени файла могут быть переданы также объекты с типом ДвоичныеДанные, Поток, ФайловыйПоток, ПотокВПамяти.

Параметры поиска решения

В методы Решить и РешитьМодель могут быть переданы дополнительные параметры. Пример:

НастройкиРешателя = О2.СоздатьНастройкиРешателя();
НастройкиРешателя.ЛимитВремени = 10; // <-- искать решение не болле 10 секунд
НастройкиРешателя.КоличествоПотоков = 8; // <-- использовать не более 8 потоков

ПараметрыПоиска = О2.СоздатьПараметрыПоиска();

ПараметрыПоиска.Сервис = О2.Сервисы().Локальный();
ПараметрыПоиска.НастройкиРешателя = НастройкиРешателя;

Решение = Модель.Решить(ПараметрыПоиска);

// Или

Решение = О2.РешитьМодель(Модель, ПараметрыПоиска);

Параметры поиска содержат следующие поля:

Имя параметраОписание
СервисПараметр определяет, где имеено должны быть выполнены вычисления. Использование различных сервисов подробно описано в данном разделе.
НастройкиРешателяОпределяет используемый решающий алгоритм и его настройки.

Загрузка готового решения

Если решение модели было получено с помощью консольной утилиты, то оно может быть загружено из файла:

ИмяФайлаРешения = "C:\path\to\my\solution.o2s";

Решение = О2.ЗагрузитьРешение(ИмяФайлаРешения);

Методы работы с консольной утилитой подробно описаны в данном разделе.

Обработка результата

Полученный объект решения может быть использован для обработки результата. Пример:

Решение = Модель.Решить();

Если Решение.РешениеНайдено() Тогда
СтатусРешения = Решение.Статус(); // <-- оптимальное или допустимое
КоличествоПеременных = Решение.КоличествоПерменных();

ЗначениеX = Решение.ЗначениеПеременной("x"); // <-- получаем значение переменной по имени
ЗначениеY = Решение.ЗначениеПеременной(ПеременнаяY); // <-- получаем значение переменной по сохраненной ссылке

НекийРезультат = Решение.ЗначениеВыражения("x * y + 2 * (y - x)"); // <-- вычисляем выражение, содержащее значения переменных

// TODO
// используем найденные значения в своей бизнес-логике
Иначе
Сообщить("Решение не найдено!");
КонецЕсли;

Методы объекта решения

Статус

Метод возвращает статус решения. Пример:

СтатусРешения = Решение.Статус();

Если СтатусРешения = О2.СтатусыРешений().Оптимальное() Тогда
Сообщить("Найдено оптимальное решение!");
КонецЕсли;

Для модели данного типа доступны следующие значения статусов:

СтатусРасшифровка
ОшибочнаяМодельРешение не найдено, т.к. в данных модели обнаружены ошибки.
РешениеОтсутсвуетРешающий алгоритм достоверно определил, что решения не существует.
ОптимальноеРешение найдено и достоверно определено, что оно оптимальное (значение целевой функции оптимально).
ДопустимоеРешение найдено, но за отведенное время не удалось определить, что оно оптимально. Оптимальность решения не гарантируется.

РешениеНайдено

Метод возвращает Истина, если статус решения Оптимально или Допустимо. Пример:

Решение = Модель.решить();

Если Решение.РешениеНайдено() Тогда
// TODO
КонецЕсли;

Если при решении задачи требуется нахождение строго оптимального решения, то следует проверять статус.

КоличествоПременных

Метод возвращает количество переменных, доступных в объекте решения:

КоличествоПеременных = Решение.КоличествоПеременных();

ЗначениеПеременной

Метод возвращает найденное значение переменной, зарегистрированной в модели. В качестве входного параметра могут быть указаны:

  • непосредственно объект перменной (фиксированная структура);
  • имя переменной;
  • номер переменной (присваивается моделью автоматически).
Переменная = Модель.Переменная("x");

Решение = Модель.Решить();

ЗначениеX = Решение.ЗначениеПеременной(Переменная); // <-- передаем объект переменной
// Или
ЗначениеX = Решение.ЗначениеПеременной("x"); // <-- передаем имя переменной
// Или
ЗначениеX = Решение.ЗначениеПеременной(1); // <-- передаем номер переменной
ВАЖНО

Если в качестве аргумента передается объект переменной, то необходимо, чтобы эта переменная была зарегистрирована в модели, для которой получено решение. Проверка происходит по идентификаторам внутри модели и внутри решения. При попытке передачи переменной из другой модели, метод вернет значение Неопределено. Также метод вернет значение Неопределено при запросе отсутсвуещего номера или отсутсвующего имени переменной.

ЗначениеВыражения

Метод возвращает расчетное значение переданного выражения. В качестве выражения могут быть переданы:

Пример:

ПеременнаяX = Модель.Переменная("x");
ПеременнаяY = Модель.Переменная("y");

Модель.Ограничения().Соотношение("x = 2; y = 3");

Решение = Модель.Решить();

Значение1 = Решение.ЗначениеВыражения("x + 2*y + y*y"); // --> 17
Значение2 = Решение.ЗначениеВыражения(ПеременнаяX); // --> 2
Значение3 = Решение.ЗначениеВыражения(42); // --> 42
Значение4 = Решение.ЗначениеВыражения(
Модель.Выражения().Терм(ПеременнаяY, 5)
); // --> 15

ЗначениеЦелевойФункции

Метод возвращает оптимальное значение целевой функции, найденное в ходе решения. Если целевая функция не задана, будет возвращено значение "0".

Пример:

Модель.ПеременнаяДиапазона(0, 10, "x");
Модель.ПеременнаяДиапазона(0, 10, "y");

Модель.Ограничения().Соотношение("y > x");

Модель.Максимизировать("x + y");

Решение = Модель.Решить();

ОптимальноеЗначение = Решение.ЗначениеЦелевойФункции(); // --> 19

МетаданныеРешения

Метод возвращает стуктуру, содержащую метаданные решения со следующими полями:

ПолеОписание
ИдентификаторМоделиУникальный идентификатор модели, присвоенный при ее создании.
ТипМоделиТип модели
ВерсияРасширенияВерсия расширения библиотеки O2
ВерсияСовместимостиНомер мажорной версии, который должен совпадать у расширения и у решателя.
ИдентификаторРешенияУникальный идентификатор решения, присвоенный решателем.
ВерсияРешателяНомер версии решателя.
ТипРешателяАлгоритм, использованный при решении.

РезультатПроверки

Возвращает результат валидации данных модели в виде структуы с полями:

ПолеОписание
УспехПризнак успешности прохождения проверки.
ОписаниеОшибкиТекстовое описание найденых ошибок. Поле присутствует, если Успех = Ложь.