💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
基于DBO、PSO、SSA、GOOSE算法优化ELM的电力负荷预测研究
⛳️赠与读者
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎
💥1 概述
基于DBO、PSO、SSA、GOOSE算法优化ELM的电力负荷预测研究
引言
电力负荷预测是电力系统运行和规划中的重要环节,它通过对历史负荷数据、气象数据、经济数据等多变量输入的分析,预测未来一段时间内电力负荷的变化趋势和具体数值。为了提升预测精度和稳定性,本文研究了基于差分进化蜣螂优化(DBO)、粒子群优化(PSO)、麻雀搜索算法(SSA)和鹅优化搜索(GOOSE)算法优化极限学习机(ELM)的电力负荷预测方法,实现了多变量输入超前多步预测。
创新点
-
多变量输入与超前多步预测结合:
传统电力负荷预测方法往往局限于单一变量输入或单步预测,本文提出的方法通过整合温度、湿度、风速、压强、降水量、能见度、水汽压、体感温度等多变量输入,实现超前多步预测,提高了预测的全面性和准确性。 -
多种智能优化算法结合ELM:
本文采用DBO、PSO、SSA、GOOSE四种不同的智能优化算法对ELM的权值和阈值进行优化,通过对比不同算法的优化效果,选取最优算法组合,进一步提升预测模型的性能。 -
模型优化策略创新:
在优化过程中,通过引入精英反向学习、指数形式改进的旅行距离率等策略,增强了算法的全局搜索能力和局部开发能力,提高了模型的稳定性和鲁棒性。
方法论
-
数据预处理:
对收集到的历史负荷数据、气象数据和经济数据进行清洗、归一化和平稳化处理,确保输入数据的质量和一致性。 -
模型构建与优化:
- ELM模型:构建基本的ELM模型,用于电力负荷预测。
- 优化算法:分别采用DBO、PSO、SSA、GOOSE算法对ELM的权值和阈值进行优化,寻找最优参数组合。
- 模型评估:通过基准函数测试、实例分析和实验对比,评估不同优化算法对ELM模型性能的提升效果。
-
多变量输入与超前多步预测:
- 输入变量选择:选取温度、湿度、风速、压强、降水量、能见度、水汽压、体感温度等多变量作为输入特征。
- 预测步骤:利用优化后的ELM模型,对超前多步的电力负荷进行预测。
-
模型验证:
将数据集划分为训练集、验证集和测试集,通过训练集训练模型,验证集调整超参数,测试集评估模型性能。采用均方误差(MSE)、平均绝对误差(MAE)、决定系数(R²)等指标评估预测结果。
实验结果与分析
实验结果表明,通过DBO、PSO、SSA、GOOSE算法优化后的ELM模型,在多变量输入超前多步预测中表现优异。其中,GOOSE算法在优化ELM权值和阈值时表现出最佳性能,预测精度和稳定性均有所提升。具体实验结果如下:
- 预测精度:优化后的ELM模型在多步预测中的MSE、MAE显著降低,R²显著提高。
- 稳定性:不同优化算法均能在一定程度上提升模型的稳定性,但GOOSE算法表现最为突出。
- 计算效率:尽管优化过程增加了计算复杂度,但整体预测效率仍满足实际应用需求。
结论与展望
本文提出的基于DBO、PSO、SSA、GOOSE算法优化ELM的电力负荷预测方法,在多变量输入超前多步预测中表现出色,有效提升了预测精度和稳定性。未来研究将进一步探索更多智能优化算法与ELM模型的结合,以及多源异构数据的融合策略,以应对更加复杂多变的电力负荷预测场景。同时,也将关注模型的可解释性和鲁棒性提升,为电力系统的安全稳定运行提供更加坚实的支撑。
📚2 运行结果
部分代码:
%% 调用DBO优化ELM
[score,bestchrom,DBO_trace]=DBO(pop_size, max_iter,lb,ub,dim,fobj );
[~,DBO_optimze_pre]=fun(bestchrom,inputnum,hiddennum,TYPE,activation,vp_train,vt_train,vp_test,T_test,ps_output);
disp('…………DBO优化的ELM测试集误差指标…………')
[mae1,mape1,test_MSE1,rmse1,Rsq1,test_RPD1]=calc_error(T_test,DBO_optimze_pre);
fprintf('\n')
%% 调用PSO优化ELM
[score,bestchrom,PSO_trace]=PSO(pop_size, max_iter,lb,ub,dim,fobj );
[~,PSO_optimze_pre]=fun(bestchrom,inputnum,hiddennum,TYPE,activation,vp_train,vt_train,vp_test,T_test,ps_output);
disp('…………PSO优化的ELM测试集误差指标…………')
[mae1,mape1,test_MSE1,rmse1,Rsq1,test_RPD1]=calc_error(T_test,PSO_optimze_pre);
fprintf('\n')
%% 调用SSA优化ELM
[score,bestchrom,SSA_trace]=SSA(pop_size, max_iter,lb,ub,dim,fobj );
[~,SSA_optimze_pre]=fun(bestchrom,inputnum,hiddennum,TYPE,activation,vp_train,vt_train,vp_test,T_test,ps_output);
disp('…………SSA优化的ELM测试集误差指标…………')
[mae1,mape1,test_MSE1,rmse1,Rsq1,test_RPD1]=calc_error(T_test,SSA_optimze_pre);
fprintf('\n')
%% 调用GOOSE优化ELM
[score,bestchrom,GOOSE_trace]=GOOSE(pop_size, max_iter,lb,ub,dim,fobj );
[~,GOOSE_optimze_pre]=fun(bestchrom,inputnum,hiddennum,TYPE,activation,vp_train,vt_train,vp_test,T_test,ps_output);
disp('…………GOOSE优化的ELM测试集误差指标…………')
[mae1,mape1,test_MSE1,rmse1,Rsq1,test_RPD1]=calc_error(T_test,GOOSE_optimze_pre);
fprintf('\n')
% 画各个算法的收敛曲线图
figure
plot(DBO_trace)
hold on
plot(PSO_trace)
hold on
plot(SSA_trace)
hold on
plot(GOOSE_trace)
hold off
legend('DBO','PSO','SSA','GOOSE')
xlabel('迭代次数')
ylabel('MAPE(%)')
%% 比较算法预测值 来自公众号《荔枝科研社》
str={'真实值','标准ELM','DBO-ELM','PSO-ELM','SSA-ELM','GOOSE-ELM'};
figure('Units', 'pixels', ...
'Position', [300 300 860 370]);
plot(T_test,'--*','LineWidth',2.5)
hold on
plot(T_sim0,'-.p')
hold on
plot(DBO_optimze_pre,'^-','Color',[0.1339 0.7882 0.8588],'LineWidth',1)
hold on
plot(PSO_optimze_pre,'s-','Color',[0.666 0.2882 0.8588],'LineWidth',1)
hold on
plot(SSA_optimze_pre,'v-','Color',[0.30 0.888 0.18],'LineWidth',1)
hold on
plot(GOOSE_optimze_pre,'x-','Color',[0.66 0.59 0.125],'LineWidth',1)
legend(str)
set (gca,"FontSize",12,'LineWidth',1.2)
box off
legend Box off
xlabel('样本点')
ylabel('负荷值')
%% 比较算法误差
test_y = T_test;
Test_all = [];
y_test_predict = T_sim0;
[test_MAE,test_MAPE,test_MSE,test_RMSE,test_R2]=calc_error(y_test_predict,test_y);
Test_all=[Test_all;test_MAE test_MAPE test_MSE test_RMSE test_R2];
y_test_predict = DBO_optimze_pre;
[test_MAE,test_MAPE,test_MSE,test_RMSE,test_R2]=calc_error(y_test_predict,test_y);
Test_all=[Test_all;test_MAE test_MAPE test_MSE test_RMSE test_R2];
y_test_predict = PSO_optimze_pre;
[test_MAE,test_MAPE,test_MSE,test_RMSE,test_R2]=calc_error(y_test_predict,test_y);
Test_all=[Test_all;test_MAE test_MAPE test_MSE test_RMSE test_R2];
y_test_predict = SSA_optimze_pre;
[test_MAE,test_MAPE,test_MSE,test_RMSE,test_R2]=calc_error(y_test_predict,test_y);
Test_all=[Test_all;test_MAE test_MAPE test_MSE test_RMSE test_R2];
y_test_predict = GOOSE_optimze_pre;
[test_MAE,test_MAPE,test_MSE,test_RMSE,test_R2]=calc_error(y_test_predict,test_y);
Test_all=[Test_all;test_MAE test_MAPE test_MSE test_RMSE test_R2];
str={'真实值','标准ELM','DBO-ELM','PSO-ELM','SSA-ELM','GOOSE-ELM'};
str1=str(2:end);
str2={'MAE','MAPE','MSE','RMSE','R2'};
data_out=array2table(Test_all);
data_out.Properties.VariableNames=str2;
data_out.Properties.RowNames=str1;
disp(data_out)
%% 柱状图 MAE MAPE RMSE 柱状图适合量纲差别不大的
color= [0.66669 0.1206 0.108
0.1339 0.7882 0.8588
0.1525 0.6645 0.1290
0.8549 0.9373 0.8275
0.1551 0.2176 0.8627
0.7843 0.1412 0.1373
0.2000 0.9213 0.8176
0.5569 0.8118 0.7882
1.0000 0.5333 0.5176];
figure('Units', 'pixels', ...
'Position', [300 300 660 375]);
plot_data_t=Test_all(:,[1,2,4])';
b=bar(plot_data_t,0.8);
hold on
for i = 1 : size(plot_data_t,2)
x_data(:, i) = b(i).XEndPoints';
end
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。
[1]徐晟,蒋铁铮,向磊.ELM算法在微电网超短期负荷预测的应用[J].电气开关, 2013, 51(3):5.DOI:10.3969/j.issn.1004-289X.2013.03.022.
[1]马立新,尹晶晶,郑晓栋.SOM特征提取与ELM在电力负荷预测中的应用[J].电力科学与工程, 2015, 31(5):5.DOI:10.3969/j.issn.16720792.2015.05.001.
[3]龙干,黄媚,方力谦,等.基于改进多元宇宙算法优化ELM的短期电力负荷预测[J].电力系统保护与控制, 2022, 50(19):99-106.
🌈4 Matlab代码、数据
资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取