Pyomo 创建可变时间索引

Pyomo creating a variable time index

我正试图在我的 pyomo 模型中引入这个约束 [1

我定义了一个随时间索引的集合,我想优化下面相应的能量变量

model.grid_time = Set(initialize=range(0, 23)))
model.charging_energy = Var(model.grid_time, initialize=0)

我的约束定义如下所示:

model.limits = ConstraintList()
for t in model.grid_time:
    model.limits.add(sum(model.charging_energy[t] for t in model.grid >= energy_demand.at[t,"total_energy_demand"])

这些代码行的问题是我对整个索引集 model.grid_time 求和,而不仅仅是 t。我想我需要第二个变量索引集(替换 for t in model.grid),但我在创建变量索引集后搜索失败..

如有任何帮助或评论,我将不胜感激!

这样的东西行得通吗?

def Sum_rule(model, v, t):
    return sum(model.Ech[t2] for t2 in model.grid_time if t2 <= t) <= model.Edem[v,t]

model.Sum_constraint = Constraint(model.grid_time, model.V, rule=Sum_rule)

本质上,Sum_rule(model, v, t) 中的 t 确保为 model.grid_times 中的每个 t 调用约束。和中的 t2 也是 model.grid_times 的一部分,但它只会取小于调用约束的 t 的值。

我不确定我的约束是否与您的符号完全匹配,因为您没有提供所需的所有信息(例如关于 E^dem 变量的下标 v,但它基本上可以你想要的总和。