Scpiy:scipy.optimize.minimize

时间:2015-09-21 08:52:44

标签: python scipy

我正在使用scipy.optimize.minimize进行缩小。

在为我的目标函数x0寻找合适的参数f(x0)时,x0突然发生变化,值变为NaN,因此{{方法已停止。

这是奇怪的行为之前的minimizex0系列:

result

在围绕[ 0.1329492 0.13074885 -9.92951618 -1.15521653 5.74419133 4.11687514 0.19983624 -9.95148156 -1.18517543 5.69420641 3.91303028 0.19983624 -7.34387457 -5.30116147 4.90141309 5.06593156 0.18205401] 267.765197762 [ 0.1329492 0.13074885 -9.92951618 -1.15521653 5.74419133 4.11687514 0.19983624 -9.95148156 -1.18517543 5.69420641 3.91303028 0.19983624 -7.34387457 -5.30116149 4.9014131 5.06593156 0.18205401] 267.76519813 [ 0.1329492 0.13074885 -9.92951618 -1.15521653 5.74419133 4.11687514 0.19983624 -9.95148156 -1.18517543 5.69420641 3.91303028 0.19983624 -7.34387457 -5.30116149 4.90141309 5.06593157 0.18205401] 267.765196949 [ 0.1329492 0.13074885 -9.92951618 -1.15521653 5.74419133 4.11687514 0.19983624 -9.95148156 -1.18517543 5.69420641 3.91303028 0.19983624 -7.34387457 -5.30116149 4.90141309 5.06593156 0.18205402] 267.765198923 [ 5.93742471e-01 4.06257529e-01 -5.09322593e+00 1.73303924e+00 3.56252177e+00 2.98573010e+00 1.26090655e-09 -4.85059563e+00 1.22511256e+00 4.81903606e+00 2.51934646e+00 5.72130981e-10 -1.06593289e+01 2.76365721e+00 4.63158974e+00 6.86179361e+00 1.29879685e-09] nan 进行搜索后,[ 0.1329492 0.13074885 ...突然变为x0,然后返回[ 5.93742471e-01 4.06257529e-01 ...

奇怪的是,目标方法NaN可以返回上一个f(x0)x0)的值。

我真的不知道该怎么办。

1 个答案:

答案 0 :(得分:0)

我不太确定原因是什么,因为我没有目标函数或调用scipy.optimize.minimize(),但我能看到的是:

第一个和第二个到最后一个x在两个组件中仅相差1 * 10 ^ -8。这似乎非常少。

如果您没有另行指定,minimize将根据您是否指定约束来决定(查看文档字符串)。您很有可能最终得到基于渐变的BFGS或类似物。现在,如果您尝试基于前几个评估构建渐变,我可以看到这将导致如此小间距的疯狂结果。

问题是:你是否做过导致这些小起跑间隔的事情?您是否指定了要使用的算法?您是否指定了可能触发较小初始间隔的任何边界?一般来说,除非有充分的理由不去某个地方,否则不要设置界限。许多人只会在“我认为这里没有好的解决方案”的基础上设置界限 - 这是一个坏习惯,并且混淆了许多算法!

为了更好的分析,您应该发布更多信息。 根据您的问题,您可能会发现,给定输入变量的数量,最小二乘法或单纯形优化器可能更好,甚至可能是遗传算法。