深度学习模型的准备和使用教程,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

 

 

 

 

 

 

 

 

 

 

 

 

相关内容

热门资讯

王进健率扬州市代表团赴新加坡考... 来源:扬州日报-扬州网扬州网讯(记者 伊然 仁辂) 水韵扬州、花园狮城,共享机遇、共创未来。7月2日...
西北地区东部华北四川盆地等地多... 摘要:国内方面,昨日,云南、广西、台湾、辽宁、吉林等地出现较强降雨,南方高温天气持续。未来三天,台风...
伊朗与六国达成共识 据参考消息援引路透社7月4日报道,亚洲中西部七国领导人峰会4日达成共识,将推动贸易自由化、吸引更多外...
【企业】山东博汇工纸令包设备搬... (转自:华印纸箱彩盒)受限于现有令包装设备产能瓶颈,销售订单交付面临较大压力,需依赖人工包装作为补充...
孟姜塬村:鲜桃成熟时 开园待客...   果农脸上洋溢着丰收的喜悦,欢迎游客前来采摘。  鲜美的桃子备受游客青睐  硕大的桃子压弯了枝头 ...
280块石头铺平“穷山沟”的致...   鄂西北山区,湖北省襄阳市谷城县五山镇堰河村的一片竹林里,280块形态各异的石头铺镶其间。  “早...
退市前,两位副总裁被逮捕 作 者丨崔文静编 辑丨巫燕玲锦州港7月4日晚间公告,两位副总裁已被锦州市中级人民法院依法决定逮捕。与...
PD-1“四小龙”君实生物,五... 创新药已经走出谷底,且已经迎来阶段性的繁荣。据统计,今年4月初至今,创新药板块的累计涨幅超过了20%...
我国球团矿技术和装备的发展 钢铁冶金2025年07月03日 16:42上海随着我国钢铁行业结构调整优化的需求和绿色低碳高质量的要...
“大金砖合作”彰显更强“南方力... 来源:新新华社里约热内卢7月5日电 题:“大金砖合作”彰显更强“南方力量”新华社记者赵焱 陈威华 周...