基于帝国竞争算法优化ELMAN实现数据预测matlab代码
作者:互联网
1 简介
风能,作为一种重要,有潜力,无污染,可再生、可持续的能源,已经成为全球发电最为迅速的能源之一,越来越受到世界各国的青睐。近年来,为缓解能源短缺问题,改善环境,实现经济乃至人类的可持续发展,世界各国纷纷大力发展风能资源。然而,在实际操作中,风能固有的波动性和间歇性通常会增加风能入网的难度,致使风电场输出功率不稳定,严重影响输出的电能质量,大大增加了电网安全性和稳定性运行风险,因此,风速预测在风电相关工作中至关重要,准确、可靠的预测结果不仅有利于调度人员事先掌握风电场的功率变化情况,及时制定调度运行计划,提高能量转换效率、降低风险,增加发电量等,同时也有利于风电并网稳定运行和有效消纳,对可能存在影响电网安全稳定运行的风险及时预警,从而避免风电功率随机波动造成电能损耗甚至电网崩溃。近年来,国内外学者进行了大量风速预测相关研究,风速预测水平得到一定程度的提升。单一预测模型虽简单容易实施,但其预测精度往往较低,难以满足风电场发电的需求。相比之下,基于优化算法和数据分解法的混合预测模型对风速预测性能有很大的提升。因此,这些模型往往会降低预测结果的稳定性,对风电场发电以及风电并网的安全性和稳定性带来巨大的挑战。针对如上问题,本文构建出一个基于帝国算法和Elman神经网络的混合预测模型,本文所提出的混合预测模型不仅可以降低预测误差,提高风速预测精度,增强预测结果的稳定性,同时对风电场发电的完善,发展以及风电并网安全管理也大有裨益。
Elman 神经网络是一种局部反馈递归神经网络,包括输入层、隐藏层、承接层和输出层,由于其良好的动态记忆和时变能力,自1990年Elman首次提出以来,Elman神经网络在时间序列预测中得到了广泛的应用,但由于随机选择初始值和阈值,且采用梯度下降法寻优,其网络学习速度较慢且预测的精度比较低。本文利用 ICA 优化 Elman神经网络的初始权值及阈值,提高了 Elman 神经网络的预测精度。
第一步 初始化 Elman 网络所需参数,并新建 Elman 网 络,net=newelm(minmax(input),[11,1],{'tansig','purelin'},'traingdx'),其中 input 是训练集数据,tansig 是隐藏层的激活函数,purelin是输出层激活函数,traingdx是梯度下降函数;
第二步 初始化ICA各参数,包括帝国的数量m 、最大迭代次数Maxiter,参数的上界ub及下界lb;
第三步 通过帝国算法不断迭代优化网络,直到迭代结束形成最优个体,其中最优个体包括权值w1、w2及w3,阈值b1和b2;
第四步 Elman 神经网络解析最优个体,利用解析后的权值及阈值训练Elman神经网络并预测风速数据。
2 部分代码
function Empires = CreateInitialEmpires(InitialCountries,InitialCost,AlgorithmParams, ProblemParams)
%帝国的位置
AllImperialistsPosition = InitialCountries(1:AlgorithmParams.NumOfInitialImperialists,:);
%帝国的成本,成本越低越好
AllImperialistsCost = InitialCost(1:AlgorithmParams.NumOfInitialImperialists,:);
%被殖民的国家的位置
AllColoniesPosition = InitialCountries(AlgorithmParams.NumOfInitialImperialists+1:end,:);
%被殖民的国家的成本
AllColoniesCost = InitialCost(AlgorithmParams.NumOfInitialImperialists+1:end,:);
%如果帝国中最高的成本大于0
if max(AllImperialistsCost)>0
AllImperialistsPower = 1.3 * max(AllImperialistsCost) - AllImperialistsCost;
else%如果帝国最高的成本小于0
AllImperialistsPower = 0.7 * max(AllImperialistsCost) - AllImperialistsCost;
end%成本越小的帝国将拥有越大的力量
%round四舍五入取整
%帝国依据自身的力量分配各自的殖民地数量
AllImperialistNumOfColonies = round(AllImperialistsPower/sum(AllImperialistsPower) * AlgorithmParams.NumOfAllColonies);
AllImperialistNumOfColonies(end) = AlgorithmParams.NumOfAllColonies - sum(AllImperialistNumOfColonies(1:end-1));
%randperm 将一列序号随机打乱,序号必须是整数。
%将被殖民的国家序号打乱
RandomIndex = randperm(AlgorithmParams.NumOfAllColonies);
%预分配内存,以便提高运算速度
Empires(AlgorithmParams.NumOfInitialImperialists).ImperialistPosition = 0;
for ii = 1:AlgorithmParams.NumOfInitialImperialists
Empires(ii).ImperialistPosition = AllImperialistsPosition(ii,:);%帝国的位置
Empires(ii).ImperialistCost = AllImperialistsCost(ii,:);%帝国的成本
R = RandomIndex(1:AllImperialistNumOfColonies(ii)); %帝国的殖民地
RandomIndex = RandomIndex(AllImperialistNumOfColonies(ii)+1:end);%更新殖民地索引
Empires(ii).ColoniesPosition = AllColoniesPosition(R,:);%帝国中殖民地的位置
Empires(ii).ColoniesCost = AllColoniesCost(R,:);%帝国中殖民地的成本
Empires(ii).TotalCost = Empires(ii).ImperialistCost + AlgorithmParams.Zeta * mean(Empires(ii).ColoniesCost);%整个帝国(帝国+其殖民地)的成本
end
for ii = 1:numel(Empires)% numel 返回数组个数
%如果有帝国的殖民地位置个数为0——没有殖民地
if numel(Empires(ii).ColoniesPosition) == 0
%创造一个殖民地国家
Empires(ii).ColoniesPosition = GenerateNewCountry(1,ProblemParams);
%计算该殖民地国家的成本
Empires.ColoniesCost = feval(ProblemParams.FunctionName,Empires.ColoniesPosition);
end
end
3 仿真结果
4 参考文献
[1]朱昶胜, 康亮河, and 冯文芳. "基于自适应鲸鱼优化算法结合Elman神经网络的股市收盘价预测算法." 计算机应用 40.5(2020):9.
[2]郭婉青, 叶东毅, GUOWanqing,等. 基于帝国分裂的帝国竞争算法优化[J]. 计算机应用, 2013, 33(A02):5.
标签:Empires,预测,AlgorithmParams,帝国,Elman,ELMAN,ii,算法,matlab 来源: https://blog.csdn.net/Matlab0111/article/details/122752474