linprog(method=‘修正单纯形’)¶
- scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None, bounds=None, method='revised_simplex', callback=None, options={'maxiter': 5000, 'disp': False, 'presolve': True, 'tol': 1e-12, 'autoscale': False, 'rr': True, 'maxupdate': 10, 'mast': False, 'pivot': 'mrc'}, x0=None)
线性规划:使用修正的单纯形法最小化受线性等式和不等式约束的线性目标函数。
线性规划解决以下形式的问题:
\[\begin{split}\min_x\&c^T x\\ \mbox{这样}\&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
请注意,默认情况下
lb = 0
和ub = None
除非使用指定bounds
。- 参数
- 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应力
这是“修改后的单工”的特定于方法的文档。 'highs' , 'highs-ds' , 'highs-ipm' , 'interior-point' (默认)和 'simplex' (传统)也可用。
- callback可调用,可选
每次迭代要执行一次的回调函数。
- x0一维阵列,可选
决策变量的猜测值,用优化算法进行精化。此参数当前仅由“修订后的单纯型”方法使用,并且只有在以下情况下才能使用 x0 表示基本可行解决方案。
- 退货
- resOptimizeResult
A
scipy.optimize.OptimizeResult
由以下字段组成:- X一维阵列
在满足约束的同时使目标函数最小化的决策变量的值。
- 有趣的浮动
目标函数的最优值
c @ x
。- 松弛一维阵列
松弛变量的(标称为正)值,
b_ub - A_ub @ x
。- 圆锥体一维阵列
等式约束的(标称为零)残差,
b_eq - A_eq @ x
。- 成功布尔尔
True
当算法成功找到最优解时。- 状态集成
表示算法退出状态的整数。
0
:优化已成功终止。1
:已达到迭代限制。2
问题似乎是不可行的。3
:问题似乎是无界的。4
:遇到了数字上的困难。5
:问题没有约束;启用预解算。6
:提供的猜测无效。- 消息应力
算法退出状态的字符串描述符。
- NIT集成
在所有阶段中执行的迭代总数。
参见
有关参数睡觉的文档,请参阅
scipy.optimize.linprog
- 选项
- maxiterINT(默认值:5000)
在任一阶段中要执行的最大迭代次数。
- disp布尔值(默认值:FALSE)
设置为
True
如果每次迭代都要将优化状态指示器打印到控制台。- presolve布尔值(默认值:TRUE)
在将问题发送到主解算器之前,PResolve试图识别琐碎的不可行之处、识别琐碎的无界性,并简化问题。通常建议保留默认设置
True
;设置为False
如果要禁用预解算。- tol浮点(默认值:1E-12)
公差,它决定了在阶段1中,解何时“足够接近”零以被认为是基本可行解,或者何时足够接近正值以充当最优解。
- autoscale布尔值(默认值:FALSE)
设置为
True
自动执行平衡。如果约束中的数值被几个数量级分隔,请考虑使用此选项。- rr布尔值(默认值:TRUE)
设置为
False
要禁用自动冗余删除,请执行以下操作。- maxupdateINT(默认值:10)
对LU因子分解执行的最大更新次数。在达到如此多的更新之后,基矩阵从头开始分解。
- mast布尔值(默认值:FALSE)
最小化摊销求解时间。如果启用,将测量使用基因子分解求解线性系统的平均时间。通常,在初始因子分解之后,平均求解时间将随着每次连续求解而减少,因为因子分解比求解操作(和更新)花费的时间要长得多。然而,最终,更新的因子分解变得足够复杂,以至于平均求解时间开始增加。当检测到这一点时,将从头开始重构基础。启用此选项将冒着不确定性行为的风险最大化速度。如果出现以下情况,则忽略
maxupdate
是0。- pivot“mrc”或“bland”(默认值:“mrc”)
轴心法则:最小降低成本(“MRC”)或布兰德法则(“BLAND”)。如果达到迭代极限并且怀疑循环,请选择布兰德规则。
- unknown_optionsDICT
此特定求解器未使用的可选参数。如果 unknown_options 非空,则会发出警告,列出所有未使用的选项。
注意事项
方法 修正单纯形 使用修改后的单纯形法,如中所述 [9], 除了因式分解 [11] 在算法的每一次迭代中,有效地维护和使用基矩阵的(而不是其逆矩阵)来求解线性系统。
参考文献