【问题标题】:Matlab - Properly setting up fmincon when objective and nonlinear constriants need parametersMatlab - 当客观和非线性约束需要参数时正确设置 fmincon
【发布时间】:2012-05-02 22:08:48
【问题描述】:

我正在尝试遵循此处给出的建议

http://www.mathworks.com/help/toolbox/optim/ug/brhkghv-7.html

但我遇到了麻烦。我有一个复杂的目标来最小化复杂的非线性约束,所有这些都是我的 3 个选择变量和各种参数的函数。我的启动一切的脚本如下所示:

% 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_constraints 为第一个参数返回一个非线性不等式约束向量,第二个参数返回一个非线性等式约束向量。

这样做的原因是我可以为 fmincon 使用@objective 和@nonlin 语法; objective 和 nonlin 只是 x 的函数,而不是参数的函数,因为它们是已经传递参数的函数的子函数。我相信这是我应该使用的形式,以便将梯度和非线性约束传递给 fmincon。我的问题是,当我运行此代码时,出现以下错误

警告:Trust-region-reflective 算法不能解决此类问题, 使用主动集算法。您也可以尝试内点或 sqp 算法:将算法选项设置为“内部点”或“sqp”并重新运行。为了 更多帮助,请参阅文档中的选择算法。

IE,由于某种原因,fmincon 正在离开 Trust-region-reflective 算法并进入活动集,它没有使用我的分析梯度。根据http://www.mathworks.com/help/toolbox/optim/ug/brhkghv-3.html,fmincon 使用分析梯度的要求是,

编写返回的代码: 目标函数(标量)作为第一个输出

梯度(向量)作为第二个输出

使用 optimset 将 GradObj 选项设置为“on”。

objective根据需要返回objective的标量值和梯度,Gradobj是开启的,所以我看不出我的问题。

【问题讨论】:

  • fmincon 通常想要一个可以开头的答案:(out = fmincon(@objective,X0,[],[],[],[0 0 0],[1 1 1],@ nonlin,options) X0 不能为空...(至少在我使用优化工具箱的短暂经验中不是这样)
  • 你当然是对的——如果我按照上面写的那样运行代码,它甚至都不会运行,更不用说不使用我想要的算法了。在我的实际代码中提供了初始猜测,我将更新问题以反映这一点。

标签: function matlab nested mathematical-optimization


【解决方案1】:

我从 Matlab Usenet 小组获得了一些帮助,我发现信任域方法实际上并不支持非线性约束,所以这根本不是我的代码中的错误。他们建议重写以使用'interior-point'算法,它有自己的问题,但至少这个问题已经解决了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-08
    • 2016-03-31
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 2013-12-25
    相关资源
    最近更新 更多