光伏模型参数估计:山羊优化算法(Goat Optimization Algorithm, GOA)求解光伏模型参数辨识问题,免费提供完整MATLAB代码链接
一、太阳能光伏(PV)模型介绍
本文针对光伏参数估计问题,采用单二极管模型(SDM)、双二极管模型(DDM)、三二极管模型(TDM)、光伏组件模型(MM)四类主流模型,均基于电流-电压(I−VI-VI−V)非线性特性构建,以均方根误差(RMSE)为参数寻优目标函数。 下图中(a)~(d)分别为单二极管(SDM)、双二极管(DDM)、三二极管模型(TDM)和光伏组件模型(MM)。
参考文献:
[1] Gao S , Wang K , Tao S , et al. A state-of-the-art differential evolution algorithm for parameter estimation of solar photovoltaic models[J]. Energy Conversion and Management, 2021, 230:113784.
1 单二极管模型(Single Diode Model, SDM)
1.1 模型结构
单二极管模型由光生电流源IphI_{ph}Iph、单个二极管、串联电阻RsR_sRs、**并联电阻RshR_{sh}Rsh**构成,是工程最常用简化模型,结构简单、计算量小。
1.2 输出电流公式
输出电流ILI_LIL满足:
IL=Iph−Isd[exp(q(VL+RsIL)akT)−1]−VL+RsILRsh I_L = I_{ph} - I_{sd} \left[ \exp\left( \frac{q(V_L + R_s I_L)}{a k T} \right) - 1 \right] - \frac{V_L + R_s I_L}{R_{sh}} IL=Iph−Isd[exp(akTq(VL+RsIL))−1]−RshVL+RsIL
1.3 符号定义
- IphI_{ph}Iph:光生电流(A)
- IsdI_{sd}Isd:二极管反向饱和电流(μA)
- VLV_LVL:输出电压(V)
- RsR_sRs:串联电阻(Ω)
- RshR_{sh}Rsh:并联电阻(Ω)
- aaa:二极管理想因子
- q=1.60217646×10−19 Cq=1.60217646×10^{-19}\ \text{C}q=1.60217646×10−19 C:电子电荷量
- k=1.3806503×10−23 J/Kk=1.3806503×10^{-23}\ \text{J/K}k=1.3806503×10−23 J/K:玻尔兹曼常数
- TTT:电池绝对温度(K)
1.4 待估参数
共5个:X={Iph,Isd,Rs,Rsh,a}\boldsymbol{X}=\{ I_{ph}, I_{sd}, R_s, R_{sh}, a \}X={Iph,Isd,Rs,Rsh,a}
2 双二极管模型(Double Diode Model, DDM)
2.1 模型结构
在SDM基础上增加第二个二极管,分别模拟扩散电流与复合电流损耗,低辐照下精度更高。
2.2 输出电流公式
IL=Iph−Isd1[exp(q(VL+RsIL)a1kT)−1]−Isd2[exp(q(VL+RsIL)a2kT)−1]−VL+RsILRsh \begin{aligned} I_L =& I_{ph} - I_{sd1} \left[ \exp\left( \frac{q(V_L + R_s I_L)}{a_1 k T} \right) - 1 \right] \\ &- I_{sd2} \left[ \exp\left( \frac{q(V_L + R_s I_L)}{a_2 k T} \right) - 1 \right] - \frac{V_L + R_s I_L}{R_{sh}} \end{aligned} IL=Iph−Isd1[exp(a1kTq(VL+RsIL))−1]−Isd2[exp(a2kTq(VL+RsIL))−1]−RshVL+RsIL
2.3 符号定义
- Isd1I_{sd1}Isd1:扩散二极管饱和电流(μA)
- Isd2I_{sd2}Isd2:复合二极管饱和电流(μA)
- a1a_1a1:扩散二极管理想因子
- a2a_2a2:复合二极管理想因子
2.4 待估参数
共7个:X={Iph,Isd1,Isd2,Rs,Rsh,a1,a2}\boldsymbol{X}=\{ I_{ph}, I_{sd1}, I_{sd2}, R_s, R_{sh}, a_1, a_2 \}X={Iph,Isd1,Isd2,Rs,Rsh,a1,a2}
3 三二极管模型(Triple Diode Model, TDM)
3.1 模型结构
新增第三个二极管,模拟商用太阳能电池晶界泄漏电流,拟合精度最高但复杂度与计算量最大。
3.2 输出电流公式
IL=Iph−Isd1[exp(q(VL+RsIL)a1kT)−1]−Isd2[exp(q(VL+RsIL)a2kT)−1]−Isd3[exp(q(VL+RsIL)a3kT)−1]−VL+RsILRsh \begin{aligned} I_L =& I_{ph} - I_{sd1} \left[ \exp\left( \frac{q(V_L + R_s I_L)}{a_1 k T} \right) - 1 \right] \\ &- I_{sd2} \left[ \exp\left( \frac{q(V_L + R_s I_L)}{a_2 k T} \right) - 1 \right] \\ &- I_{sd3} \left[ \exp\left( \frac{q(V_L + R_s I_L)}{a_3 k T} \right) - 1 \right] - \frac{V_L + R_s I_L}{R_{sh}} \end{aligned} IL=Iph−Isd1[exp(a1kTq(VL+RsIL))−1]−Isd2[exp(a2kTq(VL+RsIL))−1]−Isd3[exp(a3kTq(VL+RsIL))−1]−RshVL+RsIL
3.3 符号定义
- Isd3I_{sd3}Isd3:第三二极管饱和电流(μA)
- a3a_3a3:第三二极管理想因子
3.4 待估参数
共9个:X={Iph,Isd1,Isd2,Isd3,Rs,Rsh,a1,a2,a3}\boldsymbol{X}=\{ I_{ph}, I_{sd1}, I_{sd2}, I_{sd3}, R_s, R_{sh}, a_1, a_2, a_3 \}X={Iph,Isd1,Isd2,Isd3,Rs,Rsh,a1,a2,a3}
4 光伏组件模型(PV Module Model, MM)
4.1 模型结构
由大量电池串/并联构成,以SDM为单元,考虑串联数NsN_sNs与并联数NpN_pNp。
4.2 输出电流公式
ILNp=Iph−Isd[exp(q(VL/Ns+RsIL/Np)akT)−1]−VL/Ns+RsIL/NpRsh \frac{I_L}{N_p} = I_{ph} - I_{sd} \left[ \exp\left( \frac{q(V_L / N_s + R_s I_L / N_p)}{a k T} \right) - 1 \right] - \frac{V_L / N_s + R_s I_L / N_p}{R_{sh}} NpIL=Iph−Isd[exp(akTq(VL/Ns+RsIL/Np))−1]−RshVL/Ns+RsIL/Np
4.3 符号定义
- NsN_sNs:串联电池数量
- NpN_pNp:并联电池组数
4.4 待估参数
共5个:X={Iph,Isd,Rs,Rsh,a}\boldsymbol{X}=\{ I_{ph}, I_{sd}, R_s, R_{sh}, a \}X={Iph,Isd,Rs,Rsh,a}
5 目标函数(参数估计误差)
以均方根误差RMSE作为优化目标,最小化模型计算值与实测值的偏差。
5.1 单组数据误差
- SDM:
fi(VL,IL,X)=Iph−Isd[exp(q(VL+RsIL)akT)−1]−VL+RsILRsh−IL f_i(V_L,I_L,X) = I_{ph} - I_{sd} \left[ \exp\left( \frac{q(V_L + R_s I_L)}{a k T} \right) - 1 \right] - \frac{V_L + R_s I_L}{R_{sh}} - I_L fi(VL,IL,X)=Iph−Isd[exp(akTq(VL+RsIL))−1]−RshVL+RsIL−IL - DDM:
fi(VL,IL,X)=Iph−Isd1[exp(q(VL+RsIL)a1kT)−1]−Isd2[exp(q(VL+RsIL)a2kT)−1]−VL+RsILRsh−IL \begin{aligned} f_i(V_L,I_L,X) =& I_{ph} - I_{sd1} \left[ \exp\left( \frac{q(V_L + R_s I_L)}{a_1 k T} \right) - 1 \right] \\ &- I_{sd2} \left[ \exp\left( \frac{q(V_L + R_s I_L)}{a_2 k T} \right) - 1 \right] - \frac{V_L + R_s I_L}{R_{sh}} - I_L \end{aligned} fi(VL,IL,X)=Iph−Isd1[exp(a1kTq(VL+RsIL))−1]−Isd2[exp(a2kTq(VL+RsIL))−1]−RshVL+RsIL−IL - TDM:
fi(VL,IL,X)=Iph−Isd1[exp(q(VL+RsIL)a1kT)−1]−Isd2[exp(q(VL+RsIL)a2kT)−1]−Isd3[exp(q(VL+RsIL)a3kT)−1]−VL+RsILRsh−IL \begin{aligned} f_i(V_L,I_L,X) =& I_{ph} - I_{sd1} \left[ \exp\left( \frac{q(V_L + R_s I_L)}{a_1 k T} \right) - 1 \right] \\ &- I_{sd2} \left[ \exp\left( \frac{q(V_L + R_s I_L)}{a_2 k T} \right) - 1 \right] \\ &- I_{sd3} \left[ \exp\left( \frac{q(V_L + R_s I_L)}{a_3 k T} \right) - 1 \right] - \frac{V_L + R_s I_L}{R_{sh}} - I_L \end{aligned} fi(VL,IL,X)=Iph−Isd1[exp(a1kTq(VL+RsIL))−1]−Isd2[exp(a2kTq(VL+RsIL))−1]−Isd3[exp(a3kTq(VL+RsIL))−1]−RshVL+RsIL−IL - MM:
fi(VL,IL,X)=Iph−Isd[exp(q(VL/Ns+RsIL/Np)akT)−1]−VL/Ns+RsIL/NpRsh−ILNp f_i(V_L,I_L,X) = I_{ph} - I_{sd} \left[ \exp\left( \frac{q(V_L / N_s + R_s I_L / N_p)}{a k T} \right) - 1 \right] - \frac{V_L / N_s + R_s I_L / N_p}{R_{sh}} - \frac{I_L}{N_p} fi(VL,IL,X)=Iph−Isd[exp(akTq(VL/Ns+RsIL/Np))−1]−RshVL/Ns+RsIL/Np−NpIL
5.2 总体RMSE公式
RMSE(X)=1N∑i=1Nfi(VL,IL,X)2 RMSE(X) = \sqrt{\frac{1}{N} \sum_{i=1}^N f_i(V_L,I_L,X)^2} RMSE(X)=N1i=1∑Nfi(VL,IL,X)2
- NNN:实验数据点数
6 模型对比总结
| 模型 | 二极管数 | 待估参数 | 精度 | 复杂度 | 适用场景 |
|---|---|---|---|---|---|
| SDM | 1 | 5 | 中 | 低 | 通用工程、快速仿真 |
| DDM | 2 | 7 | 高 | 中 | 低辐照、高精度需求 |
| TDM | 3 | 9 | 最高 | 高 | 大面积工业硅电池 |
| MM | 1(组串) | 5 | 高 | 中 | 实际光伏组件系统 |
二、山羊优化算法
山羊优化算法(Goat Optimization Algorithm, GOA)是2025年提出的一种新型生物启发式元启发式算法,灵感来源于山羊在恶劣和资源有限环境中的适应性行为。该算法旨在通过模拟山羊的觅食策略、移动模式和躲避寄生虫的能力,有效平衡探索和开发,以解决全局优化问题。
参考文献:
[1]nozari, hamed, and Agnieszka Szmelter-Jarosz. “Goat Optimization Algorithm: A Novel Bio-Inspired Metaheuristic for Global Optimization.” Applied Innovations in Industrial Management (AIIM), 2025.
原文链接:https://blog.csdn.net/weixin_46204734/article/details/146115384
三、算法求解及部分结果
close all
clear
clc
addpath('Benchmark_Solar_Cell');
func_flag=2;%1-6(共有6种模型,对应论文里面的6种模型)
fobj = @(x)evaluate_normal_fitness(x,func_flag);
Prfobj = @(x)Prevaluate_normal_fitness(x,func_flag);
[lb,ub,Dim]=PV_Xrange(func_flag);
SearchAgents_no=30; % 种群大小(可以修改)
Max_iteration=200; % 最大迭代次数(可以修改)
Result=Prfobj(bestX);
Result.curve=curve;
save Result Result %保存结果
%% 显示结果
display(['算法获得的最佳参数为:', num2str(bestX)]);
display(['算法获得的RMSE为:', num2str(fMin)]);
%% 画图
plotFigure;%画图
(1)模型一求解结果:





(2)模型二求解结果:





结果说明:
Pre_I为算法的预测电流
actual_I是真实电流
actual_V_data是真实电压
Pre_P是预测功率
actual_P是真实功率
AbsError是真实电流与预测电流的绝对误差
x是算法优化得到的最佳参数
curve是算法的收敛曲线,即RMSE随迭代次数的曲线图
MeanError是算法获得的RMSE
四、私信/点击下方名片免费获取完整MATLAB代码链接
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)