Выходная функция 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 к вашей функции.

  • остановка Установите на true, чтобы остановить intlinprog. Установите на false, чтобы позволить intlinprog продолжаться.

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

  • optimValues — Структура, детали которой находятся в optimValues Структуре.

  • state — Одно из этих значений:

    • 'init'intlinprog запускается. Используйте это состояние, чтобы настроить любые графики или структуры данных, в которых вы нуждаетесь.

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

    • сделанный 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'.