0
我正在閱讀python的Scipy包中提供的Simplex Algorithm的文檔,但最後在documentation page中顯示的示例解決了最小化問題。而我想做最大化。如果我們可以使用這個包進行最大化,如何改變參數以執行最大化?scipy包中的單純形算法python
我正在閱讀python的Scipy包中提供的Simplex Algorithm的文檔,但最後在documentation page中顯示的示例解決了最小化問題。而我想做最大化。如果我們可以使用這個包進行最大化,如何改變參數以執行最大化?scipy包中的單純形算法python
每最大化問題可以通過-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
謝謝,它的工作。還有一個問題是如何在python中的相同[示例](https://docs.scipy.org/doc/scipy/reference/optimize.linprog-simplex.html)中定義上限和下限。例如,對於以下情況,您如何在python中執行此操作: 最小化:f = -1 * x [0] + 4 * x [1] 除-10:= -3 * x [0] + 1 * x [1] <= 6 – Anonymous
您要求* ranged rows *,即具有2個不同右手邊的不等式(命名上限通常用於變量邊界)。訣竅是使用2個不等式。您可以直接輸入正確的不平等(<= 6)。係數和右邊-10 <= ...部分的右邊必須用-1來表示所需的第二個不等式。 – Gregor