我只想尝试使用scipy.optimize.brute进行最简单的函数最小化,可以想象:在网格lambda x.x
中找到最小的标识函数[1,2,3,...100]
。在documentation of scipy.optimize.brute之后,我使用
scipy.optimize.brute(lambda x:x, (slice(1,100,1),))
预期的答案当然是1
,但是我的python控制台给了我-6.33825300e+28
。为什么它远离预期?
答案 0 :(得分:2)
指定finish=None
:
scipy.optimize.brute(lambda x:x, (slice(1,100,1),), finish=None)
默认行为是通过fmin
传递输出以改进它。 ranges
未传递给fmin
;他们似乎被认为是暗示,而不是边界。指定finish=None
会使brute
直接为您提供强力解决方案。
如果您希望 fmin
改善搜索结果,请将界限运用到您的函数中:
scipy.optimize.brute(lambda x: (x if 1 <= x <= 100 else np.inf), (slice(1,100,1),))