Функции построения графиков

Постройте график оптимизации во время выполнения

Можно построить различные показатели прогресса во время выполнения решателя. Установите PlotFcn пара "имя-значение" в optimoptions, и задайте одну или несколько функций построения графика для решателя, чтобы вызвать на каждой итерации. Передайте указатель на функцию или cell-массив указателей на функцию.

Существует множество предопределенных доступных функций построения графика. Смотрите PlotFcn описание опции на странице ссылки на функцию решателя.

Можно также использовать пользовательски записанную функцию построения графика. Запишите файл функции с помощью той же структуры в качестве выходной функции. Для получения дополнительной информации об этой структуре смотрите Синтаксис Выходной функции и Функции построения графика.

Используйте функцию построения графика

В этом примере показано, как использовать функции построения графика, чтобы просмотреть прогресс fmincon 'interior-point' алгоритм. Проблема взята из, Решают Ограниченную Нелинейную задачу, Основанную на решателе.

Запишите нелинейную цель и ограничительные функции, включая их градиенты. Целевая функция является функцией Розенброка.

type rosenbrockwithgrad
function [f,g] = rosenbrockwithgrad(x)
% Calculate objective f
f = 100*(x(2) - x(1)^2)^2 + (1-x(1))^2;

if nargout > 1 % gradient required
    g = [-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1));
        200*(x(2)-x(1)^2)];
end

Сохраните этот файл как rosenbrockwithgrad.m.

Ограничительная функция состоит в том, что решение удовлетворяет norm(x)^2 <= 1.

type unitdisk2
function [c,ceq,gc,gceq] = unitdisk2(x)
c = x(1)^2 + x(2)^2 - 1;
ceq = [ ];

if nargout > 2
    gc = [2*x(1);2*x(2)];
    gceq = [];
end

Сохраните этот файл как unitdisk2.m.

Создайте опции для решателя, которые включают вызов трех функций построения графика.

options = optimoptions(@fmincon,'Algorithm','interior-point',...
 'SpecifyObjectiveGradient',true,'SpecifyConstraintGradient',true,...
 'PlotFcn',{@optimplotx,@optimplotfval,@optimplotfirstorderopt});

Создайте начальную точку x0 = [0,0], и набор остающиеся входные параметры, чтобы опустеть ([]).

x0 = [0,0];
A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];

Вызовите fmincon, включая опции.

fun = @rosenbrockwithgrad;
nonlcon = @unitdisk2;
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

Figure Optimization Plot Function contains 3 axes objects. Axes object 1 with title Current Point contains an object of type bar. Axes object 2 with title Current Function Value: 0.0456748 contains an object of type line. Axes object 3 with title First-order Optimality: 2.16246e-08 contains an object of type line.

Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in 
feasible directions, to within the value of the optimality tolerance,
and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2

    0.7864    0.6177

Похожие темы