我正在使用scipy.optimize.minimize
进行缩小。
在为我的目标函数x0
寻找合适的参数f(x0)
时,x0
突然发生变化,值变为NaN
,因此{{方法已停止。
这是奇怪的行为之前的minimize
和x0
系列:
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
)的值。
我真的不知道该怎么办。
答案 0 :(得分:0)
我不太确定原因是什么,因为我没有目标函数或调用scipy.optimize.minimize(),但我能看到的是:
第一个和第二个到最后一个x在两个组件中仅相差1 * 10 ^ -8。这似乎非常少。
如果您没有另行指定,minimize
将根据您是否指定约束来决定(查看文档字符串)。您很有可能最终得到基于渐变的BFGS或类似物。现在,如果您尝试基于前几个评估构建渐变,我可以看到这将导致如此小间距的疯狂结果。
问题是:你是否做过导致这些小起跑间隔的事情?您是否指定了要使用的算法?您是否指定了可能触发较小初始间隔的任何边界?一般来说,除非有充分的理由不去某个地方,否则不要设置界限。许多人只会在“我认为这里没有好的解决方案”的基础上设置界限 - 这是一个坏习惯,并且混淆了许多算法!
为了更好的分析,您应该发布更多信息。 根据您的问题,您可能会发现,给定输入变量的数量,最小二乘法或单纯形优化器可能更好,甚至可能是遗传算法。