我正在使用全局最大化工具箱来最大化以下功能:
function x = NameOfFunction (w1, w2, w3, a, b, c, Structure1, Structure2, Structure3)
我通过更改、和x
的值来最小化。其余参数是常量和包含数据的结构。的值以及三个变量取决于通过结构输入函数的数据。w1
w2
w3
x
w
该函数返回x
的是在运行过程中计算的 180 个值的平均值NameOfFunction
。
我想知道如何对 180 个值的标准偏差添加约束。我对最小化平均值和标准偏差不感兴趣,而是最小化x
(平均值),同时允许标准偏差不大于某个特定值。我知道如何为决策变量(即w1
、w2
、w3
)添加约束,但不知道如何为标准偏差等值添加约束。
编辑:更多细节,根据维尔纳的建议:
%the functions is f(w) rather than f(x)
%constraints:
Aeq = [1 1 1];
beq = 1;
lb = .10 * [1 1 1];
ub = .8 * [1 1 1];
w = [weight1, weight2, weight3];
wstart = randn(3,1);
options = optimset('Algorithm','interior-point');
% function handle for the objective function (note that variables
% aa through hh are additional parameters that the solver does not modify):
h = @(w)NameOfFunction(w(1),w(2),w(3), aa, bb, cc, dd, ee, ff, gg, hh);
% problem structure:
problem = createOptimProblem('fmincon','x0',wstart,'objective',h,...'
'Aeq',Aeq,'beq',beq,'options',options,'lb',lb,'ub',ub);
gs = GlobalSearch;
run(gs,problem)
我正在运行GlobalSearch
using fmincon
。
2013 年 7 月 16 日,实施后,nonlcon
我能够实现我试图做的事情。(我有一个后续问题,我把它放在这篇文章的底部)。这是我所做的:
如前所述,我添加了另一个函数 ( StdConstraintFunction
)。所以现在我有以下内容:
stdMax = 0.01;
h = @(w)NameOfFunction(w(1),w(2),w(3),aa, bb, cc, dd, ee, ff, gg);
StdConstraint = @(w)StdConstraintFunction(w(1),w(2),w(3),aa, bb, cc, dd, ee, ff, gg,stdMax);
哪里是计算标准偏差而不是平均值 StdConstraintFunction
的修改版本。NameOfFunction
这两个函数的最后一行是函数体中唯一不同的地方。
在NameOfFunction
中,最后一行是:
ReturnVariable = -1 * (nanmedian([vect1]));
%note: I added the -1 multiplication to search for the maximum rather than minimum
最后一行StdConstraintFunction
是:
ReturnVariable = (std([vect1]) - stdMax);
ceq = [];
%ceq is a required variable that is supposed to return the equality non-linear
%constraint; here it is blank because I don't have one. The optimization
%would produce an error if I exclude it
我的问题设置是:
problem = createOptimProblem('fmincon','x0',xstart,'objective',h,'Aeq',Aeq,'beq',beq,'options',options,'lb',lb,'ub',ub,'nonlcon',StdConstraint);
@Werner:如果您想将此作为问题的答案发布,我很乐意接受它作为官方答案。非常感谢你们的帮助!