【风电功率预测】基于matlab粒子群算法优化长短时记忆网络PSO-LSTM风电功率预测【含Matlab源码 941期】

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞💞💞💞💞💞💥💥💥💥💥💥
在这里插入图片描述
✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进;
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式

⛳️座右铭:行百里者,半于九十。
更多Matlab智能算法神经网络预测与分类仿真内容点击👇
Matlab神经网络预测与分类 (进阶版)
付费专栏Matlab智能算法神经网络预测与分类(中级版)
付费专栏Matlab智能算法神经网络预测与分类(初级版)

⛳️关注优快云海神之光,更多资源等你来!!

⛄一、粒子群算法及LSTM简介

1 粒子群算法简介
1.1 粒子群算法的概念
**
粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation)。源于对鸟群捕食的行为研究。粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共享来寻找最优解.
PSO的优势:在于简单容易实现并且没有许多参数的调节。目前已被广泛应用于函数优化、神经网络训练、模糊系统控制以及其他遗传算法的应用领域。

1.2 粒子群算法分析
1.2.1基本思想
粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。每个粒子在搜索空间中单独的搜寻最优解,并将其记为当前个体极值,并将个体极值与整个粒子群里的其他粒子共享,找到最优的那个个体极值作为整个粒子群的当前全局最优解,粒子群中的所有粒子根据自己找到的当前个体极值和整个粒子群共享的当前全局最优解来调整自己的速度和位置。下面的动图很形象地展示了PSO算法的过程:
在这里插入图片描述
1.2.2 更新规则
PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次的迭代中,粒子通过跟踪两个“极值”(pbest,gbest)来更新自己。在找到这两个最优值后,粒子通过下面的公式来更新自己的速度和位置。
在这里插入图片描述
公式(1)的第一部分称为【记忆项】,表示上次速度大小和方向的影响;公式(1)的第二部分称为【自身认知项】,是从当前点指向粒子自身最好点的一个矢量,表示粒子的动作来源于自己经验的部分;公式(1)的第三部分称为【群体认知项】,是一个从当前点指向种群最好点的矢量,反映了粒子间的协同合作和知识共享。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。以上面两个公式为基础,形成了PSO的标准形式。
在这里插入图片描述
公式(2)和 公式(3)被视为标准PSO算法。
1.2.3 PSO算法的流程和伪代码
在这里插入图片描述
2 LSTM简介
2.1 LSTM控制流程
LSTM的控制流程:是在前向传播的过程中处理流经细胞的数据,不同之处在于 LSTM 中细胞的结构和运算有所变化。
在这里插入图片描述
这一系列运算操作使得 LSTM具有能选择保存信息或遗忘信息的功能。咋一看这些运算操作时可能有点复杂,但没关系下面将带你一步步了解这些运算操作。

2.2 核心概念
LSTM 的核心概念在于细胞状态以及“门”结构。细胞状态相当于信息传输的路径,让信息能在序列连中传递下去。你可以将其看作网络的“记忆”。理论上讲,细胞状态能够将序列处理过程中的相关信息一直传递下去。
因此,即使是较早时间步长的信息也能携带到较后时间步长的细胞中来,这克服了短时记忆的影响。信息的添加和移除我们通过“门”结构来实现,“门”结构在训练过程中会去学习该保存或遗忘哪些信息。

2.3 Sigmoid
门结构中包含着 sigmoid 激活函数。Sigmoid 激活函数与 tanh 函数类似,不同之处在于 sigmoid 是把值压缩到 0~1 之间而不是 -1~1 之间。这样的设置有助于更新或忘记信息,因为任何数乘以 0 都得 0,这部分信息就会剔除掉。同样的,任何数乘以 1 都得到它本身,这部分信息就会完美地保存下来。这样网络就能了解哪些数据是需要遗忘,哪些数据是需要保存。
在这里插入图片描述
2.4 LSTM门结构
LSTM 有三种类型的门结构:遗忘门、输入门和输出门。
2.4.1 遗忘门
遗忘门的功能是决定应丢弃或保留哪些信息。来自前一个隐藏状态的信息和当前输入的信息同时传递到 sigmoid 函数中去,输出值介于 0 和 1 之间,越接近 0 意味着越应该丢弃,越接近 1 意味着越应该保留。
在这里插入图片描述
2.4.2 输入门
输入门用于更新细胞状态。首先将前一层隐藏状态的信息和当前输入的信息传递到 sigmoid 函数中去。将值调整到 0~1 之间来决定要更新哪些信息。0 表示不重要,1 表示重要。
其次还要将前一层隐藏状态的信息和当前输入的信息传递到 tanh 函数中去,创造一个新的侯选值向量。最后将 sigmoid 的输出值与 tanh 的输出值相乘,sigmoid 的输出值将决定 tanh 的输出值中哪些信息是重要且需要保留下来的。
在这里插入图片描述
2.4.3 细胞状态
下一步,就是计算细胞状态。首先前一层的细胞状态与遗忘向量逐点相乘。如果它乘以接近 0 的值,意味着在新的细胞状态中,这些信息是需要丢弃掉的。然后再将该值与输入门的输出值逐点相加,将神经网络发现的新信息更新到细胞状态中去。至此,就得到了更新后的细胞状态。
在这里插入图片描述
2.4.4 输出门
输出门用来确定下一个隐藏状态的值,隐藏状态包含了先前输入的信息。首先,我们将前一个隐藏状态和当前输入传递到 sigmoid 函数中,然后将新得到的细胞状态传递给 tanh 函数。
最后将 tanh 的输出与 sigmoid 的输出相乘,以确定隐藏状态应携带的信息。再将隐藏状态作为当前细胞的输出,把新的细胞状态和新的隐藏状态传递到下一个时间步长中去。
在这里插入图片描述
让我们再梳理一下。遗忘门确定前一个步长中哪些相关的信息需要被保留;输入门确定当前输入中哪些信息是重要的,需要被添加的;输出门确定下一个隐藏状态应该是什么。

⛄二、部分源代码

%%%% 基于粒子群算法优化lstm预测单序列
clc
clear all
close all
%加载数据,重构为行向量
%加载数据,重构为行向量
data =xlsread(‘台风日数据2’,‘Sheet1’,‘B2:E481’);%把你的负荷数据赋值给data变量就可以了。

%%

%序列的前 90% 用于训练,后 10% 用于测试
numTimeStepsTrain =round(0.8size(data,1));
dataTrain = data(1:numTimeStepsTrain,:)‘;
dataTest = data(numTimeStepsTrain+1:end-1,:)’;
numTimeStepsTest = size(data,1)-numTimeStepsTrain-1 ;%步数
%% 数据归一化
[dataTrainStandardized, ps_input] = mapminmax(dataTrain,0,1);
[dataTestStandardized, ps_output] = mapminmax(dataTest,0,1);
%输入LSTM的时间序列交替一个时间步
XTrain = dataTrainStandardized(2:end,:);
YTrain = dataTrainStandardized(1,:);
[dataTrainStandardized_zong, ps_input_zong] = mapminmax(data’,0,1);
XTest_zong = dataTrainStandardized_zong(2:end,end);%测试集输入
YTest_zong = dataTest(1,1)‘;%测试集输出
XTest = dataTestStandardized(2:end,:);%测试集输入
YTest = dataTest(1,:)’;%测试集输出
%%
%创建LSTM回归网络,指定LSTM层的隐含单元个数96
3
%序列预测,因此,输入一维,输出一维
numFeatures = 3;%输入层数
numResponses = 1;%输出层数
numHiddenUnits = 20*3;

layers = [ …
sequenceInputLayer(numFeatures)
lstmLayer(numHiddenUnits)
fullyConnectedLayer(numResponses)
regressionLayer];
%% 初始化种群
N = 5; % 初始种群个数
d = 1; % 空间维数
ger =100; % 最大迭代次数
limit = [0.001, 0.01;]; % 设置位置参数限制(矩阵的形式可以多维)
vlimit = [-0.005, 0.005;]; % 设置速度限制
c_1 = 0.8; % 惯性权重
c_2 = 0.5; % 自我学习因子
c_3 = 0.5; % 群体学习因子
for i = 1:d
x(:,i) = limit(i, 1) + (limit(i, 2) - limit(i, 1)) * rand(N, 1);%初始种群的位置
end
v = 0.005rand(N, d); % 初始种群的速度
xm = x; % 每个个体的历史最佳位置
ym = zeros(1, d); % 种群的历史最佳位置
fxm = 1000
ones(N, 1); % 每个个体的历史最佳适应度
fym = 1000; % 种群历史最佳适应度
%% 粒子群工作
iter = 1;
times = 1;
record = zeros(ger, 1); % 记录器
while iter <= ger
iter
for i=1:N
%指定训练选项,求解器设置为adam, 250 轮训练。
%梯度阈值设置为 1。指定初始学习率 0.005,在 125 轮训练后通过乘以因子 0.2 来降低学习率。
options = trainingOptions(‘adam’, …
‘MaxEpochs’,250, …
‘GradientThreshold’,1, …
‘InitialLearnRate’,x(i,:), …
‘LearnRateSchedule’,‘piecewise’, …
‘LearnRateDropPeriod’,125, …
‘LearnRateDropFactor’,0.1, …
‘Verbose’,0);
%训练LSTM
net = trainNetwork(XTrain,YTrain,layers,options);%训练网络
net = resetState(net);
net = predictAndUpdateState(net,XTrain);%
YPred1 = [];

    for mm = 1:numTimeStepsTest
        [net,YPred1(:,mm)] = predictAndUpdateState(net,XTest(:,mm),'ExecutionEnvironment','cpu');%%预测
    end
    mint=ps_output.xmin(1);
    maxt=ps_output.xmax(1);
    YPred=postmnmx(YPred1,mint,maxt);%反归一化
    
    for mm = 1:numTimeStepsTest
        
        if dataTest(2,mm)>25
            YPred(mm)=0;
        end
    end
    
    %使用先前计算的参数对预测去标准化。
    %计算均方根误差 (RMSE)。
    
    rmse = sqrt(mean((YPred-YTest').^2));%均方差
    fx(i) = rmse ; % 个体当前适应度
end
for i = 1:N
    if fxm(i) > fx(i)
        fxm(i) = fx(i);     % 更新个体历史最佳适应度
        xm(i,:) = x(i,:);   % 更新个体历史最佳位置
        YPred_best1=YPred;
    end
end
if fym > min(fxm)
    [fym, nmax] = min(fxm);   % 更新群体历史最佳适应度
    ym = xm(nmax, :);      % 更新群体历史最佳位置
    YPred_best=YPred_best1;
end
%%

clc
clear all
close all
%加载数据,重构为行向量
data =xlsread(‘台风日数据2’,‘Sheet1’,‘B2:E481’);%把你的负荷数据赋值给data变量就可以了。

%%

%序列的前 90% 用于训练,后 10% 用于测试
numTimeStepsTrain =round(0.8*size(data,1));
dataTrain = data(1:numTimeStepsTrain,:)‘;
dataTest = data(numTimeStepsTrain+1:end-1,:)’;
numTimeStepsTest = size(data,1)-numTimeStepsTrain-1 ;%步数
%% 数据归一化
[dataTrainStandardized, ps_input] = mapminmax(dataTrain,0,1);
[dataTestStandardized, ps_output] = mapminmax(dataTest,0,1);
%输入LSTM的时间序列交替一个时间步
XTrain = dataTrainStandardized(2:end,:);
YTrain = dataTrainStandardized(1,:);
[dataTrainStandardized_zong, ps_input_zong] = mapminmax(data’,0,1);
XTest_zong = dataTrainStandardized_zong(2:end,end);%测试集输入
YTest_zong = dataTest(1,1)‘;%测试集输出
XTest = dataTestStandardized(2:end,:);%测试集输入
YTest = dataTest(1,:)’;%测试集输出

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]崔星,李晋国,张照贝,李麟容.基于改进粒子群算法优化LSTM的短期电力负荷预测[J].电测与仪表.

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海神之光

有机会获得赠送范围1份代码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值