当前位置: 首页 > article >正文

时序预测 | Matlab实现PSO-Elman粒子群优化递归神经网络时间序列预测

时序预测 | Matlab实现PSO-Elman粒子群优化递归神经网络时间序列预测

目录

    • 时序预测 | Matlab实现PSO-Elman粒子群优化递归神经网络时间序列预测
      • 效果一览
      • 基本介绍
      • 程序设计
      • 参考资料

效果一览

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

基本介绍

Matlab实现PSO-Elman粒子群优化递归神经网络时间序列预测(完整源码和数据)

1.输入输出单个变量;

2.一维时间序列预测;

3.多指标评价,代码质量极高;excel数据,方便替换,运行环境2018及以上;

4.评价指标MAE、MSE、RMSE、MAPE、R2,代码质量极高,方便学习和替换数据;

5.要求2018版本及以上,优化神经网络单元数。

程序设计

%% 粒子群算法
function [Best_pos,Best_score,curve]=PSO(pop,Max_iter,lb,ub,dim,fobj,Vmax,Vmin)
%% 参数设置
w = 0.9;      % 惯性因子
c1 = 2;       % 加速常数
c2 = 2;       % 加速常数

Dim = dim;            % 维数
sizepop = pop;       % 粒子群规模
maxiter  = Max_iter;      % 最大迭代次数
if(max(size(ub)) == 1)
   ub = ub.*ones(1,dim);
   lb = lb.*ones(1,dim);  
end
fun = fobj; %适应度函数

%% 粒子群初始化
Range = ones(sizepop,1)*(ub-lb);
pop = rand(sizepop,Dim).*Range + ones(sizepop,1)*lb;    % 初始化粒子群
V = rand(sizepop,Dim)*(Vmax-Vmin) + Vmin;                 % 初始化速度
fitness = zeros(sizepop,1);
for i=1:sizepop
    fitness(i,:) = fun(pop(i,:));                         % 粒子群的适应值
end

%% 个体极值和群体极值
[bestf, bestindex]=min(fitness);
zbest=pop(bestindex,:);   % 全局最佳
gbest=pop;                % 个体最佳
fitnessgbest=fitness;              % 个体最佳适应值
fitnesszbest=bestf;               % 全局最佳适应值

%% 迭代寻优
iter = 0;
while( (iter < maxiter ))
    for j=1:sizepop
        % 速度更新
        V(j,:) = w*V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:));
        if V(j,:)>Vmax
            V(j,:)=Vmax;
        end
        if V(j,:)<Vmin
            V(j,:)=Vmin;
        end
        % 位置更新
        pop(j,:)=pop(j,:)+V(j,:);
        for k=1:Dim
            if pop(j,k)>ub(k)
                pop(j,k)=ub(k);
            end
            if pop(j,k)<lb(k)
                pop(j,k)=lb(k);
            end
        end
        % 适应值
        fitness(j,:) =fun(pop(j,:));
        % 个体最优更新
        if fitness(j) < fitnessgbest(j)
            gbest(j,:) = pop(j,:);
            fitnessgbest(j) = fitness(j);
        end
        % 群体最优更新
        if fitness(j) < fitnesszbest
            zbest = pop(j,:);
            fitnesszbest = fitness(j);
        end
    end
    iter = iter+1;                      % 迭代次数更新
    curve(iter) = fitnesszbest;
end
%% 绘图
Best_pos = zbest;
Best_score = fitnesszbest;
end


参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/129215161
[2] https://blog.csdn.net/kjm13182345320/article/details/128105718


http://www.kler.cn/a/408432.html

相关文章:

  • 产业用机器人中的旋转花键若损伤有何影响?
  • 解决Dcat Admin laravel框架登录报错问题,(blocked:mixed-content)
  • 硬中断关闭后的堆栈抓取方法
  • C++:用红黑树封装map与set-1
  • windows C#-取消任务列表(上)
  • 【layui】table的switch、edit修改
  • raw文件如何打开
  • shell编程之sed
  • 探索 Python 任务自动化的新境界:Invoke 库揭秘
  • 如何用Python统计Excel文件中的特定字段数量
  • 【Java系列】随机生成大小写混合的卡密
  • 大数取模 详解
  • Redis除了做缓存,还能做什么???
  • 密码系统设计实验3-2
  • SQLite 管理工具 SQLiteStudio 3.4.5 发布
  • C语言中的指针和字符串的赋值
  • 3.13MayBeSomeJava that are BUTTON and listener
  • 基于网页的大语言模型聊天机器人
  • java中的最小堆
  • 深入理解 Seata:分布式事务的最佳解决方案
  • Vue.js 学习总结(15)—— 如何快速删除 node_modules 依赖文件
  • springboot实战(17)(“大事件“——新增文章主体逻辑)
  • MySQL的DELETE(删除数据)详解
  • JavaSE 总复习:夯实基础,迈向进阶之路
  • LeetCode 4.寻找两个中序数组的中位数
  • 鸿蒙进阶篇-状态管理之@Provide与@Consume