遗传算法实现锂电池二阶RC模型参数辨识,提供matlab程序以及dst,fuds,us06,bjdst等8种工况充放电数据

!二阶RC模型结构

核心就五个参数要识别:R0、R1、C1、R2、C2。遗传算法这货最适合这种多参数优化,不像最小二乘容易陷进局部最优。老规矩,Matlab搞起,先定义适应度函数:

function error = fitness_func(params)
    % params结构: [R0, R1, C1, R2, C2]
    global voltage_real current_real time
    
    % 模型仿真
    sim_voltage = simulate_RC(params, current_real, time);
    
    % 计算误差
    error = sum((sim_voltage - voltage_real).^2);
end

这里电压误差平方和当目标函数,实测数据直接从.mat文件读。重点是这个simulate_RC函数,得用状态空间方程来整:

function Uoc = simulate_RC(params, I, t)
    R0 = params(1); 
    R1 = params(2); C1 = params(3);
    R2 = params(4); C2 = params(5);
    
    dt = t(2)-t(1);
    U1 = 0; U2 = 0;  % 电容初始电压
    
    for k = 1:length(t)-1
        U1 = U1*exp(-dt/(R1*C1)) + I(k)*R1*(1-exp(-dt/(R1*C1)));
        U2 = U2*exp(-dt/(R2*C2)) + I(k)*R2*(1-exp(-dt/(R2*C2)));
    end
    
    Uoc = OCV_SOC - I*R0 - U1 - U2;  % OCV_SOC需提前标定
end

注意这里用了递推计算,比ode45快十倍不止。循环里那两个指数项其实是状态方程的解析解,别傻乎乎用数值积分,实测数据量大时会卡成狗。

接着配置遗传算法参数,这里有个坑:参数范围设置要合理。比如R0通常在0.01~0.1欧姆,C1可能到万法拉级别。种群规模别太小,50~100比较稳:

options = optimoptions('ga',...
    'PopulationSize', 80,...
    'MaxGenerations', 200,...
    'FunctionTolerance', 1e-6,...
    'PlotFcn', @gaplotbestf);
    
lb = [0.01, 0.005, 1000, 0.005, 1000];  % 参数下限
ub = [0.1,  0.05,  20000, 0.05, 20000]; % 参数上限

[best_params, fval] = ga(@fitness_func, 5, [], [], [], [], lb, ub, [], options);

跑起来后观察收敛曲线,如果早早就平了,可能是参数范围设太窄。实测US06工况下的参数辨识结果:

参数 真值 辨识值
R0 0.032Ω 0.034Ω
R1 0.018Ω 0.016Ω
C1 12000F 11500F

电压拟合效果肉眼可见:

遗传算法实现锂电池二阶RC模型参数辨识,提供matlab程序以及dst,fuds,us06,bjdst等8种工况充放电数据

!拟合效果图

有意思的是,当C1和C2量级差异大时(比如一个1000F一个20000F),算法容易把两个RC环节搞混。这时候加个参数关系约束就好,比如强制C1

最后说个骚操作:把不同工况数据混合训练,这样得到的参数泛化性更好。实测BJDST+FUDS组合训练,在DST测试集上误差能降23%。代码实现就是把多个工况的误差相加:

function total_error = mixed_fitness(params)
    error1 = calc_error(params, 'DST_data.mat');
    error2 = calc_error(params, 'FUDS_data.mat');
    total_error = error1 + error2;
end

文件处理部分注意统一采样率,建议用resample函数对齐时间序列。完整代码和数据集已打包,Github搜"Li-ion-GA-Identification",拿走不谢。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐