目前,我正试图优化使用pyomo的电池存储。我以为一切都正常,但由于某种原因,仓库总是在一开始就卸货。这应该是不可能的,因为一开始仓库是空的.
def discharge_capacity_rule(model, t):
return model.discharge[t] <= in_out_leistung
model.discharge_capacity_rule = Constraint(model.t, rule = discharge_capacity_rule)
def charge_capacity_rule(model, t):
return model.charge[t] <= in_out_leistung
model.charge_capacity_rule = Constraint(model.t, rule = charge_capacity_rule)
def max_capacity_rule(model, t):
return model.soe[t] <= battery_capacity
model.max_capacity_rule = Constraint(model.t, rule = max_capacity_rule)
def soe_start_rule(model, t):
return model.soe[0] == soe_start
model.soe_start_rule = Constraint(rule = soe_start_rule)
def soe_end_rule(model, t):
return model.soe[n] == model.soe[0]
model.soe_end_rule = Constraint(rule = soe_end_rule)
def soe_rule(model, t):
if t == 0:
return model.soe[t] == soe_start
else:
return model.soe[t] == model.soe[t-1] + (model.charge[t] * in_out_efficiency) - (model.discharge[t] / in_out_efficiency)
model.soe_rule = Constraint(model.t, rule = soe_rule)

发布于 2021-12-04 20:32:42
这是贝斯优化中的一个常见问题。你只是为了功率而约束model.discharge[t] (也就是说,任何放电都不能超过BESS的名义功率输出),但是对于超出可用能量的放电并没有明确的限制。model.soe计算是避免超出可用存储能量的一种常见方法,但在初始时间步骤中,您只是避免计算BESS的电荷状态并使用return model.soe[t] == soe_start设置初始值,因此,在这一时间步骤中,放电不受model.soe_rule约束,因为下面的约束适用于所有的时间步骤,但适用于初始的一步。
model.soe[t] == model.soe[t-1] + (model.charge[t] * in_out_efficiency) - (model.discharge[t] / in_out_efficiency)您可以尝试一些方法:
您可以限制model.discharge[t]小于或等于任何time.step的可用存储能量。这相当于SOE计算,因为model.soe不能小于零,但是这个but在初始时间步骤中也适用。约束是这样的:
def discharge_leq_soe(model,t):model.discharget <= model.soet model.discharge_leq_soe =model.discharget
正如您评论的那样,您只需说在初始时间步骤中,在不允许的情况下释放,这将在初始时间步骤中将model.discharge设置为零:
pyo.Constraint(expr=model.dischargemodel.t.first()==0) = model.initial_discharge_fixed
你也不能修正初始的电荷状态,但是要计算它。在本文中,model.charge和model.discharge是不固定的,model.soe[0]是根据结果计算出来的。这可以为您提供一些关于改进de BESS调度所需的初始SOE的一些见解。在这种方法中,只需将soe_rule更改为:
def soe_rule( ==,t):如果t == 0:返回model.soet == (model.charget * in_out_efficiency) - (model.discharget / in_out_efficiency) - (model.discharget / in_out_efficiency)其他:返回model.soet ==model.model 1+ (model.charget * in_out_efficiency) -(model.discharget/in_out_efficiency) model.soe_rule =约束(model.t,rule = soe_rule )
https://stackoverflow.com/questions/70227889
复制相似问题