优化粒子群算法实现VMD分解参数优化
56_基于改进的粒子群算法实现vmd分解参数优化。 matlab环境2018a及以上版本。 可用于学习粒子群算法的改进以及粒子群算法的使用。 1.考虑到传统粒子群算法中固定的权值容易使算法陷入局部最优解针对这一缺点从惯性权重和学习因子两方面进行改进。 较大的惯性权重可以使算法不易陷入局部最优便于全局搜索而在迭代后期较小的惯性权重有利于局部搜索。 2.对vmd算法的分解层数和惩罚因子进行优化。 3.采用近似熵作为适应度函数粒子数量为30进行优化结果如商品页图所示。 可看出改进的粒子群算法虽然收敛速度小于原算法但有最小的适应度值。 附带一份数据可以查看数据格式来调整你的数据最后使用代码运行。直接上干货。今天聊一个挺有意思的东西——用魔改版粒子群算法PSO优化VMD分解参数。搞信号处理的应该都知道VMD这玩意儿对分解层数K和惩罚因子α敏感得要命参数没选好就跟抽盲盒似的。先说说为啥要动粒子群。传统PSO那套固定惯性权重的操作经常卡在局部最优出不来。咱们的思路是从两个地方下手惯性权重改成动态调整学习因子也搞成自适应模式。就像开车前期猛踩油门找路快到了就得轻点刹车慢慢挪。56_基于改进的粒子群算法实现vmd分解参数优化。 matlab环境2018a及以上版本。 可用于学习粒子群算法的改进以及粒子群算法的使用。 1.考虑到传统粒子群算法中固定的权值容易使算法陷入局部最优解针对这一缺点从惯性权重和学习因子两方面进行改进。 较大的惯性权重可以使算法不易陷入局部最优便于全局搜索而在迭代后期较小的惯性权重有利于局部搜索。 2.对vmd算法的分解层数和惩罚因子进行优化。 3.采用近似熵作为适应度函数粒子数量为30进行优化结果如商品页图所示。 可看出改进的粒子群算法虽然收敛速度小于原算法但有最小的适应度值。 附带一份数据可以查看数据格式来调整你的数据最后使用代码运行。看这段MATLAB核心代码% 动态惯性权重计算 w w_max - (w_max - w_min) * iter/Max_iter; % 学习因子非线性调整 c1 c1_start (c1_end - c1_start) * sin(pi*iter/(2*Max_iter)); c2 c2_start (c2_end - c2_start) * cos(pi*iter/(2*Max_iter));这里惯性权重w从0.9线性降到0.4前期大步探索后期精细开发。学习因子用三角函数搞了个非线性变化前期侧重个体经验c1大后期侧重群体智慧c2大比固定值灵活多了。重点来了适应度函数用近似熵ApEn衡量分解质量。这玩意儿比样本熵计算快适合迭代优化。注意数据得预处理% 数据标准化 input_data (input_data - mean(input_data))/std(input_data); % VMD参数范围设定 K_range [3, 8]; % 分解层数 alpha_range [100, 3000]; % 惩罚因子粒子初始化时每个粒子带着(K, alpha)这俩参数组合到处飞。有个坑要注意——VMD的K必须是整数得做取整处理% 粒子位置处理 K round(particle(1)); % 取整 alpha particle(2); % 连续值运行结果对比挺有意思。虽然改进版PSO收敛速度比传统版慢个十几代但最终适应度值能低20%左右。这说明算法确实在更仔细地搜索参数空间而不是急着收工。就像找钥匙虽然花的时间长点但真能找到最合适的那把。最后提醒下数据格式问题输入信号要是一维时序数据别搞混行和列。建议先用load命令测试下数据维度data load(your_data.txt); if size(data,2) 1 data data; % 转置成列向量 end代码跑起来之后重点关注K和alpha的优化轨迹。有时候会发现粒子在某个参数区间反复横跳这说明那个区间可能存在多个较优解这时候可能需要结合具体业务需求做权衡。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2477024.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!