微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 pyomo 能量优化问题中实现充满电时电池存储的限制?

如何解决如何在 pyomo 能量优化问题中实现充满电时电池存储的限制?

我目前正在使用 pyomo 设置能量优化问题。只是提供一些背景信息:我的想法是通过分时使用费率最大限度地降低独立电网的总体成本。

目前我坚持在我的代码中实现电池存储。我的问题是电池的容量是固定的,当我产生的多余太阳能多于电池剩余的存储量时,我遇到了优化问题,因为它变得不可行。

我的方法是为问题的每个时间步设置两个条件:

  1. 当多余的太阳能没有超过可用的电池存储量时:用全部多余的太阳能为电池充电
  2. 当多余的太阳能超过可用的电池存储量时:为电池充满电

我尝试实现两个二进制变量 y 和 x。但我真的不明白如何正确地完成这项工作。或者这只能通过 pyomo 中的分离来实现?因为那是我在 pyomo 中使用还不太明白的主题...

P_Bat = 0.75  # Maximum charge/discharge amount per time step
E_Bat = 1.2  # 1.2 kWh battery capacity
SOC_min = 0.4
SOC_max = 1
bat_0 = E_Bat * SOC_max

...

m.p1 = Var(m.T,domain=NonNegativeReals) 
m.bat = Var(m.T,domain=NonNegativeReals,bounds=(SOC_min * E_Bat,SOC_max * E_Bat)) # Energy in battery for each time step
m.charge = Var(m.T,bounds=(0,P_Bat))
m.discharge = Var(m.T,P_Bat))
m.y = Var(m.T,within=Binary)
m.x = Var(m.T,within=Binary)

...

def energy_bat_rule(m,t):
    if t == m.T.first():
        return m.bat[t] == bat_0 + m.charge[t] - m.discharge[t]
    return m.bat[t] == m.bat[t-1] + m.charge[t] - m.discharge[t]
m.Energy_Bat = Constraint(m.T,rule=energy_bat_rule)

def charge_bat_rule(m,t):
    return m.charge[t] == (zeitwerte.at[t,"Solarleistung[kW]"] - m.p1[t]) * m.y[t] + (E_Bat - m.bat[t]) * m.x[t]
m.Charge_Bat = Constraint(m.T,rule=charge_bat_rule)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。