linprog(method=‘high s-ipm’)

scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None, bounds=None, method='highs-ipm', callback=None, options={'maxiter': None, 'disp': False, 'presolve': True, 'time_limit': None, 'dual_feasibility_tolerance': None, 'primal_feasibility_tolerance': None, 'ipm_optimality_tolerance': None}, x0=None)

线性规划:使用HIGH内点求解器最小化受线性等式和不等式约束的线性目标函数。

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

\[\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 = 0ub = 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) 被提供,则 minmax 将作为所有决策变量的界限。

method应力

这是“Highs-ipm”的方法特定文档。 'highs-ipm''highs-ds''interior-point' (默认), 'revised simplex' ,以及 'simplex' (传统)也可用。

退货
resOptimizeResult

A scipy.optimize.OptimizeResult 由以下字段组成:

X一维阵列

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

有趣的浮动

目标函数的最优值 c @ x

松弛一维阵列

松弛的(名义上为正)值, b_ub - A_ub @ x

圆锥体一维阵列

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

成功布尔尔

True 当算法成功找到最优解时。

状态集成

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

0 :优化已成功终止。

1 :已达到迭代或时间限制。

2 问题似乎是不可行的。

3 :问题似乎是无界的。

4 :HIGH解算器遇到了一个问题。

消息应力

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

NIT集成

执行的迭代总数。对于HIGH内点方法,这不包括交叉迭代。

crossover_nit集成

在高值内点法的交叉例程期间执行的原始/双推的次数。

工程线路OptimizeResult

对应于不等式约束的解和灵敏度信息, b_ub 。由字段组成的字典:

残留物np.ndnarray

松弛变量的(标称为正)值, b_ub - A_ub @ x 。这个数量通常也被称为“松弛”。

边缘部分np.ndarray

目标函数相对于不等式约束的右侧的灵敏度(偏导数), b_ub

方程式OptimizeResult

对应于等式约束的解和灵敏度信息, b_eq 。由字段组成的字典:

残留物np.ndarray

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

边缘部分np.ndarray

目标函数相对于等式约束的右侧的灵敏度(偏导数), b_eq

下,上OptimizeResult

对应于决策变量的下界和上界的解和灵敏度信息, bounds

残留物np.ndarray

数量的(名义上为正)值 x - lb (较低)或 ub - x (上方)。

边缘部分np.ndarray

目标函数对上下限的灵敏度(偏导数) bounds

参见

有关参数睡觉的文档,请参阅 scipy.optimize.linprog

选项
maxiter集成

在任一阶段中要执行的最大迭代次数。为 'highs-ipm' ,这不包括交叉迭代的次数。默认值是 int 在站台上。

disp :Bool(默认值: False )布尔值(默认值:

设置为 True 优化期间是否要将优化状态指示器打印到控制台。

预解 :Bool(默认值: True )布尔值(默认值:

在将问题发送到主解算器之前,PResolve试图识别琐碎的不可行之处、识别琐碎的无界性,并简化问题。通常建议保留默认设置 True ;设置为 False 如果要禁用预解算。

time_limit浮动

分配给解决问题的最长时间(以秒为单位);默认值是 double 在站台上。

dual_feasibility_toleranceDOUBLE(默认值:1E-07)

最低限度的这一点和 primal_feasibility_tolerance 的可行性公差 'highs-ipm'

primal_feasibility_toleranceDOUBLE(默认值:1E-07)

最低限度的这一点和 dual_feasibility_tolerance 的可行性公差 'highs-ipm'

ipm_optimality_tolerance :DOUBLE(默认值: 1e-08 )DOUBLE(默认值:

的最优性公差 'highs-ipm' 。最小允许值为1e-12。

unknown_optionsDICT

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

注意事项

方法 'highs-ipm' 是C++实现的 i n前面-p oint m 方法 [13]; 它的特点是交叉例程,因此它与单纯形求解器一样精确。方法 'highs-ds' 是C++高性能双重修订单工实现(HSOL)的包装器 [13], [14]. 方法 'highs' 自动在两者之间进行选择。有关涉及以下内容的新代码 linprog ,我们建议显式选择这三个方法值中的一个,而不是 'interior-point' (默认), 'revised simplex' ,以及 'simplex' (旧版)。

结果字段 ineqlineqlinlower ,以及 upper 全部包含 marginals 或目标函数相对于每个约束的右侧的偏导数。这些偏导数也被称为“拉格朗日乘数”、“对偶值”和“影子价格”。的签名惯例 marginals 与许多非线性求解器产生的拉格朗日乘子相反。

参考文献

13(1,2)

首页--期刊主要分类--期刊细介绍--期刊题录与文摘--期刊详细文摘内容“High-用于线性优化的高性能软件。”在https://www.maths.ed.ac.uk/hall/HiGHS/#guide上访问2020年4月16日

14

黄福,Q.和Hall,J.A.J.“将对偶修正单纯形法并行化。”数学规划计算,10(1),119-142,2018。DOI:10.1007/s12532-0170130-5