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{使之满足} \ & 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

参数:
c1 维数组

要最小化的线性目标函数的系数。

A_ub2 维数组,可选

不等式约束矩阵。A_ub 的每一行指定 x 上某个线性不等式约束的系数。

b_ub1 维数组,可选

不等式约束向量。每个元素表示 A_ub @ x 对应值的上限。

A_eq2 维数组,可选

相等约束矩阵。A_eq 的每一行指定 x 上某个线性相等约束的系数。

b_eq1 维数组,可选

相等约束向量。A_eq @ x 的每个元素都必须等于 b_eq 的对应元素。

bounds序列,可选

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

methodstr

这是关于“修正单纯形”的方法特定的文档。还可以使用 ‘highs’‘highs-ds’‘highs-ipm’‘interior-point’(默认)和 ‘simplex’(传统)

callbackcallable, optional

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

x0一维数组,可选

决策变量的猜测值,将由优化算法对其进行优化。此实参目前仅由“修正单纯形”方法使用,并且仅当 x0 表示基本可行解时才能使用。

返回:
resOptimizeResult

一个 scipy.optimize.OptimizeResult,包含以下字段

x一维数组

决策变量的值,最小化目标函数,同时满足约束。

funfloat

目标函数的最优值 c @ x

slack一维数组

松弛变量的(标称正的)值,b_ub - A_ub @ x

con一维数组

等式约束的(标称零)残差,b_eq - A_eq @ x

successbool

当算法成功找到最优解时,返回True

statusint

一个表示算法退出状态的整数。

0 : 已成功结束优化。

1 : 已达到迭代限制。

2 : 问题似乎不可行。

3 : 问题似乎未受限制。

4 : 遇到数值困难。

5 :无约束问题;开启预处理。

6 :提供无效的猜测。

messagestr

算法退出状态的字符串描述符。

nitint

所有阶段中执行的总迭代数。

另请参见

如需查看其余参数的文档,请参见 scipy.optimize.linprog

选项:
——-
maxiterint (默认值: 5000)

任一阶段执行的最大迭代数。

dispbool (默认值: False)

如果每次迭代的优化状态指示信息要打印到控制台,则将此值设为 True

presolvebool (默认值: True)

预处理将尝试找出微不足道的不可行性、微不足道的无界性并简化问题,然后再将其发送至主求解器。通常建议保留默认设置 True;如果要禁用预处理,则将此值设为 False

tolfloat (默认值: 1e-12)

当第 1 阶段的解决方案在 0 附近“足够接近”时,可认为基本可行的解决方案或接近正值,足以作为最优解,该容差就由此确定。

autoscalebool (默认值: False)

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

rrbool (默认值: True)

将此值设为 False 以禁用自动冗余消除。

maxupdateint (默认值: 10)

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

mastbool (默认值: False)

最小化摊销求解时间。如果启用,则测量使用基分解求解线性系统的平均时间。通常情况下,在经过初始分解后,每次陆续求解,平均求解时间都会缩短,因为分解操作(以及更新)比求解操作花费的时间长得多。然而,最终,更新后的分解变得非常复杂,以致于平均求解时间开始增加。当检测到这种情况时,会从头开始分解基。启用此选项以最大化速度,但存在非确定性行为的风险。如果 maxupdate 为 0,则忽略此选项。

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

枢纽规则:最小化约化成本(“mrc”)或布兰德规则(“bland”)。如果达到迭代限制,并且怀疑存在循环,请选择布兰德规则。

unknown_options字典

此特定求解器不使用的可选参数。如果 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。