首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Pyomo中如何定义开区间的Var?

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

Stack Overflow用户
提问于 2020-09-14 05:48:30
回答 1查看 316关注 0票数 2

Pyomo提供了一些特性来将约束添加到变量中,如文件中的以下代码。

代码语言:javascript
运行
复制
model.LumberJack = Var(within=NonNegativeReals, bounds=(0,6), initialize=1.5)

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

我认为闭区间约束是常见的事情,Pyomo提供了这种特性,但我找不到它。这是一个执行问题吗?还是优化中的理论问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-14 06:07:38

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

代码语言:javascript
运行
复制
variable < upper bound

而不是

代码语言:javascript
运行
复制
variable <= upper bound

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

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

代码语言:javascript
运行
复制
variable <= upper bound - epsilon

去“模仿”严格的不平等。这当然会带来数字上的困难。

最后,考虑到大多数算法都具有有限的精度和数值公差,关于变量界的严格不等式应该意味着什么?当公差大于0时,变量将被允许在上限处达到值,并且在公差范围内被认为是可行的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63878702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档