【发布时间】:2021-08-20 06:36:24
【问题描述】:
我想知道是否可以在 Pyomo 中同时创建数年和数小时的约束。
比如我现在的时间变量是:
model.T = pyo.RangeSet(len(hourly_data.index))
但是,这不允许我区分小时和年。我确实有一个时间戳变量,其中包含日期和时间。所以,我想也许我可以这样做:
model.T2 = pyo.Set(initialize=hourly_data.DateTime)
现在问题在于如何操作这个 TimeStamp 对象。考虑给定参数并且变量是求解器的输出。我们首先假设我们的目标函数是一个最大化函数。我们想创建以下约束:
获取最大用水量,在正常情况下,如果我们想获取所有时间的最大用水量,我们可以这样做:
model.c_maxWater = pyo.ConstraintList()
for t in model.T:
model.c_maxWater.add(model.waterUsage[t] <=
model.maxWater)
在与model.maxWater 关联的目标函数中有一个惩罚。问题就变成了,如果我们想要每年以不同的方式进行处罚,因为我们有不同的水费怎么办?我可以想象我们的约束有点像:
model.c_maxWater = pyo.ConstraintList()
for t in model.T2:
model.c_maxWater.add(model.waterUsage[t] <=
model.maxWater[y])
我的问题是:如何将t 变量与某些年份y 关联起来。一个索引是每小时一次(在这种情况下是t,另一个是每年一次(y)?
注意:多索引集是可能的,但是如何处理闰年等?闰年多索引集的小时维度可以有不同的长度吗?
【问题讨论】: