前言
准确地预测光伏发电出力对于电力系统运营和稳定性至关重要。随着预测技术的不断进步,越来越多的研究者逐渐意识到遗传算法在优化神经网络在新能源出力预测中的潜力。遗传算法是一种模拟生物进化过程的优化算法,通过不断迭代和选择,搜索最优解。神经网络则是一种模仿生物神经系统的计算模型,具有学习和适应能力。将这两种算法结合起来,可以充分利用神经网络的强大预测能力,并通过遗传算法对其参数进行调整,进一步提高预测的精确度。
GA+BP预测原理
在光伏发电预测中,遗传算法优化神经网络的基本原理是通过不断地调整神经网络的权重和阈值,从而使得神经网络的输出与实际光伏发电出力之间的误差最小化。遗传算法通过种群的交叉、变异和选择等基本操作,模拟了生物进化的过程,从而找到最优解。在每一次迭代中,根据预测结果与实际结果的误差,对神经网络的参数进行调整,以期望使得误差越来越小,预测结果越来越准确。
数据预处理
本研究采用某地区光伏发电输出功率预测数据,截取每天07:00-18:00时刻数据作分析,输出为实际发电功率和预测出力。我们首先对数据进行预处理,将所有输入数据特征进行数据标准化,去除量纲,便于一致性分析,然后采取灰色关联度分析筛选其中与输出实际发电功率相关程度更高的变量特征,降低整体计算的复杂度,同时能提高模型的精度.
遗传算法
遗传算法(GA)是模拟生物进化进行个体的选择、交叉和变异的一种算法,它的主要核心是参数编码、初始群的设定和适应函数的确定,然后通过最终的搜索得到最优解。本程序采用GA+优化神经网络训练时权值以及偏置的确定计算,优化改进模型流程如下图所示。
神经网络算法
人工神经元的研究起源于脑神经元学说。人们认识到复杂的神经系统是由数目繁多的神经元组合而成。大脑皮层包括有100亿个以上的神经元,每立方毫米约有数万个,它们互相联结形成神经网络,经过对信息的分析和综合,再通过运动神经发出控制信息,以此来实现机体与内外环境的联系。神经元包括细胞体、轴突和树突三部分。细胞体内有细胞核,突起的作用是传递信息。树突是作为引入输入信号的突起,而轴突是作为输出端的突起,它只有一个。人工神经网络首先要以一定的学习准则进行学习,然后才能工作。现以人工神经网络对于写"A"、"B"两个字母的识别为例进行说明,规定当"A"输入网络时,应该输出"1",而当输入为"B"时,输出为"0"。
所以网络学习的准则是:如果网络作出错误的的判决,则通过网络的学习,应使得网络减少下次犯同样错误的可能性。首先,给网络的各连接权值赋予(0,1)区间内的随机值,将"A"所对应的图象模式输入给网络,网络将输入模式加权求和、与门限比较、再进行非线性运算,得到网络的输出。在此情况下,网络输出为"1"和"0"的概率各为50%,也就是说是完全随机的。这时如果输出为"1"(结果正确),则使连接权值增大,以便使网络再次遇到"A"模式输入时,仍然能作出正确的判断。
如果输出为"0"(即结果错误),则把网络连接权值朝着减小综合输入加权值的方向调整,其目的在于使网络下次再遇到"A"模式输入时,减小犯同样错误的可能性。如此操作调整,当给网络轮番输入若干个手写字母"A"、"B"后,经过网络按以上学习方法进行若干次学习后,网络判断的正确率将大大提高。这说明网络对这两个模式的学习已经获得了成功,它已将这两个模式分布地记忆在网络的各个连接权值上。当网络再次遇到其中任何一个模式时,能够作出迅速、准确的判断和识别。一般说来,网络中所含的神经元个数越多,则它能记忆、识别的模式也就越多。
程序介绍
程序利用遗传算法和BP神经网络的交叉混合算法实现对某地区光伏出力预测,数据为该地区每天07:00-18:00时刻的光伏出力,输出结果包括为每个算法的预测精度,预测误差、不同算法性能对比、光伏预测出力和实际出力。程序中算例丰富,注释清晰,干货满满,创新性和可扩展性很高,足以撑起一篇高水平论文!下面对程序做简要介绍!
程序适用平台:Matlab
程序结果
部分程序
Matlab
p=day(1:59913,1:3)';
t=day(1:59913,4)'
;
[pn,ps]=mapminmax(p);
[tn,ts]=mapminmax(t);
input_test=day(59914:59956,1:3)';
output_test=day(59914:59956,4)'
;
inputn_test=mapminmax('apply',input_test,ps);
ne=newff(minmax(pn),[S1,1],{'tansig','purelin'},'trainlm');
net.trainParam.show=10;
net.trainParam.epochs=150;
net.trainParam.goal=0.00001;
net.trainParam.lr=0.6;
[net,tr]=train(net,pn,tn);
s_bp=sim(net,inputn_test);
BPoutput=mapminmax('reverse',s_bp,ts);
部分内容源自网络,侵权联系删除!
欢迎感兴趣的小伙伴关注并私信获取完整版代码,小编会不定期更新高质量的学习资料、文章和程序代码,为您的科研加油助力!