【风电功率预测】鲸鱼算法优化鲁棒极限学习机WOA-RELM风电功率预测【含Matlab源码 3511期】-程序员宅基地

技术标签: matlab  Matlab智能算法神经网络预测与分类(高阶版)  

在这里插入图片描述

一、鲸鱼算法优化鲁棒极限学习机风电数据预测

1 鲸鱼算法
一种元启发式优化算法,模拟座头鲸狩猎行为的元启发式优化算法。目前的工作与其他群优化算法相比的主要区别在于,采用随机或最佳搜索代理来模拟捕猎行为,并使用螺旋来模拟座头鲸的泡泡网攻击机制。该算法具有机制简单、参数少、寻优能力强等优点,在经济调度、最优控制、光伏系统、图像分割等方面得到广泛的应用。

2.1 算法基本原理
座头鲸有特殊的捕猎方法,这种觅食行为被称为泡泡网觅食法;标准 WOA 模拟了座头鲸特有的搜索方法和围捕机制,主要包括:围捕猎物、气泡网捕食、搜索猎物三个重要阶段。WOA 中每个座头鲸的位置代表一个潜在解,通过在解空间中不断更新鲸鱼的位置,最终获得全局最优解。

(1)围捕猎物(Encircling prey)
鲸鱼的搜索范围是全局解空间,需要先确定猎物的位置以便包围。由于最优设计在搜索速度中的位置不是先验已知的,因此WOA算法假定当前的最佳候选解是目标猎物或接近最优解。在定义了最佳搜索代理之后,其他搜索代理将尝试向最佳搜索代理更新它们的位置。

(2)气泡网捕食:
座头鲸捕食主要有两个机制:包围捕食和气泡网捕食。采用气泡网捕食时,座头鲸与猎物间的位置更新用对数螺旋方程表达.

(3)搜索猎物:
为保证所有鲸鱼能在解空间中充分搜索,WOA 根据鲸鱼彼此之间的距离来更新位置,达到随机搜索的目的。因此,当|A| ≥ 1|时,搜索个体会游向随机鲸。

2.2 算法基本流程
标准 WOA 主要依靠系数向量 A 选择搜索猎物的路径,并利用概率 p 决定最终捕食机制。
步骤 1:设置鲸鱼数量 N 和算法的最大迭代次数 tmax,初始化位置信息;
步骤 2:计算每条鲸鱼的适应度,找到当前最优鲸鱼的位置并保留,即 ;
步骤 3:计算参数 a、p 和系数向量 A、C。判断概率 p 是否小于 50%,是则直接转入步骤 4,否则采用气泡网捕食机制:利用式(2-1)进行位置更新;
步骤 4:判断系数向量 A 的绝对值是否小于 1,是则包围猎物:按式(1-2)更新位置;否则全局随机搜索猎物:按式(3-1)更新位置;
步骤 5:位置更新结束,计算每条鲸鱼的适应度,并与先前保留的最优鲸鱼的位置比较,若优于,则利用新的最优解替换;
步骤 6:判断当前计算是否达到最大迭代次数,如果是,则获得最优解,计算结束,否则进入下一次迭代,并返回步骤 3。
WOA算法首先随机初始化一组解,在每次迭代中,搜索代理根据随机选择的搜索代理或到目前为止获得的最优解更新它们的位置。将 a 参数由 2 随迭代次数降为 0,从而由探索逐步到利用。当 |A|>1 时选择随机搜索代理,|A|< 1时选择最优解更新搜索代理位置。根据 p 的值,WOA可以在螺旋运动和圆环运动之间进行切换。最后,通过满足终止准则来终止WOA算法。

2 鲁棒极限学习机
鲁棒极限学习机(Robust Extreme Learning Machine, RELM)是一种基于极限学习机(Extreme Learning Machine, ELM)的算法,用于实现数据分类任务。RELM通过引入鲁棒损失函数,提高了ELM在面对噪声和异常值时的鲁棒性能。

RELM的实现步骤如下:
(1)数据预处理:对原始数据进行预处理,包括数据清洗、特征选择和特征缩放等操作。
(2)构建输入矩阵:将预处理后的数据按照矩阵的形式表示,其中每一行代表一个样本的特征,每一列代表一个特征。
(3)随机初始化输入权重:随机生成输入层到隐藏层的权重矩阵,其中隐藏层的节点数可以根据经验或者交叉验证进行选择。
(4)计算隐藏层输出:使用ReLU(Rectified Linear Unit)激活函数计算隐藏层的输出,即将输入矩阵与输入权重矩阵相乘,并将结果进行非线性变换。
(5)求解输出权重:使用最小二乘法或者正则化方法求解输出权重矩阵,将隐藏层输出与样本的标签进行拟合。
(6)预测分类结果:使用求解得到的输出权重矩阵,将测试样本的特征与隐藏层输出进行相乘,并通过激活函数得到预测的分类结果。
(7)模型评估:使用评估指标(如准确率、精确率、召回率等)对模型进行评估,可以使用交叉验证等方法进行评估结果的稳定性。
通过以上步骤,可以使用RELM实现数据的分类任务。相比于传统的ELM算法,RELM在面对噪声和异常值时具有更好的鲁棒性能,可以提高分类模型的准确性和稳定性。

二、部分源代码

%% 初始化
clear
close all
clc
format shortg
warning off
addpath(‘func_defined’)

%% 读取读取
data=xlsread(‘数据.xlsx’,‘Sheet1’,‘A1:N252’); %%使用xlsread函数读取EXCEL中对应范围的数据即可

%输入输出数据
input=data(:,1:end-1); %data的第一列-倒数第二列为特征指标
output=data(:,end); %data的最后面一列为输出的指标值

N=length(output); %全部样本数目
testNum=15; %设定测试样本数目
trainNum=N-testNum; %计算训练样本数目

%% 划分训练集、测试集
input_train = input(1:trainNum,:)‘;
output_train =output(1:trainNum)’;
input_test =input(trainNum+1:trainNum+testNum,:)‘;
output_test =output(trainNum+1:trainNum+testNum)’;

%% 数据归一化
[inputn,inputps]=mapminmax(input_train,-1,1);
[outputn,outputps]=mapminmax(output_train);
inputn_test=mapminmax(‘apply’,input_test,inputps);

%% 获取输入层节点、输出层节点个数
inputnum=size(input,2);
outputnum=size(output,2);
disp(‘/’)
disp(‘极限学习机ELM结构…’)
disp([‘输入层的节点数为:’,num2str(inputnum)])
disp([‘输出层的节点数为:’,num2str(outputnum)])
disp(’ ')
disp(‘隐含层节点的确定过程…’)

%确定隐含层节点个数
%注意:BP神经网络确定隐含层节点的方法是:采用经验公式hiddennum=sqrt(m+n)+a,m为输入层节点个数,n为输出层节点个数,a一般取为1-10之间的整数
%在极限学习机中,该经验公式往往会失效,设置较大的范围进行隐含层节点数目的确定即可。

MSE=1e+5; %初始化最小误差
for hiddennum=10:20

%用训练数据训练极限学习机模型

[IW0,B0,LW0,TF,TYPE] = elmtrain(inputn,outputn,hiddennum);

%对训练集仿真
an0=elmpredict(inputn,IW0,B0,LW0,TF,TYPE);  %仿真结果
mse0=mse(outputn,an0);  %仿真的均方误差
disp(['隐含层节点数为',num2str(hiddennum),'时,训练集的均方误差为:',num2str(mse0)])

%更新最佳的隐含层节点
if mse0<MSE
    MSE=mse0;
    hiddennum_best=hiddennum;
end

end
disp([‘最佳的隐含层节点数为:’,num2str(hiddennum_best),‘,相应的均方误差为:’,num2str(MSE)])

%% 训练最佳隐含层节点的极限学习机模型
disp(’ ')
disp(‘RELM极限学习机:’)
[IW0,B0,LW0,TF,TYPE] = elmtrain(inputn,outputn,hiddennum_best);

%% 模型测试
an0=elmpredict(inputn_test,IW0,B0,LW0,TF,TYPE); %用训练好的模型进行仿真
test_simu0=mapminmax(‘reverse’,an0,outputps); % 预测结果反归一化
%误差指标
[mae0,mse0,rmse0,mape0,error0,errorPercent0]=calc_error(output_test,test_simu0);

%% 麻雀算法寻最优权值阈值
disp(’ ')
disp(‘WOA优化ELM极限学习机:’)
%初始化WOA参数
N=20; %初始种群规模
M=30; %最大进化代数
dim=inputnumhiddennum_best+hiddennum_best; %自变量个数
%自变量下限
lb=[-ones(1,inputnum
hiddennum_best) … %输入层到隐含层的连接权值范围是[-1 1] 下限为-1
zeros(1,hiddennum_best)]; %隐含层阈值范围是[0 1] 下限为0
%自变量上限
ub=ones(1,dim);
fobj =@(x) fitness(x,hiddennum_best, inputn, outputn, output_train, inputn_test ,outputps, output_test);
[bestX,Best_score,Convergence_curve]=WOA(N,M, lb, ub,dim,fobj);
%% 绘制进化曲线
figure
plot(Convergence_curve,‘r-’,‘linewidth’,2)
xlabel(‘进化代数’)
ylabel(‘均方误差’)
legend(‘最佳适应度’)
title(‘WOA的进化曲线’)

%% 优化后的参数训练RELM极限学习机模型
[IW1,B1,LW1,TF,TYPE] = elmtrain(inputn,outputn,hiddennum_best,bestX ); %IW1 B1 LW1为优化后的ELM求得的训练参数
hiddennum_best
%% 优化后的RELM模型测试
an1=elmpredict(inputn_test,IW1,B1,LW1,TF,TYPE);
test_simu1=mapminmax(‘reverse’,an1,outputps);

%误差指标
[mae1,mse1,rmse1,mape1,error1,errorPercent1]=calc_error(output_test,test_simu1);

%% 作图
figure
plot(output_test,‘b-.o’,‘linewidth’,2)
hold on
plot(test_simu0,‘g-s’,‘linewidth’,2)
hold on
plot(test_simu1,‘r-p’,‘linewidth’,2)
legend(‘真实值’,‘RELM预测值’,‘WOA-RELM预测值’)
xlabel(‘测试样本编号’)
ylabel(‘指标值’)
title(‘优化前后的RELM模型预测值和真实值对比图’)

figure
plot(error0,‘b-s’,‘markerfacecolor’,‘g’)
hold on
plot(error1,‘r-p’,‘markerfacecolor’,‘g’)
legend(‘RELM预测误差’,‘WOA-RELM预测误差’)
xlabel(‘测试样本编号’)
ylabel(‘预测偏差’)
title(‘优化前后的RELM模型预测值和真实值误差对比图’)

三、运行结果

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

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]赵侃,师芸,牛敏杰,王虎勤.基于改进麻雀搜索算法优化BP神经网络的PM2.5浓度预测[J].测绘通报. 2022(10)

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_63266434/article/details/134633155

智能推荐

使用nginx解决浏览器跨域问题_nginx不停的xhr-程序员宅基地

文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr

在 Oracle 中配置 extproc 以访问 ST_Geometry-程序员宅基地

文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc

Linux C++ gbk转为utf-8_linux c++ gbk->utf8-程序员宅基地

文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8

IMP-00009: 导出文件异常结束-程序员宅基地

文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束

python程序员需要深入掌握的技能_Python用数据说明程序员需要掌握的技能-程序员宅基地

文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求

Spring @Service生成bean名称的规则(当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致)_@service beanname-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname

随便推点

二叉树的各种创建方法_二叉树的建立-程序员宅基地

文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include&lt;stdio.h&gt;#include&lt;string.h&gt;#include&lt;stdlib.h&gt;#include&lt;malloc.h&gt;#include&lt;iostream&gt;#include&lt;stack&gt;#include&lt;queue&gt;using namespace std;typed_二叉树的建立

解决asp.net导出excel时中文文件名乱码_asp.net utf8 导出中文字符乱码-程序员宅基地

文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码

笔记-编译原理-实验一-词法分析器设计_对pl/0作以下修改扩充。增加单词-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词

android adb shell 权限,android adb shell权限被拒绝-程序员宅基地

文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限

投影仪-相机标定_相机-投影仪标定-程序员宅基地

文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定

Wayland架构、渲染、硬件支持-程序员宅基地

文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland

推荐文章

热门文章

相关标签