Можно построить различные показатели прогресса во время выполнения решателя. Установите 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)
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