【问题标题】:How to use MATLAB fminunc for multiple arguments of optimization?如何使用 MATLAB fminunc 进行多个优化参数?
【发布时间】:2018-11-07 11:02:34
【问题描述】:

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

但我无法解决这个问题

【问题讨论】:

  • 欢迎来到 Stack Overflow!分享您的研究对每个人都有帮助。告诉我们您尝试了什么以及为什么它不能满足您的需求。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案!另见:How to Ask

标签: matlab


【解决方案1】:

这实际上只是重新排列数据的问题,以便所有优化变量都在一个数组中。

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

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

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    相关资源
    最近更新 更多