如何正确使用scipy.optimize.miminime作为返回整数的函数



TL;DR:如何最小化一个返回整数值(而不是浮点值)的相当平滑的函数

>>> import scipy.optimize as opt
>>> opt.fmin(lambda (x,y): (0.1*x**2+0.1*(y**2)), (-10, 9))
Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 49
         Function evaluations: 92
array([ -3.23188819e-05,  -1.45087583e-06])
>>> opt.fmin(lambda (x,y): int(0.1*x**2+0.1*(y**2)), (-10, 9))
Optimization terminated successfully.
         Current function value: 17.000000
         Iterations: 17
         Function evaluations: 60
array([-9.5 ,  9.45])

试图最小化一个接受浮点参数但返回整数的函数,我遇到了一个问题,即求解器立即终止。这种效果在上面的例子中得到了证明——请注意,当返回的值四舍五入为int时,计算会提前终止。

我认为发生这种情况是因为它没有检测到导数的变化,即第一次改变参数时,它所做的改变太小,第一个结果和第二个结果之间的差是0.00000000000,错误地表明已经找到了最小值。

我在optimize.anneal方面运气更好,但尽管它有整数值的返回,我还是在三维中绘制了函数的一些区域,实际上它非常平滑。因此,我希望当一个导数意识最小化会更好地工作。

我已经恢复了手动绘图来探索空间,但我想引入更多的参数,所以如果我能做到这一点,那就太好了。

我试图最小化的函数不能返回浮点值。它计算交叉验证成功命中的次数,我让优化器更改模型上的参数。

有什么想法吗?

更新

发现了一个类似的问题:如何在scipy.optimize函数上强制执行更大的步骤?

通常,整数空间上的最小化是一个完全不同的领域,称为整数规划(或离散优化)。整数约束的添加实际上造成了相当多的算法困难,使连续方法变得不合适。查看scipy.optimize.anneal

相关内容

  • 没有找到相关文章

最新更新