【数据预测】基于白鲸优化算法BWO的VMD-KELM光伏发电功率预测 短期功率预测【Matlab代码#54】

news2024/9/20 12:37:57

文章目录

    • 【可更换其他算法,`获取资源`请见文章第6节:资源获取】
    • 1. 白鲸优化算法BWO
    • 2. 变分模态分解VMD
    • 3. 核极限学习机KELM
    • 4. 部分代码展示
    • 5. 仿真结果展示
    • 6. 资源获取


【可更换其他算法,获取资源请见文章第6节:资源获取】


1. 白鲸优化算法BWO

白鲸优化算法详细介绍可参考BWO算法

2. 变分模态分解VMD

变分模态分解(Variational Mode Decomposition,简称VMD)是一种信号分解和降噪方法,用于从复杂的信号中提取出不同的成分或模态。

VMD是在2014年由Konstantin Dragomiretskiy和Dominique Zosso提出的。它基于变分原理,通过最小化信号的复杂度和不同成分之间的相互影响,将信号分解成多个固有模态(Intrinsic Mode Functions,简称IMFs)。IMFs是具有不同频率和振幅的函数,相当于将原始信号分解成一系列振动模态。

VMD适用于处理非线性和非平稳信号,例如振动信号、生物信号、地震信号、图像信号等。它在信号处理、振动分析、图像处理等领域有广泛的应用,特别是在提取信号中的隐含信息和去除噪声方面表现出色。

各个功率模态分量 u k u_{k} uk的频谱通过希尔伯特转换被传送至基带,并将其与一个指标对应的估计中心频率 w k w_{k} wk相对应,最终通过解调信号高斯平滑度来估算该带宽,从而将该约束的变分问题表达为:
在这里插入图片描述
式中, u k u_{k} uk代表第 k k k个功率模态分量; w k w_{k} wk代表功率模态分量的中心频率; δ ( t ) \delta (t) δ(t)代表单位冲击函数。同时,采用二次惩罚算子及拉格朗日乘子达到排除以上因素的限制的目的,将上面式子的最小化问题转变为下面式子的无约束优化问题。
在这里插入图片描述
式中, α \alpha α代表惩罚算子,在时间序列信号中混有噪声可保证其重构后的精度; λ \lambda λ代表拉格朗日的乘子; ⊗ \otimes 表示卷积算子。

随后更新功率模态分量 u k u_{k} uk,即:
在这里插入图片描述
式中, i i i n n n都是代表不同参数取得的任意值; ω \omega ω表示信号从时间域向 t t t频率域变换的符号; u ^ \hat{u} u^ f ^ ( ω ) \hat{f} (\omega ) f^(ω) λ ^ ( ω ) \hat{\lambda} (\omega) λ^(ω)是傅里叶变换后的 u {u} u f ( ω ) {f} (\omega ) f(ω) λ ( ω ) {\lambda} (\omega ) λ(ω)

最终,以上面式子同样的方式更新 ω k n + 1 \omega_{k}^{n+1} ωkn+1 λ k n + 1 \lambda_{k}^{n+1} λkn+1即可。

当满足特定的判别精度 δ \delta δ后,终止循环迭代。
在这里插入图片描述
式中, ε \varepsilon ε表示收敛进度。最终,将原功率序列分解为 k k k个窄频段IMF。

3. 核极限学习机KELM

KELM模型是在 ELM 的基础上延伸建立的,ELM 模型中的随机映射被替换成了核映射,通过把低维问题转换到完整的内积空间里解决,可以极大地减少网络的复杂性,与 ELM 相比具备更强的学习泛化能力和稳定性。

ELM算法采用随机生成各个神经元连接权值和阈值,这会导致算法的波动和不稳定,所以在ELM 算法中当映射函数 h ( x ) h(x) h(x)为未知时,引入了核函数,KELM 的数学描述如下:
在这里插入图片描述
式中, H H H表示隐含层输出矩阵; K ( x i , x j ) K(x_{i},x_{j}) K(xi,xj)表示核函数,本文采用RBF核函数,即:
在这里插入图片描述
式中, g g g为核参数。可以得到KELM的输出函数表达式为:
在这里插入图片描述
式中, β \beta β为输出权值矩阵; T T T为目标输出矩阵; I I I为单位矩阵; C C C为正则化系数。

综上,KELM的核参数 g g g和正则化系数 C C C是影响预测性能的重要因素,这也正是本文所使用的优化算法需要优化的两个参数。

4. 部分代码展示

%%  白鲸优化算法参数设置
% 优化参数的个数dim为2 。
% 目标函数
fun = @getObjValue; 

dim = 2;
% 优化参数的取值上下限(正则化系数C 核函数参数矩阵g )
lb = [25 2];
ub = [60 5];

%%  参数设置
pop =20; %种群数量
Max_iteration=100;%最大迭代次数             
%% 优化(调用函数)
[Best_pos,Best_score,Convergence_curve]=BWO(pop,Max_iteration,lb,ub,dim,fun);

x=Best_pos  ;                 %最优个体 
C = x(1);                    %正则化系数
Kernel_type = 'RBF';             %核函数名
Kernel_para = x(2);                    %核函数参数矩阵

%%
xunlian=[];
cesi=[];
for mode=1:K
    shuchu1 = uoutput(mode,:)';

    input_train =shuru(nn(1:geshu),:);input_train=input_train';
    output_train=shuchu1(nn(1:geshu),:);output_train=output_train';
    input_test =shuru(nn((geshu+1):end),:);input_test=input_test';
    output_test=shuchu1(nn((geshu+1):end),:);output_test=output_test';
    %%
    %样本输入输出数据归一化
    [aa,bb]=mapminmax([input_train input_test]);
    [cc,dd]=mapminmax([output_train output_test]);
    inputn=mapminmax('apply',input_train,bb);
    outputn=mapminmax('apply',output_train,dd);
    
    x_test=mapminmax('apply',input_test,bb);
    y_test=mapminmax('apply',output_test,dd);
    
    train_x=inputn;
    train_y=outputn;
    test_x=x_test;
    test_y=y_test ;
    
    [predict_trainy, predict_testy] = KELM(train_x,train_y,test_x,test_y, C, Kernel_type, Kernel_para);
    
    % 测试集
    test_s1=mapminmax('reverse',predict_testy,dd);%反归一化
    % 训练集
    train_s1=mapminmax('reverse',predict_trainy,dd);%反归一化

    xunlian=[xunlian;train_s1];
    cesi=[cesi;test_s1;];
end

5. 仿真结果展示

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

6. 资源获取

可以获取完整代码资源,可更换其他群智能算法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/822020.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue 2.x 项目升级到 Vue 3详细指南【总结版】

文章目录 0.前言1.升级教程1.1. 升级 Vue CLI:1.2. 安装 Vue 3:1.3. 更新 Vue 组件:1.4. 迁移全局 API:1.5. 迁移路由和状态管理器:1.6. 迁移 TypeScript:1.7. 迁移测试代码: 2.迁移总结2.0. 这…

C++类和对象(下部曲)

构造函数 1 构造函数体赋值 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值 虽然对象中已经有了一个初始值,但是不能将其称为对对象中成员变量的初始化 构造函数体中的语句只能将其称为赋初值,而…

十大排序|十大排序

稳定排序&#xff1a;冒泡排序、插入排序、归并排序、基数排序、桶排序 不稳定排序&#xff1a;选择排序、快速排序、希尔排序、堆排序 二、插入排序&#xff1a; 代码&#xff1a; #include<iostream> #include<cstdio> #include<stdlib.h> #include<ve…

真机搭建中小网络

这是b站上的一个视频&#xff0c;演示了如何搭建一个典型的中小网络&#xff0c;供企业使用 一、上行端口&#xff1a;上行端口就是连接汇聚或者核心层的口&#xff0c;或者是出广域网互联网的口。也可理解成上传数据的端口。 二、下行端口&#xff1a;连接数据线进行下载的端…

Vue源码学习 - 虚拟Dom 和 diff算法

目录 前言一、认识虚拟DOM用 JS 对象模拟 DOM 结构用JS对象模拟DOM节点的好处为什么要使用虚拟 DOM 呢&#xff1f;虚拟Dom 和 diff算法的关系 二、认识diff算法diff算法的优化key的作用diff算法 在什么时候执行&#xff1f; 三、深入diff算法源码patch 函数sameVnode 函数patc…

简要介绍 | 生成模型的演进:从自编码器(AE)到变分自编码器(VAE)和生成对抗网络(GAN),再到扩散模型

注1:本文系“简要介绍”系列之一,仅从概念上对生成模型(包括AE, VAE, GAN,以及扩散模型)进行非常简要的介绍,不适合用于深入和详细的了解。 生成模型的演进:从自编码器(AE)到变分自编码器(VAE)和生成对抗网络(GAN),再到扩散模型 一、背景介绍 生成模型在机器学习领域…

【Linux后端开发】poll/epoll多路转接IO服务器

目录 一、poll原理 二、poll实现多路转接IO服务器 三、epoll函数接口 四、epoll的工作原理 五、epoll实现多路转接IO服务器 一、poll原理 poll函数接口 #include <poll.h> int poll(struct pollfd *fds, nfds_t nfds, int timeout);// pollfd结构 struct pollfd …

搜索二叉树_SearchBinaryTree

目录 搜索二叉树的原理 搜索二叉树的搜索时间复杂度 二叉搜索树实现_key 模型 节点 构造函数 查找 中序遍历 插入 循环 递归 删除 循环 1.删除叶子节点 2.删除有一个孩子的节点 3.左右孩子都不为空 递归 析构函数 拷贝构造 operator key_value 模型 节点 …

JDBC-笔记

JDBC 1. JDBC介绍 JDBC&#xff08;Java Database Connectivity&#xff09;是一种用于连接和操作数据库的 Java API。 通过Java操作数据库的流程 第一步&#xff1a;编写Java代码 第二步&#xff1a;Java代码将SQL发送到MySQL服务端 第三步&#xff1a;MySQL服务端接收到SQ…

ems

【python爬虫】邮政包裹物流查询 目标网站 ems 邮政快递包裹查询: https://www.ems.com.cn/ 截图 接口预览 getPic请求滑动验证码的背景图片和滑块图片&#xff0c;返回的是base64编码的图片 getLogisticsTestFlag发送验证码的验证信息 xpos为滑动的距离&#xff0c;本站没…

CUDA编译器环境配置篇

cuda教程目录 第一章 指针篇 第二章 CUDA原理篇 第三章 CUDA编译器环境配置篇 第四章 kernel函数基础篇 第五章 kernel索引(index)篇 第六章 kenel矩阵计算实战篇 第七章 kenel实战强化篇 第八章 CUDA内存应用与性能优化篇 第九章 CUDA原子(atomic)实战篇 第十章 CUDA流(strea…

CHI中的System Debug, Trace, and Monitoring

Data Source indication □ Read request的completer&#xff0c;可以在CompData, DataSepResp, SnpRespData, and SnpRespDataPtl response中的datasource域段中指定data的来源&#xff1b;即使响应中带有错误&#xff0c;该datasource也是有效的&#xff1b; □ 该域段也可复…

Flutter 之Bloc入门指南实现倒计时功能

Flutter Timer By Bloc 前言Stream.periodic实现倒计时定义Bloc状态定义Bloc事件定义Bloc组件定义View层参考资料前言 使用Bloc开发Flutter的项目,其项目结构都很简单明确,需要创建状态,创建事件,创建bloc,创建对应的View。flutter_timer项目来分析下Bloc的使用方法。 通…

逻辑回归变量系数可为负数吗?应该如何解释?

之前很多学员来问逻辑回归变量系数是否都应该为正数&#xff0c;如果出现负的变量系数该怎么办&#xff1f;是否需要重新建模&#xff1f;这些学员都是在网上搜索时&#xff0c;被错误信息误导。网上信息可以随意转载&#xff0c;且无人审核对错。我见过最多情况时很多文章正确…

软工导论知识框架(三)结构化的设计

一.传统软件工程方法学采用结构化设计技术&#xff08;SD&#xff09; 从工程管理角度结构化设计分两步&#xff1a; 概要设计&#xff1a; 将软件需求转化为数据结构和软件系统结构。详细设计&#xff1a;过程设计&#xff0c;通过对结构细化&#xff0c;得到软件详细数据结构…

dubbo-helloworld示例

1、工程架构 2、创建模块 &#xff08;1&#xff09;创建父工程,引入公共依赖 pom.xml依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></depende…

MultipartFile 获取文件名、文件前缀、文件后缀、文件类型

测试 debug 方法 RequestMapping(value "/test",method RequestMethod.POST)public void fileUpload(MultipartFile file){// 文件名String originalFilename file.getOriginalFilename();// 文件名前缀String fileName file.getOriginalFilename().substring(0,…

第5讲:VBA中OFFSET函数的利用

【分享成果&#xff0c;随喜正能量】幸福从来不是跟别人比来的&#xff0c;追求不同&#xff0c;各有活法&#xff0c;开心了就笑&#xff0c;累了就休息&#xff0c;日子安稳踏实就是最大的幸福。做人就怕尊严扫地&#xff0c;保留一点做人的尊严&#xff0c;是人生最大的本钱…

C语言每日一题

今天分享的是一道牛客网上面的题目&#xff0c;链接在下面 有序序列合并 这道题做法有很多&#xff0c;最简单的是合并一起&#xff0c;然后用排序就行了&#xff0c;今天将一个最高效的办法&#xff0c;思路是两个数组第一项进行比较&#xff0c;小的先输出&#xff0c;输出的…

Mac上命令

1. block端口&#xff1a; sudo cp /etc/pf.conf /etc/pf443.conf 编辑pf443.conf&#xff0c;vim /etc/pf443.conf&#xff0c;如 block on en0 proto udp from any to any port 9000 # block UDP port 9000 block on en0 proto tcp from any to any port 5004 # bloc…