如何在 Pyomo 中用开区间定义 Var?

How to define Var with an open interval in Pyomo?

Pyomo 提供了一些功能来向变量添加约束,例如 the document.

中的波纹管代码
model.LumberJack = Var(within=NonNegativeReals, bounds=(0,6), initialize=1.5)

但是,我想定义一个具有开区间约束的变量,例如(0, 1]。在我的理解中,bounds 参数表示 闭区间 ,因此,如果我将参数设置为 bounds=(0,1),则表示 [0, 1].

我认为闭区间约束很常见,Pyomo 提供了这种功能,但我找不到。这是一个实施问题吗?或优化中的理论问题?

开区间意味着模型中的“严格较少”约束,即

variable < upper bound

而不是

variable <= upper bound

根据您的解决方案算法,这可能不受基础理论的支持。例如,在线性和混合整数规划理论中,不支持严格不等式。你唯一能拥有的就是<=>=。 因此,即使 Pyomo 支持(半)开区间,解决问题的算法也可能不支持。

通常解决这个问题的方法是使用一个小的 epsilon 并写

variable <= upper bound - epsilon

“模拟”严格的不等式。这当然可能会带来数值上的困难。

最后,鉴于大多数算法都以有限的精度和数值容差运行,因此存在变量边界上的严格不等式应该意味着什么的问题。一旦公差大于 0,变量将被允许达到上限值,这将被认为在公差范围内可行。