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 = 0
且ub = 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)
,則min
和max
將用作所有決策變數的邊界。- 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.