2017-06-08 1 views
0

私はPythonのScipyパッケージで提供されているシンプレックスアルゴリズムのドキュメントを読んでいますが、このdocumentation pageの最後に表示されている例は最小化の問題を解決しています。私は最大化したいのですが。このパッケージを使って最大化できるなら、最大化を実行するためにパラメータを変更する方法は?scipyパッケージのシンプレックスパッケージpython

答えて

2

すべての最大化問題は-1でC-ベクトルを乗算することにより、最小化問題に変換することができます:あなたはdocumentationから2変数の問題を持っていますが、を最大化したいと言うc=[-1,4]

from scipy.optimize import linprog 
import numpy 
c = numpy.array([-1, 4]) # your original c for maximization 
c *= -1 # negate the objective coefficients 
A = [[-3, 1], [1, 2]] 
b = [6, 4] 
x0_bnds = (None, None) 
x1_bnds = (-3, None) 
res = linprog(c, A, b, bounds=(x0_bnds, x1_bnds)) 
print("Objective = {}".format(res.get('fun') * -1)) # don't forget to retransform your objective back! 

出力

>>> Objective = 11.4285714286 
+0

ありがとう、それは働いた。もう1つの疑問は、Pythonで同じ[例](https://docs.scipy.org/doc/scipy/reference/optimize.linprog-simplex.html)で上限と下限を定義する方法です。たとえば、次のような場合には、どのようにすればよいでしょうか? 最小化:f = -1 * x [0] + 4 * x [1] -10 <= -3 * x [0] + 1 * x [1] <= 6 – Anonymous

+0

2つの異なる右辺を持つ不等式である*遠隔行*を要求しています(通常、変数の境界には名前の上限が使用されます)。トリックは2つの不等式を使用することです。右不等式(<= 6)を直接入力することができます。右の意味で所望の第2の不等式を表すには、左の-10 <= ...の部分の係数と右辺に-1を掛けなければなりません。 – Gregor

関連する問題