在一个约束中捕获多个约束是否更有效?

计算科学 线性规划
2021-11-28 23:20:21

我有许多变量需要设置为 0。它们是正实数,所以按照我的看法,我可以通过单独的约束将每个变量设置为 0,或者我可以将它们的总和设置为零。这对效率有帮助吗?我正在处理一些大问题,所以我希望尽可能短的解决时间。

1个回答

我建议将每个变量设置为 0,而不是尝试做一些聪明的事情。

这有两个原因:

  1. 你可能聪明而犯了错误。例如,将每个变量设置为零与将一组变量的总和设置为零是不同的问题(因为如果某些变量取负值而其他变量取正值,则此约束仍然成立)。因此,即使在这里,您在问题中建议的示例也会给出错误的答案。您可能会浪费大量时间来追踪这样的错误。

  2. 简单的约束比更复杂的约束更容易处理。您在心理上将成本建模为“两个约束比一个复杂约束要昂贵得多”。但是另一种成本模型是:“许多简单的约束仍然比一个复杂的约束便宜”。在不了解求解器的详细信息的情况下,很难在这些之间做出判断;但是,我怀疑后一种模型更接近事实。解析这样的语句a+b+c=0需要构建类似parse tree的东西,这很昂贵。但是,求解器很可能会添加几行代码来优化特殊情况,例如a=0. 因此,该操作将相对便宜得多。