linprog(method='simplex')#

scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None, bounds=(0, None), method='highs', callback=None, options=None, x0=None, integrality=None)

線性規劃:使用基於表法的單純形法,最小化受限於線性等式和不等式約束的線性目標函數。

版本 1.9.0 開始棄用:method='simplex' 將在 SciPy 1.11.0 中移除。它已被 method='highs' 取代,因為後者更快且更穩健。

線性規劃解決以下形式的問題

\[\begin{split}\min_x \ & c^T x \\ \mbox{such that} \ & A_{ub} x \leq b_{ub},\\ & A_{eq} x = b_{eq},\\ & l \leq x \leq u ,\end{split}\]

其中 \(x\) 是決策變數的向量;\(c\)\(b_{ub}\)\(b_{eq}\)\(l\)\(u\) 是向量;而 \(A_{ub}\)\(A_{eq}\) 是矩陣。

或者,也就是

最小化

c @ x

使得

A_ub @ x <= b_ub
A_eq @ x == b_eq
lb <= x <= ub

請注意,預設情況下,除非使用 bounds 指定,否則 lb = 0ub = None

參數:
c1-D 陣列

要最小化的線性目標函數的係數。

A_ub2-D 陣列,可選

不等式約束矩陣。A_ub 的每一列指定 x 上線性不等式約束的係數。

b_ub1-D 陣列,可選

不等式約束向量。每個元素代表 A_ub @ x 相應值的上限。

A_eq2-D 陣列,可選

等式約束矩陣。A_eq 的每一列指定 x 上線性等式約束的係數。

b_eq1-D 陣列,可選

等式約束向量。A_eq @ x 的每個元素必須等於 b_eq 的相應元素。

bounds序列,可選

每個 x 元素的 (min, max) 數值對序列,定義該決策變數的最小值和最大值。使用 None 表示沒有邊界。預設情況下,邊界為 (0, None)(所有決策變數均為非負數)。如果提供單個元組 (min, max),則 minmax 將用作所有決策變數的邊界。

method字串

這是 'simplex' 的方法特定文件。'highs''highs-ds''highs-ipm''interior-point' (預設) 和 'revised simplex' 也可用。

callback可呼叫物件,可選

每次迭代執行一次的回呼函數。

返回:
resOptimizeResult

一個 scipy.optimize.OptimizeResult,包含以下欄位

x1-D 陣列

最小化目標函數同時滿足約束的決策變數值。

fun浮點數

目標函數 c @ x 的最佳值。

slack1-D 陣列

鬆弛變數的(名義上為正值)值,b_ub - A_ub @ x

con1-D 陣列

等式約束的(名義上為零)殘差,b_eq - A_eq @ x

success布林值

當演算法成功找到最佳解時為 True

status整數

表示演算法退出狀態的整數。

0 : 最佳化成功終止。

1 : 達到迭代限制。

2 : 問題似乎不可行。

3 : 問題似乎無界。

4 : 遇到數值困難。

message字串

演算法退出狀態的字串描述。

nit整數

所有階段中執行的總迭代次數。

另請參閱

有關其餘參數的文件,請參閱 scipy.optimize.linprog

選項:
——-
maxiter整數 (預設值:5000)

在任一階段中執行的最大迭代次數。

disp布林值 (預設值:False)

如果希望在每次迭代時將最佳化狀態的指示器列印到主控台,請設定為 True

presolve布林值 (預設值:True)

Presolve 嘗試在將問題發送到主求解器之前,識別微不足道的可行性問題、識別微不足道的無界性並簡化問題。通常建議保持預設設定 True;如果希望停用 presolve,請設定為 False

tol浮點數 (預設值:1e-12)

容差,用於判斷第 1 階段中的解是否「夠接近」於零,以被視為基本可行解,或是否夠接近於正值,以用作最佳解。

autoscale布林值 (預設值:False)

設定為 True 以自動執行均衡化。如果約束中的數值相差數個數量級,請考慮使用此選項。

rr布林值 (預設值:True)

設定為 False 以停用自動冗餘移除。

bland布林值

如果為 True,請使用 Bland 的反循環規則 [3] 選擇樞軸以防止循環。如果為 False,請選擇應更快地導向收斂解的樞軸。後一種方法在極少數情況下容易發生循環(非收斂)。

unknown_options字典

此特定求解器未使用的可選參數。如果 unknown_options 為非空,則會發出警告,列出所有未使用的選項。

參考文獻

[1]

Dantzig, George B., Linear programming and extensions. Rand Corporation Research Study Princeton Univ. Press, Princeton, NJ, 1963

[2]

Hillier, S.H. and Lieberman, G.J. (1995), “Introduction to Mathematical Programming”, McGraw-Hill, Chapter 4.

[3]

Bland, Robert G. New finite pivoting rules for the simplex method. Mathematics of Operations Research (2), 1977: pp. 103-107.