【发布时间】:2013-09-19 01:40:16
【问题描述】:
我正在尝试使用 scipy 优化 4 维函数。到目前为止一切正常,除了我对解决方案的质量不满意。现在我有地面实况数据,我用它来验证我的代码。到目前为止我得到的是:
End error: 1.52606896507e-05
End Gradient: [ -1.17291295e-05 2.60362493e-05 5.15347856e-06 -2.72388430e-05]
Ground Truth: [0.07999999..., 0.0178329..., 0.9372903878..., 1.7756283966...]
Reconstructed: [ 0.08375729 0.01226504 1.13730592 0.21389899]
错误本身听起来不错,但由于值完全错误,我想强制优化算法 (BFGS) 执行更多步骤。
在文档中,我找到了“gtol”和“norm”选项,并尝试将两者都设置为非常小的值(例如 0.0000001),但似乎没有任何改变。
背景: 问题是,我试图解调波,所以我有 sin 和 cos 项,并且可能有许多局部(或全局)最小值。我使用蛮力搜索来找到一个好的起点,女巫帮了很多忙,但目前似乎大部分工作都是由蛮力搜索完成的,因为优化通常只使用一个迭代步骤。所以我试图以某种方式改进这部分计算。
【问题讨论】:
-
我对波浪了解不多,但在我看来,您的公差与局部极值之间的距离之间应该存在关系。如果您的容差远小于这样的距离,那么您将陷入最近的局部极值。想到的另一个问题:你的目标函数有鞍点吗?您可以在 Hessian 的蛮力步骤中做些什么来避免这些?
-
我的猜测是分析梯度有助于优化。如果您使用“Ground Truth”作为起始值,优化是否真的停留在那里并为目标函数提供更好的值?
标签: python scipy mathematical-optimization