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有更好的运气,但是尽管它的整数值返回我已经在三维中绘制了函数的一些区域,它实际上非常平滑。因此,我希望当衍生感知最小化器能够更好地工作时。
我已经恢复了手动绘图以探索空间,但我想介绍一些更多的参数,这样如果我能让它工作就会很棒。
我试图最小化的函数不能返回浮点数。它计算了交叉验证中成功命中的数量,并且我正在让优化器更改模型上的参数。
有什么想法吗?
更新
发现了一个类似的问题:How to force larger steps on scipy.optimize functions?
答案 0 :(得分:0)
通常,整数空间的最小化是一个完全不同的字段,称为整数编程(或离散优化)。添加整数约束实际上会产生相当多的算法难度,导致连续方法不适合。查看scipy.optimize.anneal