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

2024-05-13 01:27:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在和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, domain=NonNegativeReals, bounds=(0, P_Bat))
m.discharge = Var(m.T, domain=NonNegativeReals, bounds=(0, 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)

Tags: 电池vardomainrulemaxpyomo存储容量太阳能