私は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内に** **(Mixed-)Integer-Programming **ソルバーはありません。 [pulp](https://github.com/coin-or/pulp)またはいくつかの選択肢(pyomo、cvxpy、...)を使用することができます。あるいは、あなたが夢中ならば:独自のブランチ・アンド・バウンド・プロシージャを作成してください。 – sascha