我正在尝试用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术语以及可能的许多局部(或全局)最小值。我使用强力搜索来找到一个好的起点,女巫有很多帮助,但目前似乎最多的工作是通过强力搜索来完成的,因为优化通常只使用一个迭代步骤。所以我试图以某种方式改进那部分计算。
答案 0 :(得分:4)
许多本地最小值+粗暴搜索后几乎没有任何改善,这听起来很糟糕。很难说你在问题中提供的详细程度非常具体,所以这里有一些模糊的想法(基本上,如果我怀疑我的最小化器被卡住了我会做什么):
scipy
,因此请尝试basinhopping
此外,波浪,正弦和余弦 - 如果你能在傅立叶空间重新表述你的问题,可能会有所帮助。
答案 1 :(得分:2)
我发现起始点的渐变已经很平坦(10 ^ -5的值),所以我试图缩放我已经提供的渐变函数。这似乎非常有效,我可以强制算法做更多的步骤,我的结果现在好多了。 虽然它们并不完美,但是对这个问题的完整讨论超出了这个问题的范围,所以我可能会开始一个新问题,在那里我从下到上描述整个问题。