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])
试图最小化一个接受浮点参数但返回整数的函数时,遇到了一个问题,即解算器立即终止。在上面的示例中可以看到这种效果—请注意,当返回的值四舍五入为整数时,求值会过早终止。在
我假设这是因为它没有检测到导数的变化,也就是说,它第一次改变一个参数,它所做的改变太小了,第一个结果和第二个结果之间的差值是0.00000000000,错误地表明已经找到了一个最小值。在
我有更好的运气优化退火,但尽管它的返回值是整数值,我还是在三维空间中绘制了函数的一些区域,而且它实际上非常平滑。因此,我希望当一个导数感知的最小值能更好地工作。在
我已经恢复到手动绘图来探索空间,但我想介绍几个更多的参数,所以如果我能让这个工作起来就太好了。在
我试图最小化的函数不能返回float。它计算交叉验证的成功命中数,我让优化器改变模型的参数。在
有什么想法吗?在
更新
发现一个类似的问题:How to force larger steps on scipy.optimize functions?
一般来说,整数空间上的最小化是一个完全不同的领域称为整数规划(或离散优化)。整数约束的添加实际上会产生很多算法上的困难,使得连续方法不适合使用。查看scipy.optimize.anneal
相关问题 更多 >
编程相关推荐