帮助——我为优化得到错误的答案!
多长时间我听到这个! ? !原来有一堆理由你可能不会得到答案你期望在执行一个优化的任务。这些可能包括答案不是唯一的,不是全球使用的优化方法,因此返回一个局部最优解,问题,如上所述,不是你真正想要解决的问题。让我告诉你更多关于最近的情况。
内容
我们听到
我们听到从用户fmincon,从优化工具箱,得到错误的答案的问题myOptFun。事实上,在初始点优化卡住。
这个函数
让我们快速查看功能。用户告诉我们,这是一个简单的抛物面的革命。我将计算z值在网格和显示表面。
[xx, yy] = meshgrid (2: .1:2);zz = xx。^ 2 + yy。^ 2;surfc (yy, xx zz)阴影插值函数colorbar视图(-37.5,50)
运行示例
首先,我做一些家务。
选择= optimset (“显示”,“最后一次”);警告从optim: fmincon: SwitchingToMediumScale
接下来,我将运行这个示例使用用户的目标函数。
磅= (5;5);乌兰巴托= (5;5);x0 = (1, 1);[x fval exitflag输出羔羊毕业生赫斯]=…fmincon (@myOptFun x0,[][],[],[],磅,乌兰巴托,[],选择);
优化终止:一阶最优测量不到选项。TolFun和最大约束违反小于options.TolCon。没有活跃的不平等。
根据用户,最佳答案是0,可以发现(0,0)。相反,我们发现。
x
x = 1 1
fval
fval = 2
为什么优化没有找到零?
混乱的根源myOptFun。现在让我给你的代码。
类型myOptFun
函数f = myOptFun (X)公式= ' X。* X + y。* y ';公式= strrep(公式、“x”num2str (x (1)));公式= strrep(公式、“y”num2str (X (2)));f = eval(公式);
它的使用num2str具体来说。文档中说的一样,默认格式num2str是% 11.4克的这意味着我计算结果4有效数字。调用num2str (1),结果是1和也是如此为num2str e-5 (1 + 1)。换句话说的准确性不能将客户的目标函数比1的军医。然而,默认的公差TolFun和TolX是1 e-6。更重要的是DiffMinChange(“最小有限差分的变量变化衍生品”)是1 e-8。当第一个有限差分计算完成,客户的目标函数的近似的一阶导数为零fmincon停止。
如何修复优化
我有几个选项来获得一个“更好”的结果。我可以
- 增加目标函数的准确性
- 调整相关的公差是容纳更大的分辨率目标函数
- 提供准确的一阶导数(TolFun和TolX仍需小于1的军医)。
改变目标函数
让我们尝试相同的优化目标函数修改。
[xFixed fvalFixed exitflag输出羔羊毕业生赫斯]=…fmincon (@myOptFunFixed x0,[][],[],[],磅,乌兰巴托,[],选择);
优化终止:一阶最优测量不到选项。TolFun和最大约束违反小于options.TolCon。没有活跃的不平等。
xFixed
xFixed = 1.0 e - 015 * 0.4441 - -0.2220
fvalFixed
fvalFixed = 2.4652 e - 031
你碰过类似的问题吗?
如果你有碰过类似的问题,这将是伟大的如果你能分享它在这里。
评论
留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。