我使用scipy.optimize.minimize
來優化一個實際問題,其答案只能是整數。我當前的代碼如下所示:將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]))
這產生了:
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]
但我想它一個整數優化(四捨五入所有x
到最接近的整數並不總是給出最低)。
有沒有辦法只用整數值來使用scipy.optimize.minimize
?
(我想我可以創建的x
所有可能的排列的數組,並評估每個組合F(X),但是這似乎並不像一個非常優雅和快速的解決方案。)
這是不可能的。在numpy/scipy中沒有**(混合)整數編程**的求解器。您可能想要使用[紙漿](https://github.com/coin-or/pulp)或一些替代品(pyomo,cvxpy,...)。或者如果你瘋了:寫你自己的分支和綁定程序。 – sascha