深度学习模型的准备和使用教程,LSTM用于锂电池SOH预测(第二节)(附Python的jypter源代码)
创始人
2024-06-03 15:57:34
0

测试SOH预测模型

为测试模型的正确性,对同一电池 (B0006) 进行充电。

dataset_val, capacity_val = load_data('B0006')
attrib=['cycle', 'datetime', 'capacity']
dis_ele = capacity_val[attrib]
C = dis_ele['capacity'][0]
for i in range(len(dis_ele)):dis_ele['SoH']=(dis_ele['capacity']) / C
print(dataset_val.head(5))
print(dis_ele.head(5))

将实际SOH和神经网络预测的SOH进行对比,并计算均方根误差。

attrib=['capacity', 'voltage_measured', 'current_measured','temperature_measured', 'current_load', 'voltage_load', 'time']
soh_pred = model.predict(sc.fit_transform(dataset_val[attrib]))
print(soh_pred.shape)C = dataset_val['capacity'][0]
soh = []
for i in range(len(dataset_val)):soh.append(dataset_val['capacity'][i] / C)
new_soh = dataset_val.loc[(dataset_val['cycle'] >= 1), ['cycle']]
new_soh['SoH'] =  soh
new_soh['NewSoH'] = soh_pred
new_soh = new_soh.groupby(['cycle']).mean().reset_index()
print(new_soh.head(10))
rms = np.sqrt(mean_squared_error(new_soh['SoH'], new_soh['NewSoH']))
print('Root Mean Square Error: ', rms)

最后,绘制两个SOH的图表,以观察它们的差异。

plot_df = new_soh.loc[(new_soh['cycle']>=1),['cycle','SoH', 'NewSoH']]
sns.set_style("white")
plt.figure(figsize=(16, 10))
plt.plot(plot_df['cycle'], plot_df['SoH'], label='SoH')
plt.plot(plot_df['cycle'], plot_df['NewSoH'], label='Predicted SoH')
#Draw threshold
#plt.plot([0.,len(capacity)], [0.70, 0.70], label='Threshold')
plt.ylabel('SOH')
# make x-axis ticks legible
adf = plt.gca().get_xaxis().get_major_formatter()
plt.xlabel('cycle')
plt.legend()
plt.title('Discharge B0006')

为了估算SOH,可以观察到,数据模式被模型正确地学习,正如理论所预测的那样,因为曲线的形状几乎完全相同。所显示的SOH的行为与预期相同。

估计RUL

与对SOH的估计一样,分别准备了训练和测试的数据集,
使用前50个数据的电池容量数据来预测接下来的循环容量的剩余循环次数。
以便知道电池阈值何时达到。

dataset_val, capacity_val = load_data('B0005')
attrib=['cycle', 'datetime', 'capacity']
dis_ele = capacity_val[attrib]
rows=['cycle','capacity']
dataset=dis_ele[rows]
data_train=dataset[(dataset['cycle']<50)]
data_set_train=data_train.iloc[:,1:2].values
data_test=dataset[(dataset['cycle']>=50)]
data_set_test=data_test.iloc[:,1:2].valuessc=MinMaxScaler(feature_range=(0,1))
data_set_train=sc.fit_transform(data_set_train)
data_set_test=sc.transform(data_set_test)X_train=[]
y_train=[]
#take the last 10t to predict 10t+1
for i in range(10,49):X_train.append(data_set_train[i-10:i,0])y_train.append(data_set_train[i,0])
X_train,y_train=np.array(X_train),np.array(y_train)X_train=np.reshape(X_train,(X_train.shape[0],X_train.shape[1],1))

接下来我们进行神经网络的训练。使用LSTM类型的网络,而不是标准的神经网络。

regress = Sequential()
regress.add(LSTM(units=200, return_sequences=True, input_shape=(X_train.shape[1],1)))
regress.add(Dropout(0.3))
regress.add(LSTM(units=200, return_sequences=True))
regress.add(Dropout(0.3))
regress.add(LSTM(units=200, return_sequences=True))
regress.add(Dropout(0.3))
regress.add(LSTM(units=200))
regress.add(Dropout(0.3))
regress.add(Dense(units=1))
regress.compile(optimizer='adam',loss='mean_squared_error')
regress.summary()
X_test=[]
for i in range(10,129):X_test.append(inputs[i-10:i,0])
X_test=np.array(X_test)
X_test=np.reshape(X_test,(X_test.shape[0],X_test.shape[1],1))
pred=regress.predict(X_test)
print(pred.shape)
pred=sc.inverse_transform(pred)
pred=pred[:,0]
tests=data_test.iloc[:,1:2]
rmse = np.sqrt(mean_squared_error(tests, pred))
print('Test RMSE: %.3f' % rmse)
metrics.r2_score(tests,pred)

平均RMSE为0.05(5%),这与文献中使用这种网络观察到的值非常接近。

接下来进行绘图。

ln = len(data_train)
data_test['pre']=pred
plot_df = dataset.loc[(dataset['cycle']>=1),['cycle','capacity']]
plot_per = data_test.loc[(data_test['cycle']>=ln),['cycle','pre']]
plt.figure(figsize=(16, 10))
plt.plot(plot_df['cycle'], plot_df['capacity'], label="Actual data", color='blue')
plt.plot(plot_per['cycle'],plot_per['pre'],label="Prediction data", color='red')
#Draw threshold
plt.plot([0.,168], [1.38, 1.38],dashes=[6, 2], label="treshold")
plt.ylabel('Capacity')
# make x-axis ticks legible
adf = plt.gca().get_xaxis().get_major_formatter()
plt.xlabel('cycle')
plt.legend()
plt.title('Discharge B0005 (prediction) start in cycle 50 -RULe=-8, window-size=10')

最后,从图表中可以看出容量的值的变化趋势非常接近实际值,RUL估计的误差为-8,这表明模型估计出来的生命周期结束时间比实际提前了8个周期。

       硕博期间所有的程序代码,一共2个多g,可以给你指导,赠送半个小时的语音电话答疑。电池数据+辨识程序+各种卡尔曼滤波算法都在里面了,后续还会有新模型的更新。快速入门BMS软件。某鹅:2629471989

 

 

 

 

 

 

 

 

 

 

 

 

相关内容

热门资讯

全网热搜找一个一元一分(红中麻... 微【ab120590】 【mj120590】【tj525555】(广东一元一分红中癞子爆炸码麻将群)...
我来解读加入附近红中麻将群@2... 1.进群方式《ab120590》或者《mj120590》《tj525555》--QQ(4434063...
「独家解读」红中麻将微信群@(... 1.亮点:一元红中麻将微信“群”—ab120590—tj525555—mj120590—客服Q443...
《围观》手机一元一分15跑得快... 微信一元麻将群群主微【ab120590】 【tj525555】【mj120590】一元一分群内结算,...
《百度百科》 靠谱一元一分红中... 群主微信【ab120590】【tj525555】【mj120590】一元 两元 麻将群跑得快群都有,...
《百度百科》 手机一元一分微... 微【ab120590】 【mj120590】【tj525555】专业麻将群三年房费全网最低,APP苹...
重大发现一元一分正规红中麻将微... 一元一分麻将群加群主微【ab120590】【tj525555】 【mj120590】等风也等你。喜欢...
[天天通知]手机红中麻将跑的快... 群主微信【ab120590】【tj525555】【mj120590】一元 两元 麻将群跑得快群都有,...
(玩家必看)全天24小时红中麻... 微【ab120590】 【mj120590】【tj525555】(广东一元一分红中癞子爆炸码麻将群)...
字节跳动广东红中麻将群@202... 微【ab120590】【tj525555】 【mj120590】红中麻将群、跑得快群。群内稳定五百人...
[爱生活]手机红中麻将跑的快@... 一元一分麻将群加群主微:微【ab120590】 【mj120590】【tj525555】喜欢手机上打...
哪里找正规红中癞子麻将群@哔哩... 微【ab120590】 【mj120590】【tj525555】广东一元一分红中麻将推倒胡等麻将群,...
[天天通知]哪里有手机麻将@... 一元一分麻将群加群主微【ab120590】【tj525555】 【mj120590】等风也等你。喜欢...
百度科普24小时红中麻将群@2... 微【ab120590】 【mj120590】【tj525555】(广东一元一分红中癞子爆炸码麻将群)...
(寻找科普)24小时红中麻将... 一元一分麻将群加群主微【ab120590】【tj525555】 【mj120590】等风也等你。喜欢...
正规靠谱24小时真人红中麻将群... 群主微信【ab120590】【tj525555】【mj120590】一元 两元 麻将群跑得快群都有,...
《今日头条》靠谱红中麻将微信群... 微【ab120590】【tj525555】 【mj120590】红中麻将群、跑得快群。群内稳定五百人...
【欢乐周末】手机红中麻将@群(... 微【ab120590】 【mj120590】【tj525555】专业麻将群三年房费全网最低,APP苹...
普及十款红中麻将上下分群@20... 薇新【ab120590】【mj120590】【tj525555】,最火热的跑得快,红中等等。自助上下...
经济焦点红中癞子麻将群@202... 加V【ab120590】【tj525555】【mj120590】红中癞子、跑得快,等等,加不上微信就...