Scipy优化:设置最大错误

时间:2013-09-17 15:52:14

标签: python scipy mathematical-optimization

我正在尝试用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术语以及可能的许多局部(或全局)最小值。我使用强力搜索来找到一个好的起点,女巫有很多帮助,但目前似乎最多的工作是通过强力搜索来完成的,因为优化通常只使用一个迭代步骤。所以我试图以某种方式改进那部分计算。

2 个答案:

答案 0 :(得分:4)

许多本地最小值+粗暴搜索后几乎没有任何改善,这听起来很糟糕。很难说你在问题中提供的详细程度非常具体,所以这里有一些模糊的想法(基本上,如果我怀疑我的最小化器被卡住了我会做什么):

  • 尝试从一堆不同的初始猜测中手动启动最小化器。
  • 尝试使用随机最小化器。您正在标记问题scipy,因此请尝试basinhopping
  • 如果最坏的情况发生,只需在循环中抛出随机点,让它在午休时间(或隔夜)工作

此外,波浪,正弦和余弦 - 如果你能在傅立叶空间重新表述你的问题,可能会有所帮助。

答案 1 :(得分:2)

我发现起始点的渐变已经很平坦(10 ^ -5的值),所以我试图缩放我已经提供的渐变函数。这似乎非常有效,我可以强制算法做更多的步骤,我的结果现在好多了。 虽然它们并不完美,但是对这个问题的完整讨论超出了这个问题的范围,所以我可能会开始一个新问题,在那里我从下到上描述整个问题。