麻雀搜索优化算法MATLAB实现,SSA-BP网络

对于麻雀搜索算法的介绍,网上已经有不少资料了,这边公布SSA的matlab实现

下面展示SSA算法的核心代码以及详细注解

% 麻雀搜索算法函数定义

% 输入:种群大小(pop),最大迭代次数(Max_iter),搜索空间下界(lb),搜索空间上界(ub),问题维度(dim),目标函数(fobj)

% 输出:最优适应度值(Best_score),最优位置(Best_pos),每次迭代的最优适应度值(curve)

function [Best_score,Best_pos,curve]=SSA(pop,Max_iter,lb,ub,dim,fobj)

% 预警值

ST = 0.7;

% 发现者的比例

PD = 0.4;

% 意识到有危险麻雀的比重

SD = 0.2;

% 计算发现者数量和意识到有危险麻雀数量

PDNumber = round(pop*PD);

SDNumber = round(SD*PD);

% 种群初始化

X0=initialization(pop,dim,ub,lb);

X = X0;

% 计算初始适应度值

fitness = zeros(1,pop);

for i = 1:pop

   fitness(i) =  fobj(X(i,:));

end

% 对适应度值进行升序排序,找到最优和最差的适应度值

[fitness, index]= sort(fitness);

BestF = fitness(1);

WorstF = fitness(end);

% 更新全局最优适应度值

GBestF = fitness(1);

% 根据适应度值的排序结果,重新排列种群中的麻雀

for i = 1:pop

    X(i,:) = X0(index(i),:);

end

% 初始化记录每次迭代的最优适应度值的数组

curve=zeros(1,Max_iter);

% 记录全局最优位置

GBestX = X(1,:);

% 初始化新的种群位置

X_new = X;

% 迭代开始

for i = 1: Max_iter

    disp(['第',num2str(i),'次迭代'])

    BestF = fitness(1);

    WorstF = fitness(end);

    % 麻雀的行为更新

   for j = 1:PDNumber

      if(rand(1)<ST)

          % 麻雀降低飞行高度以避免风险

          X_new(j,:) = X(j,:).*exp(-j/(rand(1)*Max_iter));

      else

          % 麻雀在原有位置上添加随机扰动,以模拟发现者的搜索行为

          X_new(j,:) = X(j,:) + randn()*ones(1,dim);

      end     

   end

   

   for j = PDNumber+1:pop

        if(j>(pop - PDNumber)/2 + PDNumber)

          % 麻雀向全局最优麻雀靠近,以模拟麻雀的跟随行为

          X_new(j,:)= randn().*exp((X(end,:) - X(j,:))/j^2);

        else

          % 麻雀向局部最优麻雀靠近,以模拟麻雀的跟随行为

          A = ones(1,dim);

          for a = 1:dim

            if(rand()>0.5)

                A(a) = -1;

            end

          end

          AA = A'*inv(A*A');     

          X_new(j,:)= X(1,:) + abs(X(j,:) - X(1,:)).*AA';

       end

   end

   

   % 对于意识到有危险的麻雀,进行特殊的行为更新

   Temp = randperm(pop);

   SDchooseIndex = Temp(1:SDNumber);

   for j = 1:SDNumber

       if(fitness(SDchooseIndex(j))>BestF)

           % 如果适应度值大于当前最优值,麻雀向全局最优麻雀靠近

           X_new(SDchooseIndex(j),:) = X(1,:) + randn().*abs(X(SDchooseIndex(j),:) - X(1,:));

      ```matlab

       elseif(fitness(SDchooseIndex(j))== BestF)

           % 如果适应度值等于当前最优值,麻雀进行随机行为

           K = 2*rand() -1;

           X_new(SDchooseIndex(j),:) = X(SDchooseIndex(j),:) + K.*(abs( X(SDchooseIndex(j),:) - X(end,:))./(fitness(SDchooseIndex(j)) - fitness(end) + 10^-8));

       end

   end

   

   % 边界控制,防止麻雀飞出搜索空间

   for j = 1:pop

       for a = 1: dim

           if length(ub)>1

               if(X_new(j,a)>ub(a))

                   X_new(j,a) =ub(a);

               end

               if(X_new(j,a)<lb(a))

                   X_new(j,a) =lb(a);

               end

           else

                if(X_new(j,a)>ub)

                   X_new(j,a) =ub;

               end

               if(X_new(j,a)<lb)

                   X_new(j,a) =lb;

               end

           end

       end

   end

   

   % 更新位置

   for j=1:pop

     fitness_new(j) = fobj(X_new(j,:));

   end

   

   for j = 1:pop

    if(fitness_new(j) < GBestF)

       % 更新全局最优适应度值和位置

       GBestF = fitness_new(j);

        GBestX = X_new(j,:);   

    end

   end

   

   X = X_new;

   fitness = fitness_new;

   

   % 根据新的适应度值,重新排序种群

   [fitness, index]= sort(fitness);

   BestF = fitness(1);

   WorstF = fitness(end);

   for j = 1:pop

      X(j,:) = X(index(j),:);

   end

   

   % 记录当前迭代的最优适应度值

   curve(i) = GBestF;

    disp(['current iteration is: ',num2str(i), ', best fitness is: ', num2str(GBestF)])

end

% 返回全局最优位置和最优适应度值

Best_pos =GBestX;  

Best_score = curve(end);

end

将SSA应用到BP神经网络优化上,优化结果图如下:

具体思路为:

1.清理环境:开始时,代码清理了MATLAB环境,关闭了所有图窗,清空了所有变量和命令行,以确保开始一个全新的会话。

2.导入数据:导入一个名为“数据集.xlsx”的Excel文件,并对数据进行了分析。数据集被分为训练集和测试集,其中80%的数据用作训练集。

3.数据归一化:为了使网络训练更有效,数据被归一化到0和1之间。

4.创建和配置神经网络:创建了一个新的前馈神经网络,其中隐藏层的节点数为15。然后,设置了网络的训练参数,包括训练次数、目标误差和学习率。

5.麻雀搜索算法(SSA)的应用:SSA是一种优化算法,用于寻找最优的权重和阀值以初始化神经网络。SSA模拟了麻雀的捕食行为,麻雀通过在搜索空间内搜索食物源来找到最优解。

6.网络训练和预测:用SSA找到的最优初始权重和阀值训练网络,并对训练集和测试集进行预测。

7.反归一化:预测完成后,数据被反归一化,以便可以与原始数据进行比较。

8.评估模型性能:计算了均方根误差(RMSE)、决定系数(R2)、均方误差(MSE)、剩余预测残差(RPD)、平均绝对误差(MAE)和平均绝对百分比误差(MAPE)来评估模型的性能。

9.结果可视化:最后,通过各种图形(包括预测结果、误差直方图、优化曲线、线性拟合图等)对结果进行了可视化。

完整的代码实现以及数据集见:

GitHub - dazhiwang233/matlab-implementation-of-SSA-BP-network: SSA-BP网络的matlab实现

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

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

相关文章

【C++进阶】二叉搜索树(BSTree)

​&#x1f47b;内容专栏&#xff1a;C/C编程 &#x1f428;本文概括&#xff1a;二叉搜索树的基本操作(查找、删除、插入)、二叉搜索树的应用&#xff0c;KV模型。 &#x1f43c;本文作者&#xff1a;阿四啊 &#x1f438;发布时间&#xff1a;2023.11.22 一、二叉搜索树 1.1…

Maven中常用命令以及idea中使用maven指南

文章目录 Maven 常用命令compiletestcleanpackageinstallMaven 指令的生命周期maven 的概念模型 idea 开发maven 项目idea 的maven 配置idea 中创建一个maven 的web 工程在pom.xml 文件添加坐标坐标的来源方式依赖范围编写servlet maven 工程运行调试 Maven 常用命令 compile …

大华智能物联综合管理平台readpic接口任意文件读取漏洞复现 [附POC]

文章目录 大华智能物联综合管理平台readpic接口任意文件读取漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 大华智能物联综合管理平台readpic接口任意文件读取漏洞复现 [附POC] 0x01 前言 免责…

(论文阅读58-66)视频描述

58.文献阅读笔记&#xff08;LRCNs&#xff09; 简介 题目 Long-term Recurrent Convolutional Networks for Visual Recognition and Description 作者 Jeff Donahue, Lisa Anne Hendricks, Marcus Rohrbach, Subhashini Venugopalan, Sergio Guadarrama, Kate Saenko, T…

AIGC 点亮创作之旅,「重内容」行业也能轻装出发

毋庸置疑&#xff0c;AIGC 的普及成为了内容产业的一束光。 不仅策划们可以从信息挖掘、素材调用、修改编辑等基础文案工作中解放出来&#xff0c;美术也成为 AIGC 的应用强项&#xff0c;基本的加文字、换背景、改尺寸、延展素材等&#xff0c;都能快速解决。 内容创作者们也因…

leetcode:1773. 统计匹配检索规则的物品数量(python3解法)

难度&#xff1a;简单 给你一个数组 items &#xff0c;其中 items[i] [typei, colori, namei] &#xff0c;描述第 i 件物品的类型、颜色以及名称。 另给你一条由两个字符串 ruleKey 和 ruleValue 表示的检索规则。 如果第 i 件物品能满足下述条件之一&#xff0c;则认为该物…

使用内网穿透工具实现远程访问本地部署的Odoo企业管理系统

文章目录 前言1. 下载安装Odoo&#xff1a;2. 实现公网访问Odoo本地系统&#xff1a;3. 固定域名访问Odoo本地系统 前言 Odoo是全球流行的开源企业管理套件&#xff0c;是一个一站式全功能ERP及电商平台。 开源性质&#xff1a;Odoo是一个开源的ERP软件&#xff0c;这意味着企…

阿里云学生认证可领300元无门槛代金券(高效计划)

阿里云高校计划学生和教师均可参与&#xff0c;完成学生认证和教师验证后学生可以免费领取300元无门槛代金券和3折优惠折扣&#xff0c;适用于云服务器等全量公共云产品&#xff0c;订单原价金额封顶5000元/年&#xff0c;阿里云百科aliyunbaike.com分享阿里云高校计划入口及学…

下载安装升讯威在线客服系统时提示风险的解决办法

客服系统的服务端程序、客服端程序、配套的配置工具涉及磁盘文件读写、端口监听&#xff0c;特别是经过混淆加密后&#xff0c;可能被部分浏览器或部分杀毒软件提示风险。请忽略并放心使用&#xff0c;如果开发软件是为了植入木马&#xff0c;这个代价可太大了&#xff0c;不如…

危险了:蓝牙协议爆严重安全漏洞!

导读据外媒报道&#xff0c;美国的物联网安全研究公司Armis在蓝牙协议中发现了8个零日漏洞&#xff0c;而这些漏洞将会影响全球超过53亿的设备&#xff0c;包括Android、iOS、Windows、Linux系统设备以及使用短距离无线通信技术的物联网设备。 Armis的研究人员利用这些漏洞构建…

二进制插桩:静态插桩和动态intel pin插桩

目前有两类插桩平台&#xff1a;静态插桩&#xff08;SBI&#xff09;和动态插桩&#xff08;DBI&#xff09; SBI使用二进制重写方法永久修改磁盘上的二进制文件&#xff1b;DBI不会修改磁盘上的二进制程序&#xff0c;而是监视二进制程序的执行状态&#xff0c;并在其运行时…

C语言杨辉三角(ZZULIOJ1130:杨辉三角)

题目描述 还记得中学时候学过的杨辉三角吗&#xff1f;具体的定义这里不再描述&#xff0c;你可以参考以下的图形&#xff1a;1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 输入&#xff1a;输入只包含一个正整数n&#xff08;1 < n < 30&#xff09;&#xff0c;表示将…

基于PHP的动漫周边购物系统

有需要请加文章底部Q哦 可远程调试 基于PHP的动漫周边购物系统 一 介绍 此动漫周边购物系统系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。用户可注册登录&#xff0c;购物下单&#xff0c;评论等。管理员登录后台可对动漫周边商品&#xff0c;用户…

跨越行业边界,CodeMeter护航AI领域安全与合规

在人工智能&#xff08;AI&#xff09;技术如ChatGPT的推动下&#xff0c;工业视觉、医疗诊断和智能驾驶等领域正在经历重大变革。这些技术不仅扩大了应用范围&#xff0c;也带来了数据安全、软件授权保护和合规性等新挑战。 AI工业视觉正在推动制造和自动化的快速发展&#x…

【腾讯云云上实验室-向量数据库】腾讯云VectorDB:深度学习场景下的新一代数据存储方案

引言 ​  在深度学习领域的实践中&#xff0c;一般会涉及到向量化处理的数据&#xff0c;如图像、文本、音频等&#xff0c;这些数据的存储和检索对于许多深度学习任务至关重要。传统的关系型数据库和NoSQL数据库在存储和检索这类大规模向量数据时&#xff0c;通常不能满足高…

Redis 与其他数据库的不同之处 | Navicat

Redis&#xff0c;即远程字典服务器&#xff08;Remote Dictionary Server&#xff09;&#xff0c;它是一个多功能且高性能的键值存储系统&#xff0c;在数据库领域中已获得广泛关注和认可。在处理简单数据结构方面&#xff0c;它因其快速和高效而著称。本文中&#xff0c;我们…

electron入门(一)环境搭建,实现样例

1、首先需要安装git和node&#xff0c;配置环境变量&#xff0c;确保npm和git命令可用 2、 然后安装依赖 npm install -g electronnpm install -g electron-forgenpm install -g electron-prebuilt-compile3、 创建样例工程 electron-forge init my-new-app # 我这里碰见报错…

qlik为app添加定时调度

1&#xff0c;进入qmc/Apps 2&#xff0c;搜索需要添加调度的APP 3&#xff0c;搜索到后双击点开Tasks 4&#xff0c;新增Tasks---点击Create New 5&#xff0c;添加调度器 6&#xff0c;设置调度&#xff0c;双击新增的调度&#xff0c;注意选择时区

[数据结构]—栈和队列

&#x1f493;作者简介&#x1f389;&#xff1a;在校大二迷茫大学生 &#x1f496;个人主页&#x1f389;&#xff1a;小李很执着 &#x1f497;系列专栏&#x1f389;&#xff1a;数据结构 每日分享✨&#xff1a;到头来&#xff0c;有意义的并不是结果&#xff0c;而是我们度…

MONGODB 的基础 NOSQL注入基础

首先来学习一下nosql 这里安装就不进行介绍 只记录一下让自己了解mongodb ubuntu 安装后 进入 /usr/bin ./mongodb即可进入然后可通过 进入的url链接数据库 基本操作 show dbshow dbsshow tablesuse 数据库名插入数据db.admin.insert({json格式的数据})例如 db.admin.inse…