0 知识回顾
1 ACO-BP算法
传统的BP神经网络训练采用的是误差反向传播学习算法,它的优化目标函数相对复杂,较容易出现陷人局部最优、收敛速度慢等问题[6]。由于BP神经网络的训练算法实质上是对其网络权值和阈值进行迭代调整,因此用蚁群优化算法替代BP算法完成对神经网络权阈值的迭代调整,并最终完成神经网络的训练。
2 ACO-BP算法基本思路
蚁群算法解决优化问题的基本思路为:用蚂蚁的行走路径表示待优化问题的可行解,整个蚂蚁群体的所有路径构成待优化问题的解空间。路径较短的蚂蚁释放较多的信息素。经过一定时间,信息素浓度在较短的路径上累计较高,所有选择此路径的蚂蚁也逐渐增多,最终,整个蚁群会在正反馈的作用下集中在最佳路径上,此时对应的便是待优化问题的最优解。
首先根据权值和阈值的取值池间,将的E义以刘你以S个等长区间,即每个区间的长度被作s等分,将区间的临界值或选择区间中的随机值作为候选值。确定参数个数n,包括网络中所有的权阈值。每个参数Pi(i=1,2,…,n)对应个有S个元素的集合l, ,这些元素为Pi的可能取值。
3 具体步骤
1)参数初始化:将所有权值和阈值进行S等分,所有区间初始信息素О,信息素残留系教入,1后尽系代i,前区间信息表为Tabu,最大迭代次数C,网络全局误差E,最大学习次数N;
2)权值和阈值选择:蚁群m只蚂蚁,对于蚂蚁k依据概率公式(2)的寻路规则进行选择节点所在区间,蚁群迭代一次则完成一次解的构造:
式中为集合中第j个元素的信息素值;
3)蚁群寻优判断:蚁群迭代一次得到的构造解,则是当前迭代后得到误差最小的一组解,计算误差Ec ,判断是否达到蚁群要求,若是则转到4),否则转到5);
4)网络训练:将蚁群迭代得到的最优构造解,作为初始权值和阈值,选取数据集对网络进行训练,直到满足结束条件即最大学习次数,完成学习。否则,继续学习;
5)更新信息素:根据式(3)、式( 4)、式(5)对所有区间信息素全局更新,并重置信息表:
—
6)蚁群遍历:重复步骤2)到步骤3)。其算法如图1所示。
图1 ACO-BP算法流程图
4 Matlab代码实现
主函数
%% 清空环境变量 clc clear close all format compact %% 网络结构建立 %% 清空环境变量 clc clear close all format compact %% 网络结构建立 %读取数据 data=xlsread('天气_电量_数据.xlsx','C12:J70');%前7列为每个时刻的发电量 最后列为天气 for i=1:58 input(i,:)=[data(i,:) data(i+1,end)]; output(i,:)=data(i+1,1:7); end %% 节点个数 inputnum=9;%输入 前一天7个时刻的电量+前一天的天气+预测日的天气 hiddennum=5; outputnum=7;%预测日7个时刻的发电量 %% 训练数据和预测数据 最后一天用来测试 前面的都拿来训练 input_train=input(1:57,:)'; input_test=input(58,:)'; output_train=output(1:57,:)'; output_test=output(58,:)'; %选连样本输入输出数据归一化 [inputn,inputps]=mapminmax(input_train); [outputn,outputps]=mapminmax(output_train); inputn_test=mapminmax('apply',input_test,inputps); %% %构建网络 net=newff(inputn,outputn,hiddennum); %寻优 [bestnest,trace]=antforelm(inputnum,hiddennum,outputnum,net,inputn,outputn); figure plot(trace) title('适应度曲线') xlabel('迭代数') ylabel('适应度值') %% 把最优初始阀值权值赋予网络预测 x=bestnest; % 用CS优化的BP网络进行值预测 w1=x(1:inputnum*hiddennum); B1=x(inputnum*hiddennum+1:inputnum*hiddennum+hiddennum); w2=x(inputnum*hiddennum+hiddennum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum); B2=x(inputnum*hiddennum+hiddennum+hiddennum*outputnum+1:inputnum*hiddennum+hiddennum+hiddennum*outputnum+outputnum); net.iw{1,1}=reshape(w1,hiddennum,inputnum); net.lw{2,1}=reshape(w2,outputnum,hiddennum); net.b{1}=reshape(B1,hiddennum,1); net.b{2}=B2'; %% BP网络训练 %网络进化参数 net.trainParam.epochs=200; net.trainParam.lr=0.1; %net.trainParam.goal=0.00001; %网络训练 [net,per2]=train(net,inputn,outputn); %% BP网络预测 %数据归一化 inputn_test=mapminmax('apply',input_test,inputps); an=sim(net,inputn_test); test_simu=mapminmax('reverse',an,outputps); error=test_simu-output_test; %% figure a1=output_test; a2=test_simu; plot(a1,'*-');hold on plot(a2,'O-') title('各时刻发电量实际值与预测值') xlabel('') legend('原始数据','bp预测数据') set(gca,'XTick',1:7,... 'XTickLabel',{'9:00','10:00','11:00','12:00','13:00','14:00','15:00'},... 'TickLength',[0 0]); grid on ylabel('发电量(KW)')
5 运行结果
6 参考文献
[1]陈智雨,陆金桂.基于ACO-BP神经网络的光伏系统发电功率预测[J].机械制造与自动化,2020,49(01):173-175+187.DOI:10.19344/j.cnki.issn1671-5276.2020.01.047.
7 写在最后
部分理论引用网络文献,如有侵权请联系删除。