linprog(method='修订单纯形法')#

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='修订单纯形法' 将在 SciPy 1.11.0 中移除。它被 method='highs' 取代,因为后者更快且更稳健。

线性规划解决以下形式的问题

\[\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

请注意,默认情况下,除非使用 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序列,可选

对于 x 中的每个元素,定义最小值和最大值的 (min, max) 对的序列。 使用 None 表示没有边界。 默认情况下,边界为 (0, None)(所有决策变量都是非负的)。 如果提供了单个元组 (min, max),则 minmax 将作为所有决策变量的边界。

method字符串

这是“修订单纯形法”的特定于方法的文档。'highs''highs-ds''highs-ipm''内点法' (默认) 和 '单纯形法' (旧版) 也是可用的。

callback可调用对象,可选

每次迭代执行的回调函数。

x0一维数组,可选

决策变量的猜测值,将通过优化算法进行细化。此参数目前仅由“修订单纯形法”使用,并且仅当 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)

该容差确定第一阶段中的解何时“足够接近”于零而被视为基本可行解,或足够接近于正数而被视为最优解。

autoscale布尔值 (默认值: False)

设置为 True 以自动执行均衡。如果约束中的数值相差几个数量级,请考虑使用此选项。

rr布尔值 (默认值: True)

设置为 False 以禁用自动冗余移除。

maxupdate整数 (默认值: 10)

对 LU 分解执行的最大更新次数。达到此更新次数后,将从头开始分解基矩阵。

mast布尔值 (默认值: False)

最小化摊销求解时间。 如果启用此选项,将测量使用基分解法求解线性系统的平均时间。通常,在初始分解之后,每次连续求解的平均求解时间都会减少,因为分解比求解操作(和更新)花费更多时间。但是,最终,更新的分解变得足够复杂,以至于平均求解时间开始增加。当检测到这种情况时,基将从头开始重新分解。启用此选项可以在冒着不确定性行为的风险下最大化速度。如果 maxupdate 为 0,则忽略此选项。

pivot“mrc” 或 “bland” (默认值:“mrc”)

主元规则:最小缩减成本(“mrc”)或 Bland 规则(“bland”)。如果达到迭代限制且怀疑发生循环,请选择 Bland 规则。

unknown_optionsdict

此特定求解器未使用的可选参数。如果 unknown_options 为非空,则会发出警告,列出所有未使用的选项。

注意

方法 *修订单纯形法* 使用 [9] 中描述的修订单纯形法,除了有效地维护和使用基矩阵的分解 [11] 而不是其逆矩阵,来求解算法每次迭代中的线性系统。

参考文献

[9]

Bertsimas, Dimitris, 和 J. Tsitsiklis. “线性规划导论。” Athena Scientific 1 (1997): 997.

[11]

Bartels, Richard H. “单纯形法的稳定。” Journal in Numerische Mathematik 16.5 (1971): 414-434.