python - 如何为 Pyomo 设置类似于 GAMS 的循环索引
问题描述
我正在研究一个 pyomo 约束,它在第一个循环中有一个规则,可以根据最后一个循环进行一些计算。所以对于 T = 24,每个循环是:
def const1(model,t):
return model.x[t] == model.x[t - 1] + ef_H * model.d[t] - model.g[t]
model.x_const = Constraint(T, rule=const1)
然而,在第一个循环中,我希望它使用最后一个循环中的值并进行计算,如下所示:
def const1(model,t):
if t == 0:
return model.x[t] == model.x[24] + ef_H * model.d[t] - model.g[t]
return model.x[t] == model.x[t - 1] + ef_H * model.d[t] - model.g[t]
model.x_const = Constraint(T, rule=const1)
我知道在 GAMS 中有 -- 命令,您可以设置如下内容:
model.x[t] == model.x[t -- 1] + ef_H * model.d[t] - model.g[t]
它将使用最后一个值 (t = 24) 来计算您的初始 model.x[t]。pyomo 中是否有一种简单的方法可以实现这一点?
非常感谢您的帮助!
解决方案
我假设T
是模型中称为集合的元素列表'T'
。您将需要定义此集合ordered
以使其工作。然后您可以使用 pyomoSet.prevw
方法,该方法为您提供集合的前一个成员,并在需要时进行包装。我还建议将该集合定义为模型的一部分,而不是自由浮动的对象。
所以你可以像这样编写相当简单的代码:
model.T = Set(initialize=T, ordered=True)
def const1(model, t):
return model.x[t] == model.x[model.T.prevw(t)] + ef_H * model.d[t] - model.g[t]
model.x_const = Constraint(model.T, rule=const1)
推荐阅读
- jquery - 如何在引导程序中的 div 内居中内联
- reactjs - React 为找不到页面返回 200?
- c# - 获取“原始”日期时间
- c - 复制文件描述符并独立搜索它们
- javascript - 使用抽屉导航时反应导航标题不可见
- javascript - 访问 JSON 数据的基本错误(JS 功能)
- android - 如何遍历 android RecyclerView 中的用户列表并使用 Kotlin 在 Firestore 数据库中保存 CheckBox 更改
- drawing - 如何使用 Autoit 在 Photoshop 中重绘曲线?
- python - 如何从Python中的数组中获取连续整数子数组的开始和结束索引?
- java - Wildfly-Thorntail 无法连接到 MariaDB