fminunc得到一阶最优迭代0 0,不找到最佳

11视图(30天)
大家好!
我试图优化的参数使用fminunc有限元模型。然而,在迭代优化算法完成0,0的一阶最优性测量,因此没有找到最优值参数:
我运行有限元模型和一些参数的值,我想优化:
看起来对我来说,有一个明确的全球最低,但是由于某种原因fminunc现在没有找到。有谁知道如何解决这个问题?
谢谢你提前,柯恩

答案(3)

约翰D 'Errico
约翰D 'Errico 2020年8月11日
编辑:约翰D 'Errico 2020年8月11日
首先,这似乎是一个参数的优化。不要使用fminunc。相反,我们fminbnd。它将更健壮。甚至可能更有效率。
第二几乎总是当有人说你所拥有的,这意味着函数编码错误。在执行一个optiimization之前,测试是否对不同的输入目标函数的变化。响应你的响应你会看到如果一个函数是常数。
例如,看看会发生什么在这里:
> > testfun = @ (x) 1;
> > testfun (1)
ans =
1
> > testfun(π)
ans =
1
什么我送进testfun,我得到1。
现在,当我尝试fminunc这里发生了什么?
> > fminunc (testfunπ)
最初的点是一个局部最小值。
优化因为完成初始点的梯度的大小
不到最优公差的值。
<停止标准详细信息>
ans =
3.1416
我得到了完全相同的结果。
首先,确认如果你发送不同parametrs输入函数,得到不同的东西。
接下来,验证您的函数是可微的。fminunc需要这个。如果你做一些内部轮输入或输出,然后fminunc不能使用。再次,应该足够了:一个例子
> > testfun = @ (x)轮(x);
> > fminunc (testfun, 1.1)
最初的点是一个局部最小值。
优化因为完成初始点的梯度的大小
不到最优公差的值。
<停止标准详细信息>
ans =
1.1
所以对于任何x vicinty的整数,你得到相同的整数。没有变化。至于fminunc concerrned,这是一个常数的函数,它将立即终止。
testfun (5: .1:1.4)
ans =
1 1 1 1 1 1 1 1 1 1
为什么要尝试优化的东西不会改变?
的几率就好,如果你认为你的函数应该产生一些不恒定的响应,然后在代码中有一个bug。当然我们不能诊断代码,如果没有看到,我的MATLAB水晶球总是出毛病。:)
5个评论
柯恩边缘
柯恩边缘 2020年8月17日
谢谢你的小费艾伦,比例确实是这个问题。我现在有正确的优化工作。
为别人,可能在未来遇到类似的问题;我做的是什么
YM_scaled =日志(YM)
fminunc作为输入参数,目标函数内使用了“真实”的
YM = exp (YM_scaled)
为我的FE模型作为输入。最后,作为我的目标函数的输出,我
MSE_scaled =日志((1 /(2 *米))* ((displ_ref - displ)。^ 2))
所以现在fminunc使用日志值为输入和输出,事实上是我上面绘制优化函数对数坐标轴。以这种方式fminunc可以找到一个最优值。

登录置评。


布鲁诺陈德良
布鲁诺陈德良 2020年8月14日
编辑:布鲁诺陈德良 2020年8月14日
如果你的梯度是0,那么你的有限元返回相同的结果的两种不同的价值观,
这可以由很多事情,比如截断的MATLAB和有限元软件之间的接口,方程的一些thresholing你试图解决,网格生成器,等等……没有人可以告诉因为你没有透露给我们有限元部分的细节。
3评论
柯恩边缘
柯恩边缘 2020年8月14日
好的,这就解释了一点给我。然而仍有一件事我不完全理解:如果我理解FMINUNC / FMINCON连接器使用有限差分来计算每个模型的梯度评估。我试着我的YM参数中存在一些细微的差别,导致了不同的目标函数值计算。事实上这是有限差分法对近似梯度对吧?因此我仍然不明白为什么FMINUNC解算器发现梯度为零。
你说我选择错了这个问题的优化方法;你也许有一个建议给一个更好的选择吗?

登录置评。


布鲁诺陈德良
布鲁诺陈德良 2020年8月14日
一步你又可能不是一步FMINUNC选择。它有一大堆FMINUNC背后的决策树。我不知道为什么两个不同的有限元返回相同的值YM,但很明显。你可以跟踪使用的步骤FMINUNC添加一些工具代码在您的目标函数。
我又不知道你的有限元法是如何工作的,我不建议你的方法。函数看起来也有一个非常狭窄的山谷,在那里每一方ithat看起来像一个凹形。这也不是梯度法。
但同样问题,有限元法有一些阈值计算YM,它使你的目标函数模型因此你不能使用任何梯度法。
我开始重复我自己很多。

标签

s manbetx 845


释放

R2019a

社区寻宝

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

开始狩猎!