时序预测 | MATLAB实现SO-ELM蛇群算法优化极限学习机时间序列预测

news2024/9/21 20:47:57

时序预测 | MATLAB实现SO-ELM蛇群算法优化极限学习机时间序列预测

目录

    • 时序预测 | MATLAB实现SO-ELM蛇群算法优化极限学习机时间序列预测
      • 效果一览
      • 基本介绍
      • 程序设计
      • 学习总结
      • 参考资料

效果一览

1

2
3

基本介绍

Matlab实现SO-ELM蛇群算法优化极限学习机时间序列预测
1.data为单变量时间序列数据集,运行环境Matlab2018b及以上。
2.运行主程序文件,其余为函数文件,无需运行。
3.命令窗口输出MAE、MBE和R2,可在下载区获取数据和程序内容。
4.Matlab蛇群算法优化极限学习机(SO-ELM)时间序列预测,优化参数为权值和阈值。

程序设计

  • 完整程序和数据下载方式1(资源处直接下载):MATLAB实现SO-ELM蛇群算法优化极限学习机时间序列预测

  • 完整程序和数据下载方式2(订阅《ELM极限学习机》专栏,同时可阅读《ELM极限学习机》专栏收录的所有内容,数据订阅后私信我获取):MATLAB实现SO-ELM蛇群算法优化极限学习机时间序列预测

  • 完整程序和数据下载方式3(订阅《智能学习》专栏,同时获取《智能学习》专栏收录程序5份,数据订阅后私信我获取):MATLAB实现SO-ELM蛇群算法优化极限学习机时间序列预测

  • SO.m

function [Best_pos, Best_score,curve] = SO(pop,Max_iter,lb,ub,dim,fobj)
%initial 
vec_flag=[1,-1];
Threshold=0.25;
Thresold2= 0.6;
C1=0.5;
C2=.05;
C3=2;
% if(max(size(ub)) == 1)
%    ub = ub.*ones(1,dim);
%    lb = lb.*ones(1,dim);
% end
X=initialization(pop,dim,ub,lb)
%X=lb+rand(pop,dim)*(ub-lb);
for i=1:pop
 fitness(i)=feval(fobj,X(i,:));   
end
[GYbest, gbest] = min(fitness);
Best_pos = X(gbest,:);
%Diving the swarm into two equal groups males and females
Nm=round(pop/2);%eq.(2&3)
Nf=pop-Nm;
Xm=X(1:Nm,:);
Xf=X(Nm+1:pop,:);
fitness_m=fitness(1:Nm);
fitness_f=fitness(Nm+1:pop);
[fitnessBest_m, gbest1] = min(fitness_m);
Xbest_m = Xm(gbest1,:);
[fitnessBest_f, gbest2] = min(fitness_f);
Xbest_f = Xf(gbest2,:);
for t = 1:Max_iter
    Temp=exp(-((t)/Max_iter));  %eq.(4)
  Q=C1*exp(((t-Max_iter)/(Max_iter)));%eq.(5)
    if Q>1        Q=1;    end
    % Exploration Phase (no Food)
if Q<Threshold
    for i=1:Nm
        for j=1:1:dim
            rand_leader_index = floor(Nm*rand()+1);
            X_randm = Xm(rand_leader_index, :);
            flag_index = floor(2*rand()+1);
            Flag=vec_flag(flag_index);
            Am=exp(-fitness_m(rand_leader_index)/(fitness_m(i)+eps));%eq.(7)
            Xnewm(i,:)=X_randm(j)+Flag*C2*Am*((ub-lb)*rand+lb);%eq.(6)
        end
    end
    for i=1:Nf
        for j=1:1:dim
            rand_leader_index = floor(Nf*rand()+1);
            X_randf = Xf(rand_leader_index, :);
            flag_index = floor(2*rand()+1);
            Flag=vec_flag(flag_index);
            Af=exp(-fitness_f(rand_leader_index)/(fitness_f(i)+eps));%eq.(9)
            Xnewf(i,:)=X_randf(j)+Flag*C2*Af*((ub-lb)*rand+lb);%eq.(8)
        end
    end
else %Exploitation Phase (Food Exists)
    if Temp>Thresold2  %hot
        for i=1:Nm
            flag_index = floor(2*rand()+1);
            Flag=vec_flag(flag_index);
            for j=1:1:dim
                Xnewm(i,:)=Best_pos(j)+C3*Flag*Temp*rand*(Best_pos(j)-Xm(i,j));%eq.(10)
            end
        end
        for i=1:Nf
            flag_index = floor(2*rand()+1);
            Flag=vec_flag(flag_index);
            for j=1:1:dim
                Xnewf(i,:)=Best_pos(j)+Flag*C3*Temp*rand*(Best_pos(j)-Xf(i,j));%eq.(10)
            end
        end
    else %cold
        if rand>0.6 %fight
            for i=1:Nm
                for j=1:1:dim
                    FM=exp(-(fitnessBest_f)/(fitness_m(i)+eps));%eq.(13)
                    Xnewm(i,:)=Xm(i,j) +C3*FM*rand*(Q*Xbest_f(j)-Xm(i,j));%eq.(11)
                    
                end
            end
            for i=1:Nf
                for j=1:1:dim
                    FF=exp(-(fitnessBest_m)/(fitness_f(i)+eps));%eq.(14)
                    Xnewf(i,:)=Xf(i,j)+C3*FF*rand*(Q*Xbest_m(j)-Xf(i,j));%eq.(12)
                end
            end
        else%mating
            for i=1:Nm
                for j=1:1:dim
                    Mm=exp(-fitness_f(i)/(fitness_m(i)+eps));%eq.(17)
                    Xnewm(i,:)=Xm(i,j) +C3*rand*Mm*(Q*Xf(i,j)-Xm(i,j));%eq.(15
                end
            end
            for i=1:Nf
                for j=1:1:dim
                    Mf=exp(-fitness_m(i)/(fitness_f(i)+eps));%eq.(18)
                    Xnewf(i,:)=Xf(i,j) +C3*rand*Mf*(Q*Xm(i,j)-Xf(i,j));%eq.(16)
                end
            end
            flag_index = floor(2*rand()+1);
            egg=vec_flag(flag_index);
            if egg==1;
                [GYworst, gworst] = max(fitness_m);
                Xnewm(gworst,:)=lb+rand*(ub-lb);%eq.(19)
                [GYworst, gworst] = max(fitness_f);
                Xnewf(gworst,:)=lb+rand*(ub-lb);%eq.(20)
            end
        end
    end
end
    for j=1:Nm
         Flag4ub=Xnewm(j,:)>ub;
         Flag4lb=Xnewm(j,:)<lb;
        Xnewm(j,:)=(Xnewm(j,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
        y = feval(fobj,Xnewm(j,:));
        if y<fitness_m(j)
            fitness_m(j)=y;
            Xm(j,:)= Xnewm(j,:);
        end
    end
    
    [Ybest1,gbest1] = min(fitness_m);
    
    for j=1:Nf
         Flag4ub=Xnewf(j,:)>ub;
         Flag4lb=Xnewf(j,:)<lb;
        Xnewf(j,:)=(Xnewf(j,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
        y = feval(fobj,Xnewf(j,:));
        if y<fitness_f(j)
            fitness_f(j)=y;
            Xf(j,:)= Xnewf(j,:);
        end
    end
    
    [Ybest2,gbest2] = min(fitness_f);
    
    if Ybest1<fitnessBest_m
        Xbest_m = Xm(gbest1,:);
        fitnessBest_m=Ybest1;
    end
    if Ybest2<fitnessBest_f
        Xbest_f = Xf(gbest2,:);
        fitnessBest_f=Ybest2;
        
    end
    if Ybest1<Ybest2
        curve(t)=min(Ybest1);
    else
        curve(t)=min(Ybest2);
        
    end
    if fitnessBest_m<fitnessBest_f
        GYbest=fitnessBest_m;
        Best_pos=Xbest_m;
    else
        GYbest=fitnessBest_f;
        Best_pos=Xbest_f;
    end
    
end
Best_score = GYbest;
end



  • initialization.m
function Positions = initialization(SearchAgents_no, dim, ub, lb)

%%  初始化

%%  待优化参数个数
Boundary_no = size(ub, 2); 

%%  若待优化参数个数为1
if Boundary_no == 1
    Positions = rand(SearchAgents_no, dim) .* (ub - lb) + lb;
end

%%  如果存在多个输入边界个数
if Boundary_no > 1
    for i = 1 : dim
        ub_i = ub(i);
        lb_i = lb(i);
        Positions(:, i) = rand(SearchAgents_no, 1) .* (ub_i - lb_i) + lb_i;
    end
end

学习总结

极限学习机,为人工智能机器学习领域中的一种人工神神经网络模型,是一种求解单隐层前馈神经网路的学习演算法。极限学习机是用于分类、回归、聚类、稀疏逼近、压缩和特征学习的前馈神经网络,具有单层或多层隐层节点,其中隐层节点的参数(不仅仅是将输入连接到隐层节点的权重)不需要被调整。这些隐层节点可以随机分配并且不必再更新(即它们是随机投影但具有非线性变换),或者可以从其祖先继承下来而不被更改。在大多数情况下,隐层节点的输出权重通常是一步学习的,这本质上相当于学习一个线性模型。

参考资料

[1] G.-B. Huang, Q.-Y. Zhu, and C.-K. Siew, “Extreme learning machine: A new learning scheme of feedforward neural networks,” in Proc. Int. Joint Conf. Neural Networks, July 2004, vol. 2, pp. 985–990.
[2] https://blog.csdn.net/kjm13182345320/article/details/127361354

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

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

相关文章

拿捏指针(三)--- 对指针的高级认识(高级)

函数指针 函数指针的定义 通过对 对指针的基本认识 和 对指针的进阶认识 我们知道&#xff0c;整型指针是指向整型的指针&#xff0c;数组指针是指向数组的指针&#xff0c;其实&#xff0c;函数指针就是指向函数的指针。 和学习数组指针一样&#xff0c;学习函数指针我们也需…

【WebPack】前端工程化

文章目录 前端工程化一、前端工程化概念二、前端工程化优点三、前端工程化解决方案四、webpack 的基本使用4.1 什么是 webpack4.2 创建列表隔行变色项目4.3 安装 webpack4.4 配置 webpack4.5 自定义 打包入口与出口 五、webpack 的插件使用5.1 webpack 常见插件5.2 webpack-dev…

【Linux】进程优先级

目录 进程优先级什么叫做优先级&#xff1f;Linux优先级更改优先级 进程优先级 什么叫做优先级&#xff1f; cpu资源分配的先后顺序&#xff0c;就是指进程的优先权&#xff08;priority&#xff09;。 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用…

imx6ull固化和更新uboot、zImage和dtb方法---超详细总结

目录 一、固化系统 1. 使用mfgtool上位机固化系统 1.1 mfgtool固化系统到 SD 卡 1.2 mfgtool固化系统到 eMMC 1.3 mfgtool固化系统到 NAND FLASH 2.使用脚本固化系统 2.1脚本固化系统到 SD 卡 2.2 脚本固化系统到 eMMC 2.3 脚本固化系统到 NAND FLASH 二、更新系统 …

用Midjourney画“球迷冲进球场拥抱梅西“事件

作者 | 兔子酱 最近&#xff0c;被“球迷冲进球场拥抱梅西”刷屏了!在阿根廷对战澳大利亚北京工体友谊赛上&#xff0c;一名中国“狂热少年”冲进球场&#xff0c;成功拥抱了梅西&#xff0c;甚至摆出了拍照姿势。拥抱后在球场狂奔&#xff0c;还有大马丁击了掌&#xff0c;最后…

C++学习之STL vector

Vector是什么&#xff1f; 问chatgpt看看是什么回答&#xff1f; ChatGPT&#xff1a; C中的vector是标准库&#xff08;STL&#xff09;提供的一种动态数组容器。它能够在运行时根据需要自动调整大小&#xff0c;并且可以存储不同类型的元素。 使用vector&#xff0c;您可…

Java虚拟机——HotSpot的算法实现细节

根节点枚举 在可达性分析算法中从GC Roots集合中找引用链非常的麻烦 。固定可作为GC Roots的节点主要在全局性的引用&#xff08;例如常量或类静态属性&#xff09;与执行上下文&#xff08;栈帧的本地变量表&#xff09;中。当Java应用很大的时候&#xff0c;类和常量数量很多…

了解redis以及其基本命令

目录 1 编译安装2 启动3 redis 是_3.1 远程字典服务3.2 内存数据库3.3 kv数据库3.4 数据结构数据库3.4.1 string 是一个安全的二进制字符串&#xff1b;3.4.2 双端队列 &#xff08;链表&#xff09; list &#xff1a;有序&#xff08;插入有序&#xff09;&#xff1b;3.4.3 …

Dubbo的10种集群容错模式

学习Dubbo源码的过程中&#xff0c;首先看到的是dubbo的集群容错模式&#xff0c;以下简单介绍10种集群容错模式 1.AvailableCluster 顾名思义&#xff0c;就是可用性优先&#xff0c;遍历所有的invokers&#xff0c;选择可用的 2.MergeableCluster:当接口需要多个服务组合返回…

陌生人,可以看一看你最近复制了什么吗?

DDoS 攻击采用分布式的方式进行&#xff0c;攻击者通常会控制网络中许多终端或服务器&#xff0c;这些终端或服务器同时向被攻击目标发送大量的请求&#xff0c;被攻击目标无法判断这些请求来源的合法性&#xff0c;因此会无法正常处理这些请求&#xff0c;而导致服务中断&…

Web前端开发技术储久良第三版课后答案

P16-第1章 练习与实验答案 练习1 1.选择题 (1)B (2)B (3)B (4)D (5)A 2.填空题 (1)标记、文本 (2)Tim Berners-Lee&#xff08;蒂姆伯纳斯李&#xff09; (3)查看 (4)NotePad、EditPlus、TextPad、TopStyle、UltraEdit等 (5)超文本标记语言、统一资源定位符&#xff08;器&am…

Fiddler如何比较两个接口请求?

进行APP测试时&#xff0c;往往会出现Android和iOS端同一请求&#xff0c;但执行结果不同&#xff0c;这通常是接口请求内容差异所致。 如果你想学习Fiddler抓包工具&#xff0c;我这边给你推荐一套视频&#xff0c;这个视频可以说是B站播放全网第一的Fiddler抓包工具教程&…

多模态对比互学习和伪标签再学习半监督医学图像分割

文章目录 Multi-modal contrastive mutual learning and pseudo-label re-learning for semi-supervised medical image segmentation摘要本文方法实验结果总结 Multi-modal contrastive mutual learning and pseudo-label re-learning for semi-supervised medical image segm…

Linux系统之部署Yearning SQL审核平台

这里写目录标题 一、Yearning介绍1.1 Yearning简介1.2 Yearning特点1.3 Yearning功能 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查操作系统版本3.2 检查系统内核版本3.3 检查Docker版本 四、部署mysql数据库4.1 创建数据目录4.2 创建mysql数据…

【计网】第一章 计算机网络概述

文章目录 计算机网络概述一、计算机网络在信息时代中的作用二、互联网概述2.1 互连网概念2.2 网络的网络2.3 互连网基础结构发展的三个阶段2.4 互连网的标准化工作 三、互联网的组成3.1 互联网的边缘部分3.2 互联网的核心部分3.2.1 基础概念3.2.2 电路交换3.2.3 报文交换3.2.4 …

全网最全的以太坊ERC4626协议解析-ERC4626 - yield-bearing vaults

收益性存款 ERC4626 协议是一种用于代币化保险库的标准&#xff0c;它可以优化和统一收益保险库的技术参数。收益保险库是指使用不同策略来为用户提供最佳收益的合约&#xff0c;例如借贷市场、聚合器或本身具有利息的代币。ERC4626 协议提供了一个标准的 API&#xff0c;用于表…

html实现好看的个人介绍,个人主页模板5(附源码)

文章目录 1.设计来源1.1 主界面1.2 我的介绍界面1.3 我的能力界面1.4 项目案例界面1.5 联系我界面 2.效果和源码2.1 动态效果2.2 源代码2.3 源代码目录 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/13127331…

DJ4-4 CIDR、DHCP

目录 一、分类 IP 方法的问题 二、CIDR 1、CIDR 定义 2、CIDR 地址划分 三、DHCP 1、DHCP 概述 2、DHCP 工作过程 3、DHCP&#xff1a;C/S 场景 4、DHCP&#xff1a;不仅获得 IP 地址 四、组织机构获取 IP 地址 一、分类 IP 方法的问题 A 类的 IP 地址&#xff0c;有…

一天学完Java,主要记录difference

Java学习记录 Java中的内存区域划分Java中的包&#xff08;package&#xff09;Java中的枚举&#xff08;Enum&#xff09;Java中的包装类Java中的Math数学计算类Java中的Random&UUIDJava中的format数字格式化Java中字符串和数字的转换Java中的高精度计算Java中的String操作…

安装Ubuntu系统详细教程

一. 前言 本篇文章详解介绍一下如何安装Ubuntu系统&#xff0c;笔者在安装的过程中踩过很多坑&#xff0c;重装了很多次&#xff0c;现在把安装过程中遇到的问题也列出来&#xff0c;供大家参考。 二. 准备工作 这个环节很重要&#xff0c;工欲善其事&#xff0c;必先利其器。 …