В настоящее время я делаю модель, в которую я буду интегрировать Аккумулятор и накопитель тепловой энергии с атомной электростанцией в электросети. Я сделал свою модель так, чтобы она правильно работала с обоими типами накопителей энергии. Проблема, с которой я сталкиваюсь, заключается в том, что, когда я комментирую одно из хранилищ так, чтобы оно каким-то образом не участвовало в хранении энергии в первые 2 временных шага, оно получает половину своей энергии по всей емкости, даже если оно отключено. Когда я комментирую другую систему, такая же проблема возникает с закомментированной системой питания. Вы знаете, что вызывает это?
Вот мой код для этого. Я упростил его, чтобы включить все.
from gekko import GEKKO
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.integrate import quad
#Set up basic power consumption data
n = 24
t = np.linspace(0,n,n)
def load(t):
return -10*np.sin(2*np.pi*t/24)+40
Load = load(t)
Gen = np.ones(n)*40
def need(t):
return 10*np.sin(2*np.pi*t/24)+10
#Set up Model
m = GEKKO()
m.time = t
Cons = m.Param(value=Load)
Enuc = m.FV(value=45, lb=0) #nuclear power
Enuc.STATUS = 1
#Thermal Energy Storage
T = m.SV(value=300,ub=500,lb=300)
mass = m.FV(value=.0746,lb=0)
mass.STATUS=0
Cp = m.Param(value=5)
thermaleff = .8 #80%efficient
thermeff = m.if3((Enuc - Cons)/(mass*Cp),1/thermaleff,thermaleff)
#Battery Electrical storage
Capacity = 76.2
EStored = m.SV(value=0,lb=0,ub=Capacity)
batteryeff = .95
batteff = m.if3((Enuc - Cons),1/batteryeff,batteryeff)
#Energy Balance
Cost = m.Var()
m.Equation(EStored.dt() == batteff*(Enuc - Cons)) #Energy balance for Battery
#m.Equation(T.dt() == thermeff*(Enuc - Cons)/(mass*Cp)) #Energy balance for Thermal Storage
m.Equation(Cost == Enuc*1000 + Capacity*1000 + mass*5000)
m.Obj(Cost)
m.options.IMODE = 5
m.options.SOLVER = 3
m.solve()
#plot
plt.subplot(3,1,1)
plt.plot(t,Load)
plt.plot(t,Enuc.value)
plt.subplot(3,1,2)
plt.plot(t,EStored.value, label=f'Capacity = {EStored.value[12]:.03}')
plt.title("Battery Storage")
plt.ylabel("Energy")
plt.legend()
plt.subplot(3,1,3)
plt.plot(t,T.value,label=f'mass = {mass.value[-1]:.03}')
plt.title("Thermal Storage")
plt.ylabel("Temperature(K)")
plt.legend()
plt.show()