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 = 0
且ub = 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)
,則min
和max
將作為所有決策變數的邊界。- 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](而非其逆矩陣)會被有效維護,並用於在演算法的每次迭代中求解線性系統。
參考文獻