麻雀搜索优化算法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…

java伪共享问题

参考文章 https://blog.csdn.net/qq_45443475/article/details/131417090 产生原因 cpu 与内核数据交换的单位是 cache 行&#xff0c;多核 cpu 的高速缓存在对同一个变量进行修改时由于缓存一致性协议导致对应的缓存失效。 缓存行的大小 cpu 架构有关系&#xff0c;如果是 …

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

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

redis 重建主从记录

redis 重建主从变化 说明&#xff1a;监控某个从节点的变化&#xff0c;从节点清空了 appendonlydir/ 目录,删除了 dump.rdb&#xff0c;重启该从节点&#xff0c;监测变化如下。 第一阶段 重新启动该节点期间&#xff0c;监测数据目录下文件变化&#xff0c;首先生成 temp-…

大华智能物联综合管理平台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…

【2023C卷最新题目】20天拿下华为OD笔试之【哈希表】2023C-掌握单词个数-全网注释最详细分类最全的华为OD真题题解

文章目录 题目描述与示例题目描述输入描述输入描述 示例一输入输出说明 示例二输入输出说明 解题思路代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 题目描述与示例 题目描述 有一个字符串数组 words 和一个字符串 chars 。 假如可以用 chars 中的字…

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的研究人员利用这些漏洞构建…

360反馈可以改变行为吗?

许多组织将 360反馈作为其绩效或人员发展议程的一部分&#xff0c;其最终目标是改变个人或团体的行为。但 360 度反馈能有效实现这一目标吗&#xff1f;有哪些证据表明 360 度反馈可以真正改变工作场所的行为和技能&#xff1f;当你谈论 360 度反馈时&#xff0c;”有效 “意味…

二进制插桩:静态插桩和动态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;表示将…

python:关于函数内 * 和 / 是什么意思?

总结&#xff1a;如果你希望调用者使用函数时一定不能使用关键字传参&#xff0c;要求它使用位置进行传参&#xff0c;那么就可以把这些参数放在 / 的前面即可&#xff1b;如果你希望调用者使用函数时一定要使用某些参数&#xff0c;且必须是关键字传参时&#xff0c;那么就可以…

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

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

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

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

腾讯云服务器99元一年,续费多少钱?

腾讯云服务器99元一年&#xff0c;续费多少钱&#xff1f;腾讯云服务器价格是88元一年起&#xff0c;不是99元&#xff0c;阿里云是99元一年&#xff0c;续费不涨价依旧是99元的价格续费。腾讯云88元服务器配置为2核2G3M带宽的轻量应用服务器&#xff0c;续费价格不是88元&…