linprog(method='revised 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='revised 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

參數:
c一維陣列

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

A_ub二維陣列,選用

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

b_ub一維陣列,選用

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

A_eq二維陣列,選用

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

b_eq一維陣列,選用

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

bounds序列,選用

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

method字串

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

callback可呼叫物件,選用

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

x0一維陣列,選用

決策變數的猜測值,將由最佳化演算法精煉。此參數目前僅由 'revised simplex' 方法使用,且僅當 x0 代表基本可行解時才可使用。

回傳值:
resOptimizeResult

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

x一維陣列

在滿足約束條件的同時,使目標函數最小化的決策變數值。

fun浮點數

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

slack一維陣列

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

con一維陣列

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

success布林值

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

status整數

一個代表演算法退出狀態的整數。

0 : 最佳化成功終止。

1 : 達到迭代限制。

2 : 問題似乎不可行。

3 : 問題似乎無界。

4 : 遇到數值困難。

5 : 問題沒有約束;開啟預先求解。

6 : 提供的猜測值無效。

message字串

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

nit整數

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

另請參閱

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

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

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

disp布林值 (預設值:False)

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

presolve布林值 (預設值:True)

預先求解嘗試識別顯而易見的不可行性、識別顯而易見的無界性,並在將問題發送給主求解器之前簡化問題。通常建議保持預設設定 True;如果要停用預先求解,則設定為 False

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

容差,用於確定在階段 1 中,何時解「夠接近」零以被視為基本可行解,或夠接近正值以作為最佳解。

autoscale布林值 (預設值:False)

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

rr布林值 (預設值:True)

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

maxupdate整數 (預設值:10)

對 LU 分解執行的最大更新次數。達到此更新次數後,將從頭開始分解基底矩陣。

mast布林值 (預設值:False)

最小化攤銷求解時間。如果啟用,則會測量使用基底分解求解線性系統的平均時間。通常,在初始分解之後,每次連續求解的平均求解時間都會減少,因為分解比求解操作(和更新)花費更多時間。然而,最終,更新後的分解變得非常複雜,以至於平均求解時間開始增加。當檢測到這一點時,基底將從頭開始重新分解。啟用此選項可在冒著非確定性行為的風險下最大化速度。如果 maxupdate 為 0,則忽略此選項。

pivot“mrc” 或 “bland”(預設值:“mrc”)

樞軸規則:最小縮減成本 (“mrc”) 或 Bland 規則 (“bland”)。如果達到迭代限制且懷疑發生循環,請選擇 Bland 規則。

unknown_options字典

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

註解

revised simplex 方法使用 [9] 中描述的修正單純形法,但基底矩陣的分解 [11](而非其逆矩陣)會被有效維護,並用於在演算法的每次迭代中求解線性系統。

參考文獻

[9]

Bertsimas, Dimitris 和 J. Tsitsiklis。“Introduction to linear programming.” Athena Scientific 1 (1997): 997.

[11]

Bartels, Richard H. “A stabilization of the simplex method.” Journal in Numerische Mathematik 16.5 (1971): 414-434.