Я пытаюсь следовать советам, данным здесь
http://www.mathworks.com/help/toolbox/optim/ug/brhkghv-7.html
, но у меня возникли проблемы.У меня сложная задача - минимизировать предмет сложных нелинейных ограничений, которые являются функциями от моих трех переменных выбора и широкого спектра параметров.Мой скрипт, который запускает все, выглядит так:
% define a bunch of parameters
gamma= .2;
beta = .3; %
x0=[.5 .5 .5];
%etc
solution = nested_minimization_program(x0,gamma,beta)
Nested_minimization_program выглядит так:
function out = nest_minimization-program(x0,gamma,beta)
options = optimset('GradObj','on');
out = fmincon(@objective,x0,[],[],[],[],[0 0 0],[1 1 1],@nonlin,options)
function [obj obj_gradient] = objective(x)
[obj obj_gradient] = complicated_objective(x,gamma,beta);
end
function [ineq_constriant eq_constraint] = nonlin(x)
[ineq_constriant eq_constraint] = complicated_constaints(x,beta,gamma)
end
end
Complicated_objective - это файл, который возвращает значение цели для своего первого аргумента, изначение анлайтичного градиента для его секунды.Complicated_constaints возвращает вектор ограничений нелинейного неравенства для его первого аргумента и вектор ограничений нелинейного равенства для его второго аргумента.
Причина для этого заключается в том, что я могу использовать синтаксис @objective и @nonlin для fmincon;target и nonlin - это только функции x, а не параметров, потому что они являются подфункциями функции, которой уже переданы параметры.Я считаю, что это форма, которую я должен использовать, чтобы передать градиент и нелинейные ограничения в fmincon.Моя проблема в том, что когда я запускаю этот код, я получаю следующую ошибку
Предупреждение. Алгоритм отражающей области доверия не решает проблему такого типа, используя алгоритм активного набора.Вы также можете попробовать алгоритмы "внутренняя точка" или sqp: установите для параметра "Алгоритм" значение "внутренняя точка" или "sqp" и выполните повторный запуск.Для получения дополнительной помощи см. Выбор алгоритма в документации.
IE, по какой-то причине fmincon покидает алгоритм отражения области доверия и переходит к активному набору, который не использует мой аналитический градиент.Требования к fmincon для использования аналитических градиентов в соответствии с http://www.mathworks.com/help/toolbox/optim/ug/brhkghv-3.html,
Написать код, который возвращает: Целевая функция (скаляр) в качестве первого вывода
Градиент (вектор)в качестве второго вывода
Установите для опции GradObj значение 'on' с помощью optimset.
Цель возвращает скалярное значение цели и градиент по мере необходимости, Gradobj включен, поэтому я не вижу своей проблемы.