发布时间 : 星期日 文章2011年电工杯数学建模全国一等奖论文更新完毕开始阅读
我们首先设置了种群的规模。根据输入数据的维数,我们设定种群的规模为10,进化次数为50次,交叉概率为0.4,变异概率为0.2。
3.2.1适应度函数
我们根据个体得到了BP神经网络的初始权值和阈值,用训练数据训练BP神经网络后预测系统输出,把预测输出和期望输出之间的绝对值和E作为个体适应度值F,计算公式如下:
?n?F?k??abs?yi?oi???i?1?
(32)
式中,n为网络输出节点数;yi为BP神经网络第i个节点的期望输出;oi为第i个节点的预测输出;k为系数。
3.2.2选择操作
我们接着定义了遗传算法的选择操作。我们选择轮盘赌法,即基于适应度比例的选择策略,每个个体i的选择概率pi为
fi?kFifiN (33)
pi??j?1fj (34)
式中,Fi为个体i的适应度值;由于适应度值越小越好,所以在个体选择之前对适应度值求倒数;k为系数;N为种群个体数目。
3.2.3交叉操作
我们接着定义了交叉操作。个体我们采用实数编码,所以交叉操作方法采用实数交叉法,第k个染色体ak和第l个染色体al在j位的交叉操作方法如下:
akj?akj?1?b??aijbalj?alj?1?b??akjb (35) (36)
式中,b是[0,1]区间的随机数。 3.2.4变异操作
选取第i个个体的第j个基因aij进行变异,变异的操作方法如下:
31
?aij?(aij?amax)?f(g)r?0.5 aij??a?(a?a)?f(g)r?0.5minij?ij (37)
其中,amax为基因aij的上界;amin为基因aij的下界;f(g)?r2(1?g/Gmax);
r2为一个随机数;g为当前迭代次数;Gmax是最大进化次数;r为[0,1]间的随
机数
3.2.5主函数 程序段代码如下
%去训练数据和预测数据 input_train=input'; output_train=output'; input_test=input_test'; %数据归一化
[inputn,inputps]=mapminmax(input_train); [outputn,outputps]=mapminmax(output_train); %构建网络
net=newff(inputn,outputn,8); %BP神经网络参数
net.trainParam.epochs=30; net.trainParam.lr=0.01; net.trainParam.goal=0.0000004; %BP神经网络训练·
net=train(net,inputn,outputn); %% BP网络预测 %预测输入数据归一化
inputn_test=mapminmax('apply',input_test,inputps); %网络预测输出
an=sim(net,inputn_test); %网络输出反归一化
BPoutput=mapminmax('reverse',an,outputps); %% 结果分析 figure(1)
32
plot(BPoutput,':og') holdon
plot(output_test,'-*');
legend('预测输出','期望输出','fontsize',12) title('BP网络预测输出','fontsize',12) [xx,~]=size(BPoutput);
plot(1:xx,BPoutput,1:xx,output_test) xlabel('样本','fontsize',12) ylabel('输出','fontsize',12) print-dtiff-r6004-3 %预测误差
error=BPoutput-output_test; figure(2) plot(error,'-*') title('神经网络预测误差') figure(3)
plot((output_test-BPoutput)./BPoutput,'-*'); title('神经网络预测误差百分比') errorsum=sum(abs(error))
3.3模型检验
我们利用建立的遗传神经网络模型分别对a时间段A号风力发电机功率、a时间段58台风力发电机总功率、b时间段B号风力发电机功率进行仿真,网络的训练结果如下图所示:
33
图(44)
b时间段58台风力发电机总功率进行仿真结果如下:
图(45)a时段A发电机功率预测曲线
34