Matlab - Правильная настройка fmincon, когда объективные и нелинейные константы нуждаются в параметрах - PullRequest
2 голосов
/ 13 апреля 2011

Я пытаюсь следовать советам, данным здесь

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 включен, поэтому я не вижу своей проблемы.

1 Ответ

0 голосов
/ 14 апреля 2011

Я получил некоторую помощь от группы Matlab Usenet, и мне стало известно, что методы области доверия на самом деле не поддерживают нелинейные ограничения, поэтому это не является ошибкой в ​​моем коде вообще. Они рекомендуют переписывать с использованием алгоритма «внутренняя точка», у которого есть свои проблемы, но по крайней мере эта проблема была решена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...