我正在使用scipy.optimize.minimize优化现实世界的问题,答案只能是整数.我当前的代码如下所示:
from scipy.optimize import minimize
def f(x):
return (481.79/(5+x[0]))+(412.04/(4+x[1]))+(365.54/(3+x[2]))+(375.88/(3+x[3]))+(379.75/(3+x[4]))+(632.92/(5+x[5]))+(127.89/(1+x[6]))+(835.71/(6+x[7]))+(200.21/(1+x[8]))
def con(x):
return sum(x)-7
cons = {'type':'eq', 'fun': con}
print scipy.optimize.minimize(f, [1,1,1,1,1,1,1,0,0], constraints=cons, bounds=([0,7],[0,7],[0,7],[0,7],[0,7],[0,7],[0,7],[0,7],[0,7]))
Run Code Online (Sandbox Code Playgroud)
这会产生:
x: array([ 2.91950510e-16, 2.44504019e-01, 9.97850733e-01,
1.05398840e+00, 1.07481251e+00, 2.60570253e-01,
1.36470363e+00, 4.48527831e-02, 1.95871767e+00]
Run Code Online (Sandbox Code Playgroud)
但我希望它用整数值进行优化(将所有四舍五入x到最接近的整数并不总是给出最小值).
有没有办法scipy.optimize.minimize只使用整数值?
(我想我可以创建一个包含所有可能排列的数组,x并为每个组合评估f(x),但这似乎不是一个非常优雅或快速的解决方案.)