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序列,可选
针对
x
中每个元素的一系列(min, max)
对,定义了该决策变量的最小值和最大值。使用None
表示没有限制。默认情况下,边界为(0, None)
(所有决策变量均为非负数)。如果提供单个元组(min, max)
,则min
和max
将作为所有决策变量的边界。- method字符串
这是针对“修正单纯形”方法的文档。“highs”、“highs-ds”、“highs-ipm”、“interior-point”(默认)和“simplex”(旧版)也可用。
- callback可调用对象,可选
每次迭代执行的回调函数。
- x0一维数组,可选
决策变量的猜测值,将由优化算法进行优化。此参数目前仅由“修正单纯形”方法使用,并且仅在 x0 表示基本可行解时才能使用。
- 返回:
- res优化结果
一个
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”)。如果达到迭代次数限制且怀疑出现循环,请选择布兰德规则。
- unknown_options字典
此特定求解器未使用的可选参数。如果 unknown_options 非空,将发出警告,列出所有未使用的选项。
备注
“修正单纯形”方法使用 [9] 中描述的修正单纯形法,不同之处在于,高效地维护和使用基矩阵的分解 [11],而不是其逆,以在算法的每次迭代中求解线性系统。
参考文献