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

文章目录

    • 【可更换其他算法,`获取资源`请见文章第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. 资源获取

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[CTF Re] easyxor.exe

1. 前言 这是adword的一道题目 2. 逆向过程 打开IDA先静态看一下 首先就是输入的flag中每个字符ch都要与key进行key[idx % 4] ^ ch的操作, idx是当前字符的索引。 比如经过这种加密后的结果为0x30, 也就是说是48, 那么在内存中就会有48个1和1个0。 总共在内存中需要有2560位…

13-4_Qt 5.9 C++开发指南_基于QWaitCondition 的线程同步_Wait

在多线程的程序中,多个线程之间的同步实际上就是它们之间的协调问题。例如上一小节讲到的3个线程的例子中,假设 threadDAQ 写满一个缓冲区之后,threadShow 和 threadSaveFile 才能对缓冲区进行读操作。前面采用的互斥量和基于 OReadWriteLock…

MySQL的使用——【初识MySQL】第二节

MySQL的使用——【初识MySQL】第二节 文章目录 MySQL环境变量的配置(如使用Navicat可忽略)使用命令行连接MySQL(如使用Navicat可忽略)步骤注意 NavicatNavicat的下载Navicat的使用连接MySQL新建表 总结总结 MySQL环境变量的配置&a…

Docker部署Springboot应用【mysql部署+jar部署+Nginx部署】

【项目达到目标】 1.基本准备 2、mysql部署 3、jar部署 4、Nginx部署 一、基本准备 石工拿的就是之前放置在我们服务器上的应用进行部署,主要就是mysql和jar还有Vue的部署。 目前已经有的是jar、已经打包好的vue 二、mysql部署 docker run -d --name mysql \ …

M1/M2 通过VM Fusion安装Win11 ARM,解决联网和文件传输

前言 最近新入了Macmini M2,但是以前的老电脑的虚拟机运行不起来了。😅,实际上用过K8S的时候,会发现部分镜像也跑不起来,X86的架构和ARM实际上还是有很多隐形兼容问题。所以只能重新安装ARM Win11,幸好微软…

2023-07-31 LeetCode每日一题(重排链表)

2023-07-31每日一题 一、题目编号 143. 重排链表二、题目链接 点击跳转到题目位置 三、题目描述 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为: L0 → Ln → L1 → Ln - 1 →…

RL— 深度强化学习简介

一、说明 深度强化学习是关于从我们看到和听到的东西中采取最好的行动。不幸的是,强化学习强化学习在学习概念和术语方面存在很高的障碍。在本文中,我们将介绍深度强化学习,并概述一般情况。然而,我们不会回避方程式和术语。它们提…

ES-5-进阶

单机 & 集群 单台 Elasticsearch 服务器提供服务,往往都有最大的负载能力,超过这个阈值,服务器 性能就会大大降低甚至不可用,所以生产环境中,一般都是运行在指定服务器集群中 配置服务器集群时,集…

idea中创建请求基本操作

文章目录 说明效果创建GET请求没有参数带有参数带有环境变量带有token信息创建post请求之上传文件 说明 首先通过###三个井号键来分开每个请求体,然后请求url和header参数是紧紧挨着的,请求参数不管是POST的body传参还是GET的parameter传参,都…

数据结构:线索二叉树

线索二叉树 通过前面对二叉树的学习,了解到二叉树本身是一种非线性结构,采用任何一种遍历二叉树的方法,都可以得到树中所有结点的一个线性序列。在这个序列中,除第一个结点外,每个结点都有自己的直接前趋;…

使用Python创建快速创建剪映草稿轨道,自动生成视频

使用Python创建快速创建剪映草稿轨道,自动生成视频 一、实现原理 实现原理 : JianYingPro 项目文件是 json 的形式存储的,只需要创建draft_content.json,draft_mate_info.json 打开软件后会自动补全。 作用:快速生成草稿,可以完…

formatter的用法,深拷贝, Object.assign 方法实战。

1. :formatter的用法 :formatter 接受一个函数作为参数&#xff0c;这个函数有三个参数&#xff1a;row&#xff0c;column 和 cellValue。row 是当前行的数据&#xff0c;column 是当前列的数据&#xff0c;cellValue 是当前单元格的值。 <el-table-column prop"SYS…

2021年全国硕士研究生入学统一考试管理类专业学位联考写作试题——解析版

四、写作&#xff1a;第56~57小题&#xff0c;共65分。其中论证有效性分析30分&#xff0c;论说文35分。请答在答题纸相应的位置上。 56.论证有效性分析&#xff1a;分析下述论证中存在的缺陷与漏洞&#xff0c;选择若干要点&#xff0c;写一篇600字左右的文章&#xff0c;对该…

STM32 CAN通讯实验程序

目录 STM32 CAN通讯实验 CAN硬件原理图 CAN外设原理图 TJA1050T硬件描述 实验线路图 回环实验 CAN头文件配置 CAN_GPIO_Config初始化 CAN初始化结构体 CAN筛选器结构体 接收中断优先级配置 接收中断函数 main文件 实验现象 补充 STM32 CAN通讯实验 CAN硬件原理图…

MyBatis查询数据库

1.MyBatis 是什么&#xff1f; MyBatis 是⼀款优秀的持久层框架&#xff0c;它⽀持⾃定义 SQL、存储过程以及⾼级映射。MyBatis 去除了几乎所有的 JDBC 代码以及设置参数和获取结果集的⼯作。MyBatis 可以通过简单的 XML 或注解来配置 和映射原始类型、接⼝和 Java POJO&#…

CMake:为Eigen库使能向量化

CMake:为Eigen库使能向量化 导言构建Eigen项目结构CMakeLists.txt相关源码 导言 本篇开始将涉及检测外部库相关的内容&#xff0c;期间会穿插着一些其他的内容。为了能够使得系统在系统中运行Eigen库&#xff0c;我们首先需要在系统中配置好Eigen库。然后介绍与Eigen库相关的C…

【C++】STL——vector的模拟实现、常用构造函数、迭代器、运算符重载、扩容函数、增删查改

文章目录 1.模拟实现vector1.1构造函数1.2迭代器1.3运算符重载1.4扩容函数1.5增删查改 1.模拟实现vector vector使用文章 1.1构造函数 析构函数 在C中&#xff0c;vector是一个动态数组容器&#xff0c;可以根据需要自动调整大小。vector类提供了几个不同的构造函数来创建和初…

java 版本企业招标投标管理系统源码,多个行业+及时准确+全程电子化

&#xfeff; 项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&am…

Electron 系统通知 Notification 实践指南

系统通知是桌面应用的常见功能&#xff0c;用于给用户发送提醒&#xff08;刷下存在感 &#x1f642;&#xff09;&#xff0c;还能帮定点击事件以便后续的操作。 Electron 自带通知模块&#xff0c;下方代码是一个简单的示例 const { Notification } require(electron)cons…

【C#教程】零基础从入门到精通

今天给大家分享一套零基础从入门到精通&#xff1a;.NetCore/C#视频教程&#xff1b;这是2022年最新整理的、590G的开发教程资料。课程涵盖了.Net各方面的知识&#xff0c;跟着这个教程学习&#xff0c;就足够了。 课程分类 1、C#从基础到精通教程&#xff1b; 2、Winform从…