【发布时间】:2018-10-31 07:15:59
【问题描述】:
有一个 Pyomo 块“电网模型”,每个时间步都重复,表示按时间序列索引。
model.T = range(120)
def electrical_grid_block(grid, t):
<containing: bus, transmission line, generator>
model.Grid = Block(model.T,rule=electrical_grid_block)
在我想对必须引用过去时间步长的块进行建模之前,这对我来说完全有意义。例如,存储需要上一个时间步的存储级别的值。我想到的唯一解决方案:跳过索引块的想法并将时间序列传递到存储块中,如下所示:
def storage(s):
s.storage_level = Var(model.T, bounds=(0,300))
s.power = Var(model.T, bounds=(-2,2))
# Constraints
def constr_rule_speicher(s,t):
if t >= 2:
return s.storage_level[t] == - s.power[t] * dt + s.storage_level[t-1]
elif t == 1:
return s.storage_level[t] == 150.0
s.storage_constraints = Constraint(model.T, rule=constr_rule_speicher)
model.storage = Block(rule=storage)
我不太喜欢这种解决方案,因为我相信面向对象的问题建模方式会丢失。
我有什么不同的想法吗?
不幸的是,有关 Pyomo 的文档没有提供任何此类案例的示例。
【问题讨论】: