AI+电芯 | 多任务预测电池容量和功率衰减
背景
锂离子电池会因使用和暴露于环境条件而退化,从而影响其存储能量和供电的能力。 由于固有的制造差异和耦合的非线性老化机制,准确预测锂离子电池的容量和功率衰减具有挑战性。 在notebook中,构建了一种数据驱动的预测框架,用于通过多任务学习同时预测容量和功率衰减。 该模型能够在生命早期阶段准确预测容量和内阻的退化轨迹以及拐点和寿命终止点。 验证显示,容量衰减和电阻上升预测的平均百分比误差分别为 2.37% 和 1.24%。 该模型能够准确预测退化,面对容量和电阻估计误差,进一步证明了该模型的鲁棒性和通用性。与预测容量和功率衰减的单任务学习模型相比,该模型显示出显着的预测精度提高和计算成本降低。 这项工作展示了多任务学习在锂离子电池退化预测中的亮点。
数据集
本工作中使用的电池退化数据集是从 48 个 Sanyo/Panasonic 18650 NMC/石墨 LIB 的循环老化测试中获得的。这些电池的标称容量为1.85 Ah,截止电压为3 V和4.1 V,并在25°C的相同老化场景下进行了测试。在循环测试中,电池在 3.5 V 至 3.9 V 之间以 4 A 恒流恒压 (CC-CV) 方式充电/放电 30 分钟。电荷周转率约为 1 Ah,对应于大约 20% - 80% SOC之间的循环。每个电池平均进行17次表征测试,每两次表征测试之间进行约160个充放电循环,其中表征测试进行不同电流倍率下的容量检查和混合脉冲功率表征测试。在这项工作中,**分别使用 90% SOC 附近 1 A 放电电流时的容量和 2 A 充电脉冲时的 2 s 电阻作为 SOH-C(容量衰减) 和 SOH-R(内阻增长) 的指标。**电池组的功率衰减通常由电池组的阻抗决定。
本Notebook搬运自battery degradation trajectory prediction research work at ISEA, RWTH Aachen University 以及 github
定义模型参数。包括输入和输出的序列长度。
自定义损失函数
模型搭建
在模型输入时,为了保证输入输出的格式一致,会对输入和输出的数据进行填充使其达到长度一致。同时,为了使模型能认知到有些部分实际上是填充,应该忽略,需要增加Masking的步骤。在分别处理好容量数据和内阻数据后,模型会将两者拼接到一起,再进行下一步的处理。
Encoder的部分,由多层LSTM组成。由于是一个sequence to sequence的预测问题,这里我们在encoder和decoder的部分的主体都使用了LSTM作为主要的结构。
在Decoder的部分,同样是由多层LSTM组成。作为多任务预测的模型,这里对容量和内阻分别构建了Decoder的部分,两者相互独立。模型的输出将预测出的容量衰减序列和内阻增长序列组合。
加载数据
这里我们以及把48组电池划分为训练集 [trCap, trIR](29组),验证集 [vaCap, vaIR](10组),测试集 [teCap, teIR](9组)。
29 29 10 10 9 9
展示测试集的数据
数据处理
正如我们前面提到的,由于我们需要使用不同数量的前期循环数据预测后面的衰减/增长曲线,我们需要对分割后的数据进行填充和组装。下面的BuildSeqs函数就是如此,这里我们从前20圈开始,一直到倒数20圈为止,对每个电池的曲线依次切割。前期循环数据中的容量和阻抗作为输入,后续的数据每四个点取一个作为输出,这样做的原因是一方面可以减少计算量,另一个方面,由于数据本身就是插值得出,选择少量的点也不会对精度造成太大损失。同时对数据做了归一化处理。
然后我们通过定义的BuildSeqs函数处理训练数据集和验证集。
模型训练
在模型训练的部分,我们分三个阶段对模型进行训练,这样做的目的是为了加快收敛。在每个阶段完成后,会保存训练权重。我们可以自动或手动选择训练效果最好的权重进入下一个阶段的训练。请注意,这里如果重新训练的话,需要的时间可能较长(>3h)
模型预测
我们可以使用刚刚训练完成的模型,也可以加载已经训练完成的模型参数,直接进行预测。
同样,我们使用BuildSeqs函数对测试集数据进行处理。x2为模型的输入,即前期的容量和内阻序列数据。y2为对应的真实值,即后续循环的容量衰减和内阻增长序列。prediction为我们预测出的后续循环的数据。
81/81 [==============================] - 56s 696ms/step
我们将预测的结果与实际值放在一起比较,可以看到,在使用少量前期数据做预测时,模型对于两个任务都能做到较为有效的预测。这里我们使用测试集电池1的前50圈的数据做输入为例。注意这里我们已经把容量和内阻的单位转换为正常单位。(出于训练时间的考虑,这里我们的结果比最优结果稍差,读者有兴趣的话可以继续调整参数或继续训练)
RMSE: [0.16555224] MAPE: [3.6057513] %
RMSE: [3.786972] MAPE: [3.7053008] %