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 = 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-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' (旧版)。
结果字段 ineqlin , eqlin , lower ,以及 upper 全部包含 marginals 或目标函数相对于每个约束的右侧的偏导数。这些偏导数也被称为“拉格朗日乘数”、“对偶值”和“影子价格”。的签名惯例 marginals 与许多非线性求解器产生的拉格朗日乘子相反。
参考文献