主要内容

电池循环寿命预测从最初的操作数据

这个例子展示了如何预测剩余的快速充电锂电池的循环寿命使用线性回归,监督机器学习算法。锂离子电池循环寿命预测使用基于物理建模方法非常复杂,由于不同的操作条件和重大设备变化即使电池来自同一制造商。对于这个场景,基于机器学习的方法时提供有前景的结果足够的测试数据是可用的。准确的电池循环寿命预测在电池寿命的早期阶段将允许新的制造工艺的快速验证。它还允许用户识别性能恶化有足够更换模具替换有缺陷的电池。为此,只有第一个100周期特性被认为是预测剩余的循环寿命和显示了预测误差约10% [1]。

数据集

数据集包含测量从124年锂电池额定容量为1.1啊,额定电压3.3 V在不同充放电概要文件。完整的数据集可以访问与详细描述[2]这里[1]。对于这个例子,只包含一个子集的数据策划相关测量特征被提取。这减少了下载的大小不改变机器学习模型的性能。训练数据包含从41细胞测量,验证数据包含测量从43个细胞和测试数据包含测量从40细胞。每个单元存储在一个数据结构,其中包括以下信息:

  • 描述性数据:细胞条形码、收费政策、循环寿命

  • 每个周期汇总数据:周期数,放电容量,内部电阻,充电时间

  • 收集的数据在一个循环:时间、温度、线性插值的放电容量,线性插值的电压

加载数据从MathWorks supportfiles站点(这是一万博1manbetx个大的数据集,~ 1.7 gb)。

url =“https://ssd.mathworks.com/万博1manbetxsupportfiles/predmaint/batterycyclelifeprediction/v1/batteryDischargeData.zip”;websave (“batteryDischargeData.zip”url);解压缩(“batteryDischargeData.zip”)负载(“batteryDischargeData”);

特征提取

放电容量是一个关键的功能,能反映电池的健康,和它的值是反映电动汽车的练习场。情节首次放电容量1000周期的细胞在训练数据可视化一个细胞的改变整个的生活。

图,;i = 1:尺寸(trainData, 2)如果元素个数(trainData(我).summary.cycle) = =元素个数(独特(trainData(我).summary.cycle))情节(trainData .summary(我)。周期,trainData (i) .summary.QDischarge);结束结束ylim ([0.85, 1.1]), xlim ([0, 1000]);ylabel (放电容量(啊)”);包含(“循环”);

附近看到的情节,容量衰减加速生命的终结。然而,褪色能力是微不足道的100年第一个周期和本身并不是一个好功能,电池循环寿命预测。因此,一种数据驱动的方法,认为每个周期的电压曲线,以及额外的测量,包括电池内阻和温度,被认为是预测剩余的循环寿命。问的cycle-to-cycle演化(V),放电电压曲线作为电压的函数对于给定的周期,是一个重要的特征空间[1]。特别是,放电电压的变化曲线之间的周期, Δ ( V ) 在退化诊断非常有效。因此,选择不同的放电容量的函数之间的电压100和10日周期, Δ 1 0 0 - - - - - - 1 0 ( V )

图,;i = 1:尺寸(testData, 2)情节(testData (i) .cycles (100)。问dlin - testData(i).cycles(10).Qdlin), testData(i).Vdlin)结束ylabel (“电压(V)”);包含(“Q_ {100} - Q_{10}(啊));

计算汇总统计数据使用 Δ 1 0 0 - - - - - - 1 0 ( V ) 曲线的每一个细胞的状态指示器。重要的是要记住,这些摘要统计信息不需要有明确的物理意义,他们只需要具有预测功能。例如,的方差 Δ 1 0 0 - - - - - - 1 0 ( V ) 和循环寿命是高度相关的重对数坐标图,从而证实了这种方法。

图;trainDataSize =大小(trainData, 2);cycleLife = 0 (trainDataSize, 1);DeltaQ_var = 0 (trainDataSize, 1);i = 1: trainDataSize cycleLife (i) =大小(trainData .cycles(我),2)+ 1;DeltaQ_var (i) = var (trainData (i) .cycles (100)。Qdlin trainData (i) .cycles (10) .Qdlin);结束重对数(DeltaQ_var cycleLife,“o”)ylabel (“生命周期”);包含(“Var (Q_ {100} - Q_{10})(啊^ 2)”);

接下来,从原始测量数据中提取以下特性(变量名在括号中)[1]:

  • Δ 1 0 0 - - - - - - 1 0 ( V ) 日志方差(DeltaQ_var)

  • Δ 1 0 0 - - - - - - 1 0 ( V ) 最小日志(DeltaQ_min)

  • 斜率的线性适合容量衰减曲线,周期2 - 100 (CapFadeCycle2Slope)

  • 线性适合的拦截能力衰减曲线,周期2 - 100 (CapFadeCycle2Intercept)

  • 放电容量循环2 (Qd2)

  • 平均充电时间前5周期(AvgChargeTime)

  • 内部阻力最小,周期2 - 100 (MinIR)

  • 内部阻力不同周期2和100 (IRDiff2And100)

helperGetFeatures函数接受原始测量数据和计算前面列出的功能。它返回XTrain表中包含的特性yTrain包含预期剩余的循环寿命。

[XTrain, yTrain] = helperGetFeatures (trainData);头(XTrain)
ans =8×8表DeltaQ_var DeltaQ_min CapFadeCycle2Slope CapFadeCycle2Intercept Qd2 AvgChargeTime MinIR IRDiff2And100 __________ __________ _____________ ______________________ ______ _________________ ________ _________________ -5.0839 -1.9638 6.4708 e-06 e-05 1.0809 1.0753 13.409 0.016764 -3.3898 -4.3754 -1.6928 1.6313 e-05 e-05 1.0841 1.0797 12.025 0.016098 4.4186 -4.1464 -1.5889 8.1708 e-06 e-06 1.08 1.0761 10.968 0.015923 -0.00012443 -3.8068 -1.4216 -8.491 1.0974 1.0939 10.025 0.016083 -3.7309 -4.1181 -1.6089 2.2859 e-05 e-05 e-05 1.0589 1.0538 11.669 0.015963 -0.00030445 -4.0225 -1.5407 2.5969 1.0664 1.0611 10.798 0.016543 -0.00024655 -3.9697 1.0762 1.0721 10.147 0.016238 2.2163 -1.5077 - 1.7886 e-05 e-05 e-05 -3.6195 -1.3383 -1.0356 1.0889 1.0851 9.9247 0.016205 -6.6087 e-05

模型开发:线性回归与弹性净正规化

使用一个正规化的线性模型来预测剩余电池的循环寿命。线性模型计算成本较低但提供高可解释性。线性模型的形式:

y = w T x + β

在哪里 y 细胞周期的数量吗 , x 是一个 p 维细胞特征向量 w p 维模型系数向量 β 是一个标量拦截。线性模型是正规化使用弹性网地址之间的高度相关性特性。为 α 严格在0和1之间,负的 λ 正则化系数,弹性网络解决问题:

w ˆ = 最小值 w y - - - - - - X w - - - - - - β 2 2 + λ P α ( w )

在哪里 P α ( w ) = ( 1 - - - - - - α ) 2 w 2 2 + α w 1 。弹性网岭回归方法 α 接近0和套索正则化时是一样的吗 α = 1 。训练数据是用来选择hyperparameters α λ 确定的系数值, w 。的套索函数返回了最小二乘回归系数和信息模型的适合作为输出 α λ 价值。的套索函数接受一个向量的值 λ 参数。因此,对于每个值 α ,该模型系数 w λ 收益率最低的RMSE值计算。[1]中提出,使用四倍交叉验证1蒙特卡罗重复交叉验证。

rng (“默认”)alphaVec = 0.01:0.1:1;lambdaVec = 0:0.01:1;MCReps = 1;cvFold = 4;rmseList = 0(长度(alphaVec), 1);minLambdaMSE = 0(长度(alphaVec), 1);wModelList =细胞(1、长度(alphaVec));betaVec =细胞(1、长度(alphaVec));i = 1:长度(alphaVec)[系数,fitInfo] =套索(XTrain.Variables yTrain,“α”alphaVec(我),“简历”cvFold,“MCReps”MCReps,“λ”,lambdaVec);wModelList{我}=系数(:,fitInfo.IndexMinMSE);betaVec{我}= fitInfo.Intercept (fitInfo.IndexMinMSE);indexMinMSE = fitInfo.IndexMinMSE;rmseList (i) =√fitInfo.MSE (indexMinMSE));minLambdaMSE (i) = fitInfo.LambdaMinMSE;结束

拟合模型健壮,利用验证数据选择的最终值 α λ hyperparameters。为此,选择相对应的系数四个最低RMSE值计算使用训练数据。

numVal = 4;[,idx] =排序(rmseList);val = (1: numVal);指数= idx (1: numVal);α= alphaVec(指数);λ= minLambdaMSE(指数);wModel = wModelList(指数);β= betaVec(指数);

对于每一组系数,计算预测值和RMSE验证数据。

[XVal, yVal] = helperGetFeatures (valData);rmseValModel = 0 (numVal);valList = 1: numVal yPredVal = (XVal。Variables*wModel{valList} + beta{valList}); rmseValModel(valList) = sqrt(mean((yPredVal-yVal).^2));结束

选择模型RMSE当使用最少的验证数据。相关模型训练数据的最低RMSE值不是模型对应于最低的RMSE值验证数据。使用验证数据从而增加模型的鲁棒性。

[rmseMinVal, idx] = min (rmseValModel);wModelFinal = wModel {idx};betaFinal =β{idx};

绩效评估的训练模式

相对应的测试数据包含测量40细胞。提取特征和相应的反应testData。使用训练模型来预测剩余生命周期的每一个细胞testData

[XTest,欧美]= helperGetFeatures (testData);yPredTest = (XTest。Variables*wModelFinal + betaFinal);

可视化预测与实际测试数据生命周期图。

图;yPredTest散射(欧美);refline (1,0);标题(预计的和实际的循环寿命的)ylabel (循环寿命预测的);包含(实际的循环寿命的);

理想情况下,所有的点在上面的情节应该接近对角线。从上面的情节,看到剩下的训练模型时表现良好循环寿命是500年和1200年之间循环。超过1200次,模型性能恶化。模型一直低估了这个地区的剩余的循环寿命。这主要是因为测试和验证数据集包含更多细胞总生活在1000周期。

计算预测的RMSE剩余的循环寿命。

errTest = (yPredTest-yTest);rmseTestModel =√意味着(errTest ^ 2))
rmseTestModel = 211.6148

绩效评估的另一个指标被认为是平均百分误差定义[1]

% e r r = 1 n Σ = 1 n | y - - - - - - y ˆ | y × 1 0 0

n =元素个数(欧美);nr = abs(欧美- yPredTest);errVal = (1 / n) * (nr. /次)* 100和
errVal = 9.9817

结论

这个例子展示了如何使用一个线性回归模型和弹性净正规化电池循环寿命预测从100年只有第一个基于测量周期。自定义特性提取原始测量数据和一个线性回归模型和弹性网正规化安装使用训练数据。使用验证数据集hyperparameters被选中。这个模型是用于测试数据的性能评估。使用测量第一个100周期,RMSE剩余电池的循环寿命预测的测试数据集211.6和平均百分比误差为9.98%。

引用

[1]Severson·阿迪,晚上金,N。et al。“数据驱动的电池循环寿命的预测能力退化。”Nat能源4,383 - 391 (2019)。https://doi.org/10.1038/s41560 - 019 - 0356 - 8

[2]https://data.matr.io/1/

万博1manbetx支持功能

函数[xTable y] = helperGetFeatures(批处理)% HELPERGETFEATURES函数接受原始测量数据和计算%以下特性:%% Q_ {100 - 10} (V)方差(DeltaQ_var)% Q_ {100 - 10} (V)最低(DeltaQ_min)%的斜率线性适合容量衰减曲线周期2 - 100 (CapFadeCycle2Slope)%线性适合的拦截能力衰减曲线,周期2 - 100 (CapFadeCycle2Intercept)%在周期放电容量2 (Qd2)%平均充电时间前5周期(AvgChargeTime)%内部阻力最小,周期2 - 100 (MinIR)%内部阻力差异周期2和100年[IRDiff2And100]N =大小(批处理,2);%的电池数量%预先配置的变量y = 0 (N, 1);DeltaQ_var = 0 (N, 1);DeltaQ_min = 0 (N, 1);CapFadeCycle2Slope = 0 (N, 1);CapFadeCycle2Intercept = 0 (N, 1);Qd2 = 0 (N, 1);AvgChargeTime = 0 (N, 1);IntegralTemp = 0 (N, 1);MinIR = 0 (N, 1);IRDiff2And100 = 0 (N, 1);i = 1: N%循环寿命y(我,1)=大小(批处理(我).cycles, 2) + 1;%确定周期随着时间的差距numCycles =大小(批处理(i)。周期,2);timeGapCycleIdx = [];jBadCycle = 0;jCycle = 2: numCycles dt = diff(批处理(i) .cycles (jCycle) .t);如果马克斯(dt) 5 *意味着(dt) jBadCycle = jBadCycle + 1;timeGapCycleIdx (jBadCycle) = jCycle;结束结束%去除周期随着时间的差距批处理(i) .cycles (timeGapCycleIdx) = [];批处理(i) .summary.QDischarge (timeGapCycleIdx) = [];批处理(i) .summary.IR (timeGapCycleIdx) = [];批处理(i) .summary.chargetime (timeGapCycleIdx) = [];%计算Q_100_10统计数据DeltaQ =批(i) .cycles (100)。问dlin - batch(i).cycles(10).Qdlin; DeltaQ_var(i) = log10(abs(var(DeltaQ))); DeltaQ_min(i) = log10(abs(min(DeltaQ)));%的斜率和截距线性适合从循环容量衰减曲线% 2 100年周期coeff2 = polyfit(批处理(i) .summary.cycle(2:10 0)批(i) .summary.QDischarge (2:10 0), 1);CapFadeCycle2Slope (i) = coeff2 (1);CapFadeCycle2Intercept (i) = coeff2 (2);% 2周期放电容量Qd2 (i) =批(i) .summary.QDischarge (2);% Avg充电时间,前5周期(2 - 6)AvgChargeTime (i) =意味着(批处理(i) .summary.chargetime (2:6));%温度从周期2到100的积分tempIntT = 0;jCycle = 2:10 0 tempIntT = tempIntT + trapz(批处理(i) .cycles (jCycle)。t,批处理(i) .cycles (jCycle) .T);结束IntegralTemp (i) = tempIntT;%内部阻力最小,周期2 - 100temp =批(i) .summary.IR (2:10 0);MinIR (i) = min(临时(临时~ = 0));IRDiff2And100 (i) =批(i) .summary.IR》(100)——批(i) .summary.IR (2);结束xTable =表(DeltaQ_var DeltaQ_min,CapFadeCycle2Slope CapFadeCycle2Intercept,Qd2、AvgChargeTime MinIR IRDiff2And100);结束

另请参阅

相关的话题