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

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

相关文章:

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

对于麻雀搜索算法的介绍&#xff0c;网上已经有不少资料了&#xff0c;这边公布SSA的matlab实现 下面展示SSA算法的核心代码以及详细注解 % 麻雀搜索算法函数定义 % 输入&#xff1a;种群大小(pop)&#xff0c;最大迭代次数(Max_iter)&#xff0c;搜索空间下界(lb)&#xff0c…...

142. 环形链表 II --力扣 --JAVA

题目 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使…...

深入浅出 Vue 中的插槽 slot

深入浅出 Vue 中的插槽 slot start 最近被问到好几次 Vue 中的插槽相关知识&#xff0c;掌握的还是有些不全面。抱着重新学习的心态&#xff0c;写这篇博客。首先对基础知识做一个回顾&#xff0c;然后再对源码实现做一个学习。作者&#xff1a;番茄编写时间&#xff1a;2023…...

postgreSQL 查询所有模式的语句

场景 postgre 数据库下携带模式的分组 sql select schema_name from information_schema.schemata;...

pandas教程:Introduction to scikit-learn scikit-learn简介

文章目录 13.4 Introduction to scikit-learn&#xff08;scikit-learn简介&#xff09; 13.4 Introduction to scikit-learn&#xff08;scikit-learn简介&#xff09; scikit-learn是一个被广泛使用的python机器学习工具包。里面包含了很多监督式学习和非监督式学习的模型&a…...

Linux配置路由功能及添加静态路由

一、配置路由功能 Linux作为路由器&#xff0c;Linux本身就具备路由功能&#xff0c;开启方式如下&#xff1a; 临时开启&#xff1a; echo "1" > /proc/sys/net/ipv4/ip_forward永久开启&#xff1a; vim /etc/sysctl.confnet.ipv4.ip_forward1 # 配置生效 sys…...

什么是Geo Trust OV证书

一、GeoTrust OV证书的介绍 GeoTrust OV证书是由GeoTrust公司提供的SSL证书&#xff0c;它是一种支持OpenSSL的数字证书&#xff0c;具有更高的安全性和可信度。GeoTrust是全球领先的网络安全解决方案提供商&#xff0c;为各类用户提供SSL证书和信任管理服务。GeoTrust OV证书…...

selenium 工具 的基本使用

公司每天要做工作汇报&#xff0c;汇报使用的网页版&#xff0c; 所以又想起 selenium 这个老朋友了。 再次上手&#xff0c;发现很多接口都变了&#xff0c; 怎么说呢&#xff0c; 应该是易用性更强了&#xff0c; 不过还是得重新看看&#xff0c; 我这里是python3。 pip安装…...

Excel如何比较两列数据的不同

当遇到exel有两个列表的数据&#xff0c;需要比较得到他们的不同的部分&#xff0c;并且得到一个不同的值的列表。示例如下&#xff1a; 目的是&#xff1a;通过比较&#xff0c;知道Column2的哪些值不在在Column1里。 WPS直接提供了这一个功能&#xff0c;如下图&#xff1a;…...

力扣labuladong——一刷day47

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣993. 二叉树的堂兄弟节点二、力扣1315. 祖父节点值为偶数的节点和三、力扣1448. 统计二叉树中好节点的数目四、力扣1469. 寻找所有的独生节点 前言 二叉…...

蓝桥杯-02-python组考点与14届真题

文章目录 蓝桥杯python组考点与14届真题参考资源python组考点1. 组别2. 竞赛赛程3. 竞赛形式4. 参赛选手机器环境5. 试题形式5.1. 结果填空题5.2. 编程大题 6. 试题考查范围7. 答案提交8. 评分9. 样题样题 1&#xff1a;矩形切割&#xff08;结果填空题&#xff09;样题 2&…...

【0240】源码分析PG内核中的关键字列表(SQL keywords)

相关文章: 【0236】聊一聊PG内核中的命令标签(Command Tags、CommandTag、tag_behavior) 【0239】从编译原理角度理解 #include “xxx“ 或 #include<xxx> 的实现机制 1. PostgreSQL的SQL关键字列表(SQL Keywords) 1.1 keywords.c源文件内容 keywords.c源文件中的内容…...

【Python深度学习第二版】学习笔记之——什么是深度学习

机器学习是将输入&#xff08;比如图像&#xff09;映射到目标&#xff08;比如标签“猫”&#xff09;的过程。 这一过程是通过观察许多输入和目标的示例来完成的。 深度神经网络通过一系列简单的数据变换&#xff08;层&#xff09;来实现这种输入到目标的映射&#xff0c;这…...

ddns-go部署在linux虚拟机

ddns-go部署ubuntu1804 1.二进制部署 1.虚拟机部署 1.下载linux的x86二进制包 wget https://github.com/jeessy2/ddns-go/releases/download/v5.6.3/ddns-go_5.6.3_linux_x86_64.tar.gz2.解压 tar -xzf ddns-go_5.6.3_linux_x86_64.tar.gz3.拷贝执行文件到PATH下&#xff0c…...

LeetCode Hot100 543.二叉树的直径

题目&#xff1a; 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 方法&#xff1a;灵神 代码&#xff1a; ​…...

Breadcrumb面包屑(antd-design组件库)简单用法和自定义分隔符

1.Breadcrumb面包屑 显示当前页面在系统层级结构中的位置&#xff0c;并能向上返回。 2.何时使用 当系统拥有超过两级以上的层级结构时&#xff1b; 当需要告知用户『你在哪里』时&#xff1b; 当需要向上导航的功能时。 组件代码来自&#xff1a; 面包屑 Breadcrumb - Ant Des…...

Mybatis 源码搭建

文章目录 源码下载测试模块搭建学习博客 源码下载 首先下载mybatis-parent的源码&#xff1a;gitee地址 > https://gitee.com/callback_lab/mybatis-parent.git 然后下载mybatis的源码&#xff1a;gitee地址 > https://gitee.com/callback_lab/mybatis-src.git 带中文…...

shell编程系列(5)-函数的定义

文章目录 前言函数定义处理函数参数通过getopts接收参数 前言 函数是编程语言中最重要的部分之一&#xff0c;虽然在shell脚本中并不是必须的&#xff0c;但是函数可以提高代码的复用性和可读性&#xff0c;当我们编写稍微复杂的脚本时&#xff0c;函数就是一个好帮手&#xf…...

鸿蒙应用开发-初见:入门知识、应用模型

基础知识 Stage模型应用程序包结构 开发并打包完成后的App的程序包结构如图 开发者通过DevEco Studio把应用程序编译为一个或者多个.hap后缀的文件&#xff0c;即HAP一个应用中的.hap文件合在一起称为一个Bundle&#xff0c;bundleName是应用的唯一标识 需要特别说明的是&…...

通过测试驱动开发(TDD)的方式开发Web项目

最近在看一本书《Test-Driven Development with Python》&#xff0c;里面非常详细的介绍了如何一步一步通过测试驱动开发(TDD)的方式开发Web项目。刚好这本书中使用了我之前所了解的一些技术&#xff0c;Django、selenium、unittest等。所以&#xff0c;读下来受益匪浅。 我相…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...