如何正确使用scipy.optimize.minimize.最小化对于返回整数的函数

2024-06-01 00:00:49 发布

您现在位置:Python中文网/ 问答频道 /正文

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?


Tags: lambda函数参数valuefunction整数scipycurrent
1条回答
网友
1楼 · 发布于 2024-06-01 00:00:49

一般来说,整数空间上的最小化是一个完全不同的领域称为整数规划(或离散优化)。整数约束的添加实际上会产生很多算法上的困难,使得连续方法不适合使用。查看scipy.optimize.anneal

相关问题 更多 >