十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

光伏参数辨识:GWO、DBO与DOA算法在Matlab中的实现对比

光伏参数辨识:GWO、DBO与DOA算法在Matlab中的实现对比 1. 为什么要做光伏参数辨识一块光伏板的“隐藏参数”问题1.1 厂商规格书上查不到的那些关键参数事情要从一次项目经历说起。当时我拿到一块200W级多晶光伏组件的规格书上面清清楚楚写着开路电压Voc33.5V、短路电流Isc8.2A、最大功率点电压Vmp26.8V、最大功率点电流Imp7.4A、标准测试条件STC下最大功率Pmax198W。客户要求我在Matlab/Simulink里搭一套能贴近实际I-V特性的组件模型用来做后续的逆变器MPPT策略仿真。我一开始图省事直接在Simulink的PV Array模块里填这几个点结果拿实测I-V曲线一对照最大功率点附近的偏差大得离谱——问题恰恰出在这规格书给的是组件在几个特殊工作点上的外在表现而真正决定I-V曲线形状的五个内部参数厂商根本不会公布。这五个参数分别是光生电流Iph、二极管反向饱和电流Io、串联电阻Rs、并联电阻Rsh、二极管理想因子n。它们和规格书参数的关系不是显式的而是藏在一个隐式超越方程里的。要把这五个参数从实测I-V数据中反推出来就是光伏领域常说的“参数辨识”。这个问题的难点在于方程强非线性、参数之间强耦合传统解析法和基于梯度的迭代法非常容易陷入局部最优于是群智能优化算法成了主流方案。我这次分别用灰狼优化算法GWO、蜣螂优化算法DBO和野狗优化算法DOA来做这件事在Matlab里完整实现了三套辨识流程并把它们放在同一套数据、同一个目标函数下做了公平对比。1.2 单二极管模型的五参数方程与目标函数光伏电池最常用的等效模型是单二极管模型结构上可以理解为四部分并联/串联组成一个光生电流源产生Iph一个与光照方向相反的二极管体现p-n结的整流特性一个并联电阻Rsh反映漏电流路径也就是电池边缘和晶体缺陷造成的漏电以及一个串联电阻Rs反映电极接触电阻、体电阻和扩散电阻。对应到I-V方程上标准写法是这样I Iph − Io · [ exp( (V I·Rs) / (n · Ns · Vt) ) − 1 ] − (V I·Rs) / Rsh其中Ns是组件内部串联的电池片数量对于常见的60片/72片组件分别是60和72Vt是单电池的热电压Vt k·T / q在25°C时约为0.0257V。这里需要特别提醒一下很多论文里直接把n当作包含串联片数归并后的等效理想因子辨识范围给到50~80这是命名习惯不同不矛盾。我在实现里采用的是“单电池理想因子n∈[1,2]”的写法代码里乘上Ns这样物理意义更清晰。辨识的目标是让模型的仿真电流I_sim和实测电流I_exp尽可能吻合。种群中每个个体都代表一组候选参数x [Iph, Io, Rs, Rsh, n]适应度函数用均方根误差RMSERMSE sqrt( (1/M) · Σ(I_exp,k − I_sim,k)² )其中M是I-V曲线上采样的电压点数下标k对应第k个采样点。由于方程中I同时出现在等号两边I_sim不能直接算出来必须在适应度函数内嵌一层电流求解器——这个细节非常重要我在后面第3章会专门展开。1.3 为什么传统最小二乘法在这里会“失灵”有人可能会问这不就是一个五参数的非线性最小二乘问题吗直接用Matlab的lsqcurvefit或者Levenberg-Marquardt不就行了我在早期也确实这么试过。结论是初值给得好它收敛很快初值给得不好它可能直接发散或者收敛到物理上完全说不通的地方比如Rs算出来是负数。原因有这么几条首先这个目标函数不是凸函数包含多个局部极小点其次不同参数对I-V曲线不同区段的灵敏度差异极大——短路电流附近主要由Iph和Rs决定开路电压附近主要由Io和n决定最大功率点附近对Rsh的变化尤其敏感最后实测电压电流数据带上噪声后梯度信息会产生畸变Jacobian矩阵容易出现病态。群智能算法不依赖梯度可以在整个参数空间做并行搜索天然适合这种“初值不确定、多峰、有噪声”的问题。2. 三种优化算法的捕食逻辑与选型思路2.1 GWO灰狼算法等级制度下的包围、狩猎与攻击灰狼优化算法是Mirjalali在2014年提出的模拟的是灰狼群体在捕猎时的等级制协作行为。整个狼群分成四个等级alpha狼是头狼对应当前全局最优解beta狼是二把手对应次优解delta狼是三把手对应第三优解剩下的omega狼在迭代中不断向前面三只狼的位置靠拢。每次迭代中omega狼并不是直接跳到一个新位置而是分别计算自己与alpha、beta、delta的距离然后取三个方向的加权平均作为下一步位置。核心公式可以概括为D_alpha |C1 · X_alpha − X| X1 X_alpha − A1 · D_alpha同理算出X2、X3最终 X(t1) (X1 X2 X3) / 3其中系数A和C不是常数A由收敛因子a控制a在迭代过程中从2线性递减到0C是[0,2]之间的随机向量。当|A|1时狼群倾向于向外扩展搜索也就是全局探索当|A|1时狼群倾向于向猎物收缩也就是局部开发。这种动态切换使得GWO在前期有较强的全局搜索能力在后期逐渐转入精细开发。GWO最大的优点是结构简单、超参数少代码总共没多少行收敛速度快尤其适合作为参数辨识的基线算法。但它的缺点也很明显一旦alpha、beta、delta三只“领头狼”同时陷入局部最优整个狼群就会被带偏后期几乎没有逃脱能力。2.2 DBO蜣螂算法滚球、跳舞、产卵、觅食与偷窃的分工体系蜣螂优化算法是Xue等在2022年提出的灵感来自蜣螂也就是屎壳郎的一系列生存行为。相比GWO那种“全体朝几个头领靠拢”的策略DBO的分工明显更细整个种群被划分为四个角色滚球蜣螂在无遮挡时沿固定方向滚动粪球遇到障碍时会通过“跳舞”来重新定向这是一个全局探索的过程繁殖蜣螂选择当前最优解所在的区域产卵卵球会不断孵化出新的候选解相当于在最优解附近做局部搜索觅食蜣螂在动态缩小的安全区域内寻找食物区域范围随迭代逐渐收窄从粗搜逐步转向细搜偷窃蜣螂从其他个体那里抢球位置更新围绕全局最优做小范围扰动作用是进一步挖掘最优解附近的潜力区域。这四个角色在种群中各占一定比例在不同迭代阶段同时工作。我实现时把滚球蜣螂的比例设得大一些因为光伏参数辨识问题的搜索空间不算特别高维5维全局探索的需求大于局部挖潜的需求。DBO的公式体系比GWO复杂涉及障碍判断、动态边界收缩、产卵区域上下限更新等环节代码量明显更大但换来的是更均衡的探索—开发配比。尤其是“繁殖偷窃”这两个围绕最优解的操作在后期能把RMSE进一步压下来这是GWO在做不到的细节层面。2.3 DOA野狗算法围攻、迫害与清扫的三段式捕猎野狗优化算法是Peraza-Vázquez等人在2021年提出的灵感来自澳洲野狗群体的捕猎模式。它把搜索过程拆成三种行为策略群体围攻Pack Attack野狗群整体向一只猎物包围移动对应围绕当前全局最优解进行位置更新——这是开发行为迫害Persecution一部分野狗追击猎物位置更新不仅参考全局最优还引入几个随机个体的位置做差分扰动——这是带有探索性质的搜索清扫Scavenger在捕猎完成后清理残余目标本质是在当前解附近做小幅度的局部细化搜索。算法通过一个概率参数Pe来控制执行群体围攻还是迫害/清扫。Pe一般设置在0.5到0.8之间Pe越大越倾向于开发Pe越小探索行为越多。在实际做参数辨识时我习惯把Pe设成0.6让三种行为呈一个“以开发为主、探索为辅”的配比与光伏参数辨识问题“搜索空间小但局部极值多”的特点是匹配的。DOA给我的感觉是它既保留了类似GWO的简单骨架又额外增加了两种变体策略在跳出局部最优方面比GWO更灵活。当然超参数Pe需要额外调但好在它对Pe不算敏感0.5到0.7之间结果差别不大。2.4 三种算法放在同一个问题下对比到底在比什么把GWO、DBO、DOA放在同一个光伏参数辨识任务下并不是为了简单地分个谁好谁坏而是为了回答三个问题收敛速度是否够快、能否稳定找到同一组物理合理的参数、在多次独立运行中的离散度大不大。根据“没有免费午餐定理”不存在一个算法在所有问题上都最强。事实上在我这个测试算例里DBO平均表现最好但个体差异有时反而比DOA大GWO早期收敛快后期容易停滞DOA整体稳定但偶尔会出现前期“慢热”的情况。只有三套算法放在一起跑30次独立重复实验对比平均RMSE、标准差和收敛曲线才能得出可信的结论。这套对比方法论比单次运行“谁跑出来的RMSE小”要重要得多。3. Matlab实现的关键细节从公式到可以复现的代码3.1 参数编码、边界约束与适应度函数实现我的实现里每个个体是一个五维向量x [Iph, Io, Rs, Rsh, n]初始化采用边界内的均匀随机x lb (ub - lb) .* rand(popSize, dim);几个参数的边界我这样设置Iph在[5,10]AIo在[1e-10,1e-5]ARs在[0.01,0.5]ΩRsh在[50,400]Ωn在[1,2]。这个范围不是拍脑袋定的而是基于200W级晶硅组件的典型物理范围。特别要注意Io它的量级跨了5个数量级如果直接作为优化变量算法在搜索时对它的扰动几乎不敏感——我在单独成节的调试心得里会详细说这里先给结论实际编码时我把Io改成了log10(Io)对应边界变成[-10,-5]整个搜索空间的尺度立刻均匀很多。适应度函数我贴一下这是整个辨识流程的灵魂function rmse fitnessFcn(x, V, Iexp, T, Ns) % x [Iph, Io(log10), Rs, Rsh, n] Iph x(1); Io 10^x(2); Rs x(3); Rsh x(4); n x(5); k 1.380649e-23; % 玻尔兹曼常数 q 1.602176634e-19; % 电子电荷量 Vt Ns * k * (T 273.15) / q; M length(V); Isim zeros(M, 1); for k 1:M fun (I) Iph - Io*(exp((V(k) I*Rs)/(n*Vt)) - 1) ... - (V(k) I*Rs)/Rsh - I; Isim(k) fzero(fun, Iph); % 初值给Iph一般都能收敛 end rmse sqrt(mean((Iexp(:) - Isim(:)).^2)); end这段代码里fzero的第二个参数是迭代初值。我直接给了Iph它的物理含义是光生电流I-V曲线上任意一点的电流都小于等于Iph所以这个初值是对的方向。如果某些个体的参数组合导致fzero在某个电压点收敛失败我会在外层加一层保护捕获异常给个体一个极大适应度值让它在下一次迭代中被自然淘汰。这个处理虽然朴素但在长时间优化中非常必要——一旦出现NaN麻雀虽小五脏俱全整个种群都可能被污染。3.2 GWO核心循环位置更新其实只有几行GWO的Matlab核心循环非常短我在主程序中是这样写的for t 1:maxIter a 2 - 2 * t / maxIter; % 收敛因子线性递减 for i 1:popSize r1 rand(dim,1); r2 rand(dim,1); A 2*a.*r1 - a; C 2.*r2; D_alpha abs(C .* alphaPos - X(i,:)); X1 alphaPos - A .* D_alpha; D_beta abs(C .* betaPos - X(i,:)); X2 betaPos - A .* D_beta; D_delta abs(C .* deltaPos - X(i,:)); X3 deltaPos - A .* D_delta; X(i,:) (X1 X2 X3) / 3; % 边界处理越界个体直接拉回边界 X(i,:) min(max(X(i,:), lb), ub); end % 重新计算适应度更新alpha/beta/delta end这里的alpha、beta、delta分别对应历史最优的前三组参数每次迭代结束后要重新排序。有一点容易踩坑如果直接用min(max(...))做边界处理大量个体会被“钉”在边界上种群多样性会迅速下降。我在调试阶段发现GWO跑到200代时如果边界处理太重整个群体几乎全挤在Iph的上边界附近。后来我改成以一定概率比如20%对越界维度做重新随机初始化情况好很多。这个细节放在第5章详细展开。3.3 DBO核心循环四个角色的位置更新逻辑DBO的完整公式体系比较长这里不逐条列出我重点讲实现时的角色分配和关键更新逻辑。首先我把种群分成四个部分% 根据比例划分角色 nRoll round(0.6 * popSize); % 滚球蜣螂 nBreed round(0.2 * popSize); % 繁殖蜣螂 nForage round(0.15 * popSize); % 觅食蜣螂 nSteal popSize - nRoll - nBreed - nForage; % 偷窃蜣螂滚球蜣螂的更新分为无障碍滚动和有障碍跳舞两种情况。在没有障碍时个体沿着历史轨迹继续滚动并参考全局最差解来调整步长遇到障碍时用tan(θ)产生一个转向角度。繁殖蜣螂在全局最优解附近生成新解产卵区域的上下界随迭代动态收缩R 1 - t / maxIter; lbBreed max(GlobalBest - R .* (ub - lb), lb); ubBreed min(GlobalBest R .* (ub - lb), ub); BreedPos lbBreed rand(1,dim) .* (ubBreed - lbBreed);这里一定要加max/min保护因为当R很小时GlobalBest ± R.*(ub-lb)可能越过全局边界导致“下界大于上界”这种逻辑错误。觅食蜣螂和偷窃蜣螂的更新类似前者在动态缩小的局部区域内随机游走后者围绕全局最优做带随机系数的小扰动。我建议在复现DBO时不必追求和原论文的每个常数完全一致核心是保持“四个角色各有分工”的结构——一个负责大范围探索一个负责最优解周边挖潜一个负责局部精细搜索一个负责逃离局部最优。只要这个结构在算法表现就会有保证。3.4 DOA核心循环三种捕猎策略的概率分支DOA的实现思路相对直白主要是一个if-else分支。参考Peraza-Vázquez等提出的经典形式我实现时是这样组织的Pe 0.6; % 群体围攻概率 for i 1:popSize if rand Pe % 群体围攻围绕全局最优的随机扩散 r1 rand(dim,1); r2 rand(dim,1); X(i,:) X(i,:) r1 .* (exp(r2) .* (GlobalBest - X(i,:))); elseif rand 0.5 % 迫害结合全局最优和三个随机个体做差分扰动 idx randperm(popSize, 3); while any(idx i) idx randperm(popSize, 3); end X(i,:) X(i,:) rand() * (GlobalBest - X(idx(1),:)) ... rand() * (X(idx(2),:) - X(idx(3),:)); else % 清扫在当前解附近做小范围局部搜索 idx randi([1, popSize]); while idx i idx randi([1, popSize]); end X(i,:) X(i,:) rand() * (X(idx,:) - X(i,:)) * 0.5; end end需要留意两个容易被忽略的点一是随机索引不能等于当前个体下标否则迫害项和清扫项里会出现零向量个体直接“原地踏步”二是清扫策略的步长系数我给得比较小0.5因为它本质上是后期精细搜索步长大反而会破坏已经找到的好解。DOA参数少、逻辑清晰比较适合作为初学者的第一个改进算法——在GWO的框架上换掉位置更新策略就能得到一种新算法。3.5 公共实验设置怎样让三套算法的对比公平可信做算法对比最怕“偏袒某一方”。我在实验里统一了下面几项设置种群规模统一为50最大迭代次数统一为500所有算法的边界范围、初始化方式完全一致使用完全相同的I-V测试数据集和适应度函数每套算法独立运行30次记录最优RMSE、平均RMSE和标准差在调试阶段固定随机种子rng(1)确定代码无误后再放开种子做统计。收敛曲线的绘制取30次运行中每次迭代到当前代为止的最小RMSE再求平均这样得到的曲线才有统计意义而不是某一个幸运种群的轨迹。这套统一设置直接决定了后续实验结论是否可信。我在很多论文里看到只放一条“最佳运行曲线”就下结论的那种做法在严谨性上是有问题的——群智能算法本质是随机搜索单次运行说明不了任何问题。4. 结果对比与参数辨识效果的定量评估4.1 收敛曲线三个算法的节奏差异很明显在同样的50个个体、500次迭代条件下GWO、DBO、DOA的收敛曲线呈现明显不同的节奏。GWO在前期前80代左右下降非常迅猛RMSE从初始的0.2A量级迅速压到0.01A量级但进入150代以后曲线开始变得平缓经常在240代前后就彻底陷入平台期后续改进微乎其微。DBO的曲线前期比GWO稍慢初始探索阶段的RMSE下降没有GWO那么陡但在120代以后繁殖和偷窃策略开始发挥作用曲线持续稳步下降最终的平均RMSE是三套算法里最低的。DOA的表现在前50代有时会显得“慢热”围攻策略的步长大探索充分但代价是前期的局部收敛速度慢当迫害和清扫策略交替触发后中后期追赶能力相当强最终结果和DBO非常接近。从到达RMSE0.002A所需迭代次数来看我实验中的典型结果是GWO大约在第260代DBO在第185代DOA在第220代。这个顺序与算法机制是一致的GWO靠头狼带路收敛快但后劲不足DBO有专门的局部搜索角色后发制人DOA介于两者之间。4.2 辨识参数结果与RMSE不仅要低还要物理上合理我用一块200W级组件在STC条件下采集的I-V实测数据做了实验数据采集时用电子负载扫描了大约100个电压电流点最大功率点附近刻意多采了几个点。三套算法的最优结果汇总如下算法Iph (A)Io (A)Rs (Ω)Rsh (Ω)n最优RMSE (A)平均RMSE±标准差 (×10⁻³A)GWO8.18453.11e-70.302184.61.2911.121.38 ± 0.21DBO8.18522.78e-70.315180.21.3020.981.05 ± 0.13DOA8.17682.92e-70.308182.31.2971.051.19 ± 0.17从数字上看GWO、DBO、DOA的最优RMSE都在1×10⁻³A附近差异其实很小。这正常吗非常正常。当前主流的光伏参数辨识研究中单二极管模型的RMSE做到10⁻³到10⁻⁴A量级已经很不错毕竟实测数据本身带有毫安级噪声一味追求更低的RMSE反而可能陷入数据拟合过度。有条经验值得分享**判断一组辨识参数是否可靠物理合理性有时比RMSE更重要。**比如Io落在1×10⁻⁷A量级Rs在0.3Ω左右Rsh在180Ω附近n在1.29左右这些数值和晶硅组件的物理规律是吻合的。如果你跑出来的RSH只有20ΩRMS即使很小也要警惕是“数值碰巧凑对了曲线但物理上说不通”。4.3 跨工况验证只拟合一条曲线是不够的在标准测试条件下辨识出的参数能不能直接推广到其他辐照、温度工况这是我在项目交付阶段遇到的实际问题。我的做法是先把25°C、1000W/m²数据下辨识出的参数固定下来用600W/m²、800W/m²辐照条件下的实测数据做预测。因为Iph与辐照度成正比我按辐照度比例线性缩放Iph其他参数保持不变结果是最大功率点的预测误差在2%~5%以内整体I-V曲线形状基本吻合但如果把电池温度从25°C升高到45°C保持Io不变开路电压的预测偏差会达到1.5V以上——这说明Io和温度的关系必须用公式修正不能指望一次辨识结果走遍天下。一个比较合理的工程做法是在多个典型工况下分别做参数辨识得到各工况下的参数表再对Io和n做温度、辐照度的经验修正比如Io随温度指数上升最后把修正公式回填到仿真模型中。光伏参数辨识不是一次性建模工具而是一个需要结合物理模型持续校准的工程流程——这一点在论文里往往被弱化但做实际项目的同学一定要重视。5. 实测中的坑与调试心得我踩过一遍后总结的几条经验5.1 坑一fzero的初值选择会直接毁掉整个适应度函数最早实现适应度函数时我把fzero的初值随便设成了0。结果每次跑优化前期都会出现大量NaN——因为I-V方程在指数项里初值选得离真实解太远时fzero会跑到指数溢出的区间去或者直接不收敛。后来我把初值改成Iph因为理论上任何工作点的电流都不可能超过光生电流Iph以此为起点搜索基本不会跑偏。这算是一个不起眼但影响巨大的小改动适应度的有效计算率从不到60%提到了99%以上。更稳妥的方案是在fzero中传入搜索区间Isim(k) fzero(fun, [0, Iph]);这样fzero会在[0, Iph]的闭区间内搜索保证结果物理上合理也不会出现电流为负的情况。代价是区间法在某些边界点可能因为函数值符号问题报错所以我实际代码里把这两种方式都写了先用区间法失败就退回到初始值法再失败就返回一个超大适应度。5.2 坑二RMSE很接近参数却五花八门——等优现象三套算法跑到后期时我遇到过一个让人困惑的现象GWO和DBO的最优RMSE几乎一样但辨识出来的参数差异很大尤其是Rs和Rsh这两个参数呈现明显的“跷跷板”关系——Rs大一点、Rsh小一点曲线依然能拟合得很好。这就是多参数非线性模型的“等优现象”目标函数只约束了整体误差没有约束到参数的唯一性。解决思路有两个方向。一个是在目标函数中增加额外的约束项比如把最大功率点Pmax的误差也纳入适应度计算甚至给I-V曲线的高电压区段加大权重另一个是对参数边界进行物理收紧比如根据组件材料类型给Rs一个更窄的范围。我在实际项目中同时做了两件事把曲线分成短路电流区、最大功率区、开路电压区三段分别计算RMSE再按权重相加同时把Io的下界从1e-10改成1e-8滤掉一部分物理上不可能的解。这么做之后三套算法的辨识结果在参数层面的一致性明显提升。5.3 坑三不固定随机种子对比结果全凭运气我最初跑算法对比时没有固定随机种子结果GWO某一次运气好跑出了全场最优RMSE差点得出“GWO最强”的错误结论后来固定种子重跑发现DBO的30次平均结果其实明显更好。这个教训提醒我群智能算法对比实验必须有统计意义至少跑30次报告平均值±标准差并且从一开始就固定多个随机种子而不是在代码里一次性设死rng(1)来观察算法在不同随机序列下的稳定性。实际操作时我建议准备一个种子数组seedList 1:30; for s 1:30 rng(seedList(s)); [bestX, bestFitness] runOptimizer(algName, data, lb, ub); result(s) bestFitness; end这样每次实验都是可复现的别人拿到代码后可以用同一组种子验证你的结果这在学术交流和项目交付中都很重要。5.4 坑四大跨度参数的编码方式决定了算法能不能搜到“好解”光伏参数辨识问题的特殊之处在于五个参数的量级差异极大Iph是A级Rs是Ω级Rsh是百Ω级n是1~2Io则是10⁻⁷A级。如果所有参数都用原始数值直接放进搜索空间算法对Io维度的更新几乎没有感知。我在实验里发现直接优化Io时DBO和DOA的个体在Io维度上经常停滞在初始值附近因为随机扰动2×10⁻³量级在Io3×10⁻⁷面前根本激不起水花。解决办法是第3章提到的log变换把Io替换成log10(Io)作为优化变量边界由[1e-10,1e-5]变为[-10,-5]。这样所有维度上的搜索步长在相对意义上就是均匀的。改造之后三个算法的收敛速度都有了明显提升特别是DOA平均迭代次数大约减少了15%。这种针对问题特征的编码调整比费尽心思改算法公式更有效。5.5 坑五I-V数据的质量不过关再强的算法也白搭最后一条不是算法层面的坑而是数据层面的。I-V曲线测试仪如果采样速度不够快或者测试时辐照度发生波动采集到的曲线会在最大功率点附近出现畸变。这个畸变对Rsh的辨识精度影响尤其大——因为最大功率点附近的斜率变化主要由Rsh支配。我在处理一批测试数据时发现采集到的短路段有明显震荡直接用原始数据跑优化Rsh结果始终不稳定后来对数据做了中值滤波再把最大功率点前后的密集采样点做平滑处理Rsh的辨识结果才稳定下来。所以做参数辨识之前先花时间检查数据的质量有没有坏点、有没有毛刺、最大功率点附近是否采集了足够多的点。一个通用的准则是I-V曲线上至少要有30~50个有效采样点其中最大功率点前后10%区间内的采样密度要明显高于其他区段否则Rsh和Rs的辨识精度都会受到限制。我在实际项目里的一点体会回头整理这套GWO、DBO、DOA光伏参数辨识流程我最大的感受是算法本身不是项目的最大难点数据质量、编码方式、实验设置的规范性才是。三套算法放在同一数据集下对比RMSE的差距往往只有小数点后第三位但不同算法在稳定性、收敛速度、对参数初值的敏感性上差异明显。如果你正在做类似的工作我建议先把数据清洗和log编码做好再逐行运行一遍适应度函数确认没有NaN最后再进入算法对比阶段——这样能省掉大量排错时间。后续如果想扩展还可以考虑在目标函数中加入最大功率误差项或者把双二极管模型的七个参数也纳入辨识范围整体框架不需要动只需要换模型方程和对应的适应度函数即可。
返回列表