如何计算一阶最优性衡量手动

3视图(30天)
你好,我有一个有趣的,可能是如此简单,问题。我用fmincon来解决非线性问题。我要计算一阶最优性手动测量(FOOM),。
  • 当问题已经解决了,最后FOOM fmincon和FOOM发现我发现手动有时是不同的。不一定,但有时,这取决于不同的初始条件或问题解决或停止的情况。可能我完全误解了我如何计算FOOM手动,我会感激的建议。
  • 其次,有时,“FOOM的比率(fmincon发现)/ FOOM(手动)“给相对FOOM给出的输出fmincon当问题解决了。我也想知道相对FOOM计算,我见过的地方的比“FOOM(最后一次迭代)/ FOOM(在初始点)”,但我不确定。
这些是我的两个问题。我的问题太复杂,出现在这里,但我可以给另一个简单的例子(从帮助部分)的问题。
函数[c,测查特区dceq] = unitdisk (x)
c = x (1) ^ 2 + (2) ^ 2 - 1;
测查= [];
如果nargout > 1
dc = [2 * x (1);2 * x (2)];
dceq = [];
结束;
函数(f, g) = rosenbrockwithgrad (x)
% f计算目标
f = 100 * (x (2) - (1) ^ 2) ^ 2 + (1 - x (1)) ^ 2;
如果nargout > 1%梯度要求
g = (-400 * (x (2) - x (1) ^ 2) * x (1) 2 * (1 - x (1));
200 * (x (2) - x (1) ^ 2)];
结束
清晰;clc;
有趣= @rosenbrockwithgrad;
x0 = [0, 1.9];一个= [];b = [];Aeq = [];说真的= [];
磅= (2,2);乌兰巴托= (2,2);
nonlcon = @unitdisk;
myoptions = optimoptions (“fmincon”,“显示”,“iter-detailed”,“GradObj”,“上”,“GradConstr”,“上”);
[x, fval exitflag、输出λ,毕业生]= fmincon (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,nonlcon, myoptions);
(帕特,gx ~ ~) = unitdisk (x);
[myfit, dmyf] = rosenbrockwithgrad (x);
foptm = @ (dgxf dmyff)规范(总和(repmat (lambda.ineqnonlin’, (2, 1))。* dgxf, 2) + dmyff正);
FOOM_man = foptm(帕特,dmyf)
这里是结果:
一阶范数
IterF-countf (x)可行性最优一步
31日39 4.567489 e-02 0.000 e + 00 8.000 e-09 e-08 5.305
优化完成:相对一阶最优性措施,8.000000 e-08,小于选项。OptimalityTolerance = 1.000000 e-06,相对最大约束违反,0.000000 e + 00,小于选项。ConstraintTolerance = 1.000000 e-06。
优化指标的选择相对一阶最优性= 8.00 e-08 OptimalityTolerance = 1 e-06(默认)相对马克斯(约束违反)= 0.00 e + 00 ConstraintTolerance = 1 e-06(默认)
FOOM_man = 3.8481 e-08
在这里fmincon输出FOOM 8 e-8 e-8而FOOM_man是3.8481。我曾经认为可能精度可能是原因,但对于不同的问题,太多的不同。
我感激任何评论和建议。
BR,奥马尔

答案(0)

类别

找到更多的在和迭代解算器输出显示帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!