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

 

 

 

 

 

 

 

 

 

 

 

 

相关内容

热门资讯

中国青少年网球城市挑战赛(内蒙... 转自:内蒙古日报本报5月17日讯  (记者  柴思源)5月16日上午,第二届中国青少年网球城市挑战赛...
焕发博物馆持久活力 转自:内蒙古日报□袁宝年  内蒙古博物院推出“北疆文脉·新启未来”主题活动,将“10平米”博物馆植入...
园区强支撑 云咖正跃升 转自:云南日报在位于昆明经开区(自贸试验区昆明片区)的云南中啡食品有限公司智能化生产线上,经过烘焙、...
乌兰察布:让劳务品牌成为促就业... 转自:内蒙古日报本报乌兰察布5月17日电  (记者  郭奇男)近年来,乌兰察布市人力资源和社会保障局...
坚持问题导向和严的标准 分类指...   新华社石家庄5月17日电 中共中央政治局常委、中央书记处书记蔡奇16日至17日在河北唐山市检查指...
北京成立我国首个脑机接口临床病...   本报讯(记者 柴嵘)昨天,北京天坛医院成立脑机接口临床与转化病房,将通过开展科研及临床试验,推动...
前4月我区新能源发电量突破10... 转自:内蒙古日报本报5月17日讯  (记者  康丽娜)据自治区能源局最新消息,今年前4月,自治区新能...
大运河岸有座糯米大坝 大运河连镇段曲折多弯,被称为“九曲十八弯”。 陈鑫露摄  本报记者 李如意 通讯员 宋昀倩  大运河...
梅洛尼会见默茨时称自己非 “国...   意大利总理梅洛尼在被问及是否会为德国总理默茨即将与美国总统唐纳德・特朗普的会面提供建议时表示,自...
50名日本青年解锁课本外的立体... 北京语言大学的学生和日本青年分组讨论。 主办方供图  本报记者 吴娜 实习生 孙择 隆楚妍  5月1...
迈出艰难一步 未实现突破   俄罗斯和乌克兰代表团16日在土耳其伊斯坦布尔举行双方三年多来的首次直接谈判。双方就互换1000名...
逐“光”而行向未来——在“中国... 来源:新华网 .新华社武汉5月17日电 能背在身上的激光工坊、可每秒传输1.2TB数据的光纤、会自动...
潘展乐全国游泳冠军赛夺冠 来源:新华社微博 【潘展乐400米自夺冠】在刚刚举行的2025年全国游泳冠军赛男子400米自由泳决赛...
岛内舆论担忧“非核家园”冲击台... 来源:新华网 新华社台北5月17日电(记者李建华)台湾第三核能发电厂(简称核三厂)2号机17日正式除...
2025创新核药专题会议在锡举... 来源:无锡日报  昨天(5月17日),2025太湖湾生命健康未来大会平行论坛之一——2025创新核药...
市领导调研便民就医公共交通优化... 来源:无锡日报市领导调研便民就医公共交通优化提升工作 “一院一策”优化就医公共交通体系 细致入微解决...
以军过去48小时行动致加沙地带... 转自:财联社【以军过去48小时行动致加沙地带200人死亡】财联社5月18日电,据加沙政府媒体办公室当...
转存了解!这件即将归国的文物大... 当地时间5月16日,国家文物局在中国驻美国大使馆接收美国史密森尼学会国立亚洲艺术博物馆返还的子弹库帛...
“流动探头”赋能基层社会治理 本报果洛讯 (记者 余晖 李永波) 5月14日,果洛藏族自治州玛沁县委社会工作部举办玛沁县“流动探头...
返回海晏村创业的年轻人 夕阳熔金、晚霞绚烂,昆明滇池之畔的海晏古渔村,正以其独特的魅力吸引着游客的目光。这里有着“落霞与孤鹜...