线性规划求解器中上限和下限的参数
Parameter for upper and lower bound in linear programming solvers
许多科学计算平台都提供线性规划求解器。比如MATLAB中有linprog
函数,Scipy,还有DolphinDB。而linprog
在所有这三个平台中都提供了一个不等式约束的参数,即A
,以及两个有界变量的参数,即lb
和ub
。
如果线性规划问题具有有界变量,我可以将它们置于不等式约束 A
中,方法是添加仅包含一个 1
或 -1
的行,其余的元素是 0
,或者我可以简单地将它们放在 lb
and/or ub
.
中
这两种方式有什么区别吗?或者有什么理由我应该支持 A
而不是 lb
/ub
,反之亦然?
边界比显式约束更有效。基本上,在 Simplex 求解器中,边界不会增加基础矩阵的大小。这个基矩阵需要求解和求逆(因式分解)。
高级求解器有一个预求解器,可以将单一约束转换为边界。在那种情况下,没有真正的性能损失。对于那些求解器来说,如何指定边界约束主要是一个品味问题:作为边界还是作为单例约束。
许多科学计算平台都提供线性规划求解器。比如MATLAB中有linprog
函数,Scipy,还有DolphinDB。而linprog
在所有这三个平台中都提供了一个不等式约束的参数,即A
,以及两个有界变量的参数,即lb
和ub
。
如果线性规划问题具有有界变量,我可以将它们置于不等式约束 A
中,方法是添加仅包含一个 1
或 -1
的行,其余的元素是 0
,或者我可以简单地将它们放在 lb
and/or ub
.
这两种方式有什么区别吗?或者有什么理由我应该支持 A
而不是 lb
/ub
,反之亦然?
边界比显式约束更有效。基本上,在 Simplex 求解器中,边界不会增加基础矩阵的大小。这个基矩阵需要求解和求逆(因式分解)。
高级求解器有一个预求解器,可以将单一约束转换为边界。在那种情况下,没有真正的性能损失。对于那些求解器来说,如何指定边界约束主要是一个品味问题:作为边界还是作为单例约束。