如何使用MATLAB fminunc进行多个优化参数?

时间:2018-05-28 20:59:23

标签: matlab

Optimization

问题请参考附图。在该图中,变量q,g和h是向量,其中sigma是标量。我使用MATLAB fminunc来处理优化问题的单个参数,无论它是标量还是向量。

但我无法使用此问题

1 个答案:

答案 0 :(得分:0)

这只是重新排列数据的问题,因此所有优化变量都在一个数组中。

例如,考虑以下超级简单的目标函数

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

我们希望为常量qg找到最佳hsigma。然后我可以做以下

% 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 )这个例子。