intlinprog Выходная функция и синтаксис функции построения графика

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

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

Внимание

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 решенный корневая задача LP.

  • 'cutgen'intlinprog добавленные сокращения и улучшенный нижняя граница.

  • 'heuristics'intlinprog найденные новые допустимые точки с помощью эвристики.

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

fval

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

lowerbound

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

relativegap

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

numnodes

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

numfeaspoints

Количество целочисленных выполнимых решений найдено.

time

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