Pyomo提供了一些特性来将约束添加到变量中,如文件中的以下代码。
model.LumberJack = Var(within=NonNegativeReals, bounds=(0,6), initialize=1.5)
但是,我想定义一个带有打开区间约束的变量,例如(0, 1]
。据我理解,bounds
参数意味着闭区间,因此,如果我将param设置为bounds=(0,1)
,则表示[0, 1]
。
我认为闭区间约束是常见的事情,Pyomo提供了这种特性,但我找不到它。这是一个执行问题吗?还是优化中的理论问题?
发布于 2020-09-14 06:07:38
开放区间意味着模型中的“严格较少”的约束,即
variable < upper bound
而不是
variable <= upper bound
根据您的解决方案算法,这可能不支持基础理论。例如,在线性和混合整数规划理论中没有严格不等式的支持。您唯一可以拥有的是<=
和>=
。因此,即使Pyomo支持(半)开放区间,解决这个问题的算法也可能不支持。
解决这个问题的通常方法是使用一个小的epsilon并编写
variable <= upper bound - epsilon
去“模仿”严格的不平等。这当然会带来数字上的困难。
最后,考虑到大多数算法都具有有限的精度和数值公差,关于变量界的严格不等式应该意味着什么?当公差大于0时,变量将被允许在上限处达到值,并且在公差范围内被认为是可行的。
https://stackoverflow.com/questions/63878702
复制相似问题