exponenta event banner

intlinprog Синтаксис функции вывода и функции печати

Что такое функции вывода и функции графика?

intlinprog может вызывать функцию вывода или функцию графика после того, как в алгоритме происходят определенные события. Эти события включают в себя завершение фазы алгоритма, такой как решение корневой задачи ЛП, добавление вырезов, успешное завершение эвристики, поиск нового возможного решения на основе целого числа во время перехода и ограничения, значительное улучшение относительного промежутка или исследование ряда узлов в дереве перехода и ограничения.

Внимание

intlinprog функции вывода и функции графика отличаются от функций других решателей. Функции вывода или функции графика в других решателях Optimization Toolbox™ см. в разделах Функция вывода и Синтаксис функции графика и Функции графика.

  • Существует одна встроенная функция вывода: savemilpsolutions. Эта функция собирает целочисленные возможные точки, которые алгоритм находит во время события. Он помещает возможные точки в матрицу с именем xIntSol в базовой рабочей области, где каждый столбец является одной целочисленной возможной точкой. Сохраняет значения целевой функции в векторе с именем fIntSol, где каждая запись является целевой функцией соответствующего столбца в xIntSol.

  • Существует одна встроенная функция графика: optimplotmilp. Эта функция отображает внутренне рассчитанные границы для наилучшего значения целевой функции. Пример его использования см. в разделе Фабрика, Склад, Модель распределения продаж на основе решателя.

Вызовите функции вывода или печати, передав OutputFcn или PlotFcn пары имя-значение, включая дескриптор функции вывода или функции графика. Например,

options = optimoptions(@intlinprog,'OutputFcn',@savemilpsolutions,'PlotFcn',@optimplotmilp);
x = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub,options);

Если имеется несколько функций вывода или печати, передайте их как массив ячеек.

options = optimoptions(@intlinprog,'OutputFcn',{@savemilpsolutions,@customFcn});

Синтаксис пользовательской функции

Напишите собственную выходную функцию или функцию графика, используя следующий синтаксис:

function stop = customFcn(x,optimValues,state)

intlinprog передает данные x, optimValues, и state к вашей функции.

  • stop - Установить на true остановиться intlinprog. Установить в значение false позволить intlinprog для продолжения.

  • x - Пустая матрица [] или Nоколо-1 вектор, который является возможной точкой. x не является пустым только тогда, когда intlinprog находит новое целочисленное выполнимое решение. x может быть непустым, когда phase является 'heuristics' или 'branching'.

  • optimValues - структура, подробные данные которой находятся в структуре optimValues.

  • state - Одно из следующих значений:

    • 'init'intlinprog запускается. Это состояние используется для настройки всех необходимых графиков или структур данных.

    • 'iter'intlinprog решает проблему. Доступ к данным, связанным с ходом выполнения решателя. Например, печать или выполнение операций с файлами.

    • 'done'intlinprog закончил решение проблемы. Закройте все файлы, завершите аннотирование графиков и т.д.

Примеры записи функций вывода или печати см. в разделе Встроенные функции. savemilpsolutions.m или optimplotmilp.m.

optimValues Структура

optimValues ОбластьЗначение
phase

Фаза алгоритма. Возможные значения:

  • 'rootlp'intlinprog решил проблему корневого ЛП.

  • 'cutgen'intlinprog добавили порезы и улучшили нижнюю границу.

  • 'heuristics'intlinprog нашел новые возможные точки с помощью эвристики.

  • 'branching'intlinprog создает и исследует узлы в дереве, связанном ветвями.

fval

Наилучшая целевая функция, найденная до сих пор в целочисленной возможной точке. Когда phase = 'rootlp', fval - значение целевой функции в корневом узле, которое не обязательно является целочисленной возможной точкой.

lowerbound

Глобальная нижняя граница значения целевой функции. Пусто, когда phase = 'rootlp'.

relativegap

Относительный зазор между lowerbound и fval. Относительный разрыв представляет собой процент от 0 до 100, точно как в output аргумент. Пусто, когда phase = 'rootlp' или numfeaspoints = 0.

numnodes

Количество исследованных узлов. Ненулевое значение только в том случае, если phase = 'branching'.

numfeaspoints

Найдено целочисленных возможных решений.

time

Время в секундах, затраченное на данный момент, измеренное с помощью tic и toc от времени, когда state = 'init'.