Как использовать MATLAB fminunc для нескольких аргументов оптимизации? - PullRequest
0 голосов
/ 28 мая 2018

Optimization

Пожалуйста, обратитесь к приложенному рисунку для решения проблемы.На этом рисунке переменные q, g и h являются векторами, где sigma - скалярная величина.Я хорошо справляюсь с отдельными аргументами для задачи оптимизации, используя MATLAB fminunc, будь то скаляр или вектор.

Но я не могу использовать для этой проблемы

1 Ответ

0 голосов
/ 29 мая 2018

Это действительно вопрос перестановки данных, чтобы все ваши переменные оптимизации были в одном массиве.

Например, рассмотрим следующую супер простую целевую функцию

function obj_val = my_obj(q, g, h, sigma)
    obj_val = sigma*(q.'*q) + (h.'*h)*(g.'*g);
end

, где мыхочу найти оптимальные q и g для некоторой константы h и sigma.Тогда я мог бы сделать следующее

% constants
h = randn(6,1);
sigma = abs(randn());

% initial guess
q0 = randn(5,1);
g0 = randn(10,1);

% get dimensions of the variables
nq = numel(q0);
sq = size(q0);
ng = numel(g0);
sg = size(g0);

% Single variable containing both initial guesses
x0 = [q0(:); g0(:)];
% wrapper function which just takes x and distributes it to the arguments of my_obj
f = @(x) my_obj(reshape(x(1:nq), sq), reshape(x(nq+1:nq+ng), sg), h, sigma);

% solve for optimal x
x_opt = fminunc(f, x0);

% recover optimal q and g
q_opt = reshape(x_opt(1:nq), sq);
g_opt = reshape(x_opt(nq+1:nq+ng), sg);

fprintf('Resulting objective: %g\n', my_obj(q_opt, g_opt, h, sigma));

Примечание: Очевидно, что оптимальная точка равна ( q, g ) = ( 0 , 0 ) в этом примере.

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