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

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

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

Внимание

intlinprog выходные функции и функции функций построения графика в других решателях. Для выходных функций или функций построения графика в других решателях Optimization Toolbox™, смотрите Выходная Функция и Plot Function Синтаксис и Функции построения графика.

  • Существует одна встроенная выходная функция: 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-by- 1 вектор, который является допустимой точкой. x не пуст только тогда, когда intlinprog находит новое целочисленное возможное решение. x может быть непустым, когда phase является 'heuristics' или 'branching'.

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

  • 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. Относительный промежуток - это процент от 0 до 100, в точности как в output аргумент. Пустой, когда phase = 'rootlp' или numfeaspoints = 0.

numnodes

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

numfeaspoints

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

time

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