【问题标题】:Is it possible to create constraints in Pyomo across years and across hours?是否可以在 Pyomo 中跨年跨小时创建约束?
【发布时间】: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)?

注意:多索引集是可能的,但是如何处理闰年等?闰年多索引集的小时维度可以有不同的长度吗?

【问题讨论】:

    标签: indexing pyomo


    【解决方案1】:

    可以使用 [hour, year] 对变量和数据进行双重索引,但这将是多余的信息,对吧?因为您应该能够根据小时数计算年份(如果这很重要,可以有或没有一些初始偏移量用于年度翻转。)

    我会着手制作与年份相关联的时间索引子集。在pyomo 之外使用集合/列表推导和一些数学运算和/或DateTime 中的一些功能,如果(如您所说)您跨越多年和闰年等。[除此之外:如果您正在制作一个跨越数年的每小时模型 - 它可能会在自身重量下崩溃,但这是次要问题。 :) ] 然后您可以使用这些子集在模型中构建约束,而不会混淆事物增加额外的索引。

    如果卡住了请回复...

    【讨论】:

      猜你喜欢
      • 2013-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-05
      • 2021-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多