一、算法原理

研究表明,圈养的麻雀存在两种不同类型:发现者和加入者。发现者在种群中负责寻找食物并为整个麻雀种群提供觅食区域和方向,而加入者则是利用发现者来获取食物。在生活中我们仔细观察会发现,当群体中有麻雀发现周围有捕食者时,此时群体中一个或多个个体会发出啁啾声,一旦发出这样的声音整个种群就会立即躲避危险,进而飞到其它的安全区域进行觅食。这样的麻雀被称为警觉者。

麻雀搜索算法就是利用麻雀的这种生物特性进行迭代寻优的优化算法。

 警觉者的位置更新策略如下:

二、测试函数

1.Sphere函数

其中x的取值范围为[-5.12,5.12],最优解在[0 0...0]处取得,最优值为0。

function fitness=Sphere(pop)%取值范围[-5.12,5.12],最优解在[0 0...0]处取得,最优值为0fitness=sum(pop.^2);
end

2.Griewank函数

其中,x的取值范围在[-600,600],最优解在[0 0...0]处取得,最优值为0。

function fitness=Griewank(pop)%取值范围[-600,600],最优解在[0 0...0]处取得,最优值为0fitness=sum(pop.^2)/4000-prod(cos(pop)./sqrt(1:length(pop)))+1;
end

3.Rosenbrock函数

其中x的取值范围[-5,10],最优解在[1 1...1]处取得,最优值为0。

function fitness=Rosenbrock(pop)%取值范围[-5,10],最优解在[1 1...1]处取得,最优值为0fitness=sum((pop(1:end-1).^2-pop(2:end)).^2+(pop(1:end-1)-1).^2);
end

4.Ackley函数

其中x的取值范围在[-15,30],最优解在[0 0...0]处取得,最优值为0。原文中有个笔误,没有列出c的取值,c=20。

function fitness=Ackley(pop)%取值范围[-15,30],最优解在[0 0...0]处取得,最优值为0a=-0.2*sqrt(mean(pop.^2));b=mean(cos(20*pop));fitness=20+exp(1)-20*exp(a)-exp(b);
end

5.Rastrign函数

其中x的取值范围在[-5.12,5.12],最优解在[0 0...0]处取得,最优值为0。

function fitness=Rastrign(pop)%取值范围[-5.12,5.12],最优解在[0 0...0]处取得,最优值为0fitness=sum(pop.^2-10*cos(2*pi*pop)+10);
end

三、matlab部分代码

%% 清理内存空间
clc
clear
close all
%% 麻雀参数的设定
index1=input('请选择测试函数:1-Sphere,2-Griewank,3-Rosenbrock,4-Ackley,5-Rastrign');
pop_num=200;%麻雀数量
dim=2;%问题的维度/决策变量的个数
[x_min,x_max]=set_pop(index1,dim);%设置粒子位置,速度的上下限
fitness=zeros(1,pop_num);%各麻雀的适应度函数值
%% 算法参数的设定
ST=0.8;%设定安全阈值
PD_num=0.2*pop_num;%发现者数量
SD_num=0.1*pop_num;%警觉者数量
it_max=50;%最大迭代次数
it=1;
%% 初始化种群
x=(x_max-x_min).*rand(pop_num,dim)+x_min;%随机初始化麻雀位置
x_worst=zeros(dim,it_max);%全局最差的位置
x_best=zeros(dim,it_max);%全局最优的位置
Xp=zeros(dim,it_max);%发现者占据的最优位置
fitness_worst=-inf;%全局最差的适应度值
fitness_best=inf;%全局最优的适应度值
history=zeros(1,it_max);%历史最优适应度值
%% 初始化担任警觉者的麻雀
perm=randperm(pop_num);
SD=perm(1:SD_num);
%% 迭代求最优解
while it<=it_max更新种群it=it+1;
end
figure(2)
plot(1:it_max,history)
xlabel('迭代次数')
ylabel('最优适应度函数')

四、测试结果

假设各个函数都是二维的,就可以用将麻雀的位置用平面坐标表示出来,进一步可以用图形直观的显示麻雀搜索算法的迭代情况,因为在迭代后期(也就是迭代次数大于总迭代次数一半时),适应度较低的加入者会执行随机搜索策略,以避免陷入局部最优,因此并不是所有的麻雀都会跑到最优位置。五个测试函数的迭代情况分别如下:

1.Sphere函数

2.Griewank函数

3.Rosenbrock函数

4.Ackley函数

5.Rastrign函数

结果表明,针对上面五个测试函数,采用麻雀搜索算法可以迭代求得最优解。

完整代码可以戳这里获取:

麻雀搜索算法(SSA)的原理和matlab实现

(含源码)麻雀搜索算法(SSA)的原理和matlab实现相关推荐

  1. 【Matlab风电功率预测】麻雀算法优化BP神经网络风电功率预测【含源码 1319期】

    一.代码运行视频(哔哩哔哩) [Matlab风电功率预测]麻雀算法优化BP神经网络风电功率预测[含源码 1319期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [ ...

  2. 【Matlab风电功率预测】麻雀算法优化LSSVM风电功率预测(多输入单输出)【含源码 1718期】

    一.代码运行视频(哔哩哔哩) [Matlab风电功率预测]麻雀算法优化LSSVM风电功率预测(多输入单输出)[含源码 1718期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 ...

  3. 微信公众平台开发4-长链接转短链接口调用实例(含源码)

    微信公众平台开发-access_token获取及应用(含源码) 作者: 孟祥磊-<微信公众平台开发实例教程> 将一条长链接转成短链接.开发者用于生成二维码的原链接(商品.支付二维码等)太长 ...

  4. 手把手教你SSM整合开发办公系统(OA)——报销单(含源码)

    文章目录 前言 项目展示 技能要求 一.开始前的准备 1.OA系统是什么? 2.人员权利与报销流程 3.数据库设计 4.创建项目及作用说明 5.包与全局变量配置 6.编写过滤器 7.静态资源的复制与请 ...

  5. Eatting外卖基于瑞吉外卖代码全功能优化含源码

    Eatting外卖基于瑞吉外卖代码全功能优化含源码 文章目录 项目的最终部署 源码地址 github:[源码地址](https://github.com/yangxingyue0623/Eating_ ...

  6. JAVA实训项目:银行网银系统管理平台(含源码)

    JAVA实训项目:银行网银系统管理平台(含源码) 文章目录 JAVA实训项目:银行网银系统管理平台(含源码) 前言 一.项目功能需求描述以及相关技术的应用 相关技术应用 二.设计过程 系统流程图 1. ...

  7. (含源码)利用NVIDIA VPI之透视变换

    (含源码)利用NVIDIA VPI之透视变换 更多精彩内容: https://www.nvidia.cn/gtc-global/?ncid=ref-dev-876561 文章目录 (含源码)利用NVI ...

  8. [c#]一键设置popo猫回收站工具含源码

    功能介绍: [c#]一键设置popo猫回收站工具含源码 在抖音上看到挺好玩的,设置popo猫回收站图标,回收站内没有文件时嘴巴是张开的,当回收站内放置文件时嘴巴是闭合的. 其实功能实现很简单,准备两个 ...

  9. ONNX MLIR应用示例(含源码链接)

    ONNX MLIR应用示例(含源码链接) 开放式神经网络交换在MLIR中的实现 (http://onnx.ai/onnx-mlir/). Prebuilt Containers 开始使用ONNX-ML ...

  10. 侯捷译Practical Java(含源码)

    侯捷译Practical Java(含源码) [url=http://www.123xz.net/soft/49/297/308/2007/20070517105923.html][B]侯捷译Prac ...

最新文章

  1. CuteEditor 4.0.7研究
  2. PermutationImportance
  3. HttpUrlConnection get和post简单实现(疑惑解决)
  4. Response.Redirect、 Server.Transfer、Server.Execute三者区别
  5. MySQL专题—— 从认识索引到理解索引【索引优化】
  6. 5个编码技巧以减少GC开销
  7. Mysql数据库安全管理配置
  8. 前端学习(3127):react-hello-react之字符串形式
  9. 基础算法 —— 高精度计算 —— 高精度除法
  10. 邻居把偶然的救急当成了依赖,怎么办?
  11. oracle自定义数组
  12. meo学习笔记3:并行与并发,线程与进程的区别
  13. 零基础想学大数据?别急!先搞清这一点
  14. Debian虚拟机安装
  15. 用Qt开发小游戏《愤怒的小鸟》
  16. ios系统登录连接服务器失败,iPhone 上登陆 Apple ID 提示连接到服务器时出现问题及 iOS 13 教程...
  17. 计算机专业英语答案任伟,专业英语教案
  18. php实战 AES对称加密 第三章
  19. 本周AI热点回顾:GAN生成的超级马里奥关卡,可以永不通关的那种;MLP回归,纯多层感知机视觉架构媲美CNN、ViT...
  20. 关于RGBFusion无法识别和控制技嘉显卡RGB灯的特殊案例和解决办法

热门文章

  1. oracle wip 资源吸收,Oracle ERP系统借贷关系
  2. 雾霾都没走!尾气净化器就别来凑热闹了!
  3. 如何解决excel文档打不开呢?
  4. Hadoop3.2.0 Web应用程序代理
  5. c语言输出0.000000或乱码,深究
  6. 带协议解析的串口调试助手
  7. 服务器分区系统安装win7系统教程,详细教您gpt分区安装win7步骤
  8. wi-fidns服务器未响应,192.168.31.1登录界面
  9. 在python2里怎么使用ttk_关于用户界面:python 2.7中的Tkinter和ttk
  10. 窗口最大化最大最小化关闭按钮超出屏幕 WM_GETMINMAXINFO