• 麻雀搜索算法matlab代码


    ​✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

    🍎个人主页:Matlab科研工作室

    🍊个人信条:格物致知。

    更多Matlab仿真内容点击👇

    智能优化算法  神经网络预测 雷达通信  无线传感器

    信号处理 图像处理 路径规划 元胞自动机 无人机

    ⛄ 内容介绍

    麻雀搜索算法是一种新型的群智能优化算法, 在 2020 年由 Xue 等 [15] 提出,主要是受麻雀的觅食 和反哺食行为启发,具有寻优能力强、收敛速度快的特点。麻雀搜索算法将整个麻雀种群分为三类,即寻找食物的生产者,抢夺食物的加入者和发现危险的警戒者 。生产者和加入者可以相互转化,但各自在 种群中的占比不会发生变化。在模拟实验中,需要使用虚拟麻雀进行食物的 寻找,与其他寻优算法相同,麻雀搜索算法首先需要对麻雀种群与适应度值进行初始化,麻雀种群可 初始化为如下形式,表达式为式(3) 

    中:n为麻雀的数量;d为要优化的变量的维度即独立参数的数目;xnd为第n只麻雀第d维度的值。由此,总体麻雀适应度值表征形式为 

    式(4)中:f(x)为个体适应度值。适应度值较好的麻雀(即生产者)在搜索中会优先获得食物并指引群体的觅食方向与范围,与此同时,生产者会具有更大的觅食搜索范围。生产者在觅食过程中,位置不断发生移动,而在遇到捕食者时,移动规则又会发生改变,即 

    式(5)中:t为当前迭代次数;j∈{1,2,…,d};xit,j为迭代第t次时,第i个麻雀的第j个维度的值;α∈(0,1],为随机数;iter_max为迭代次数最多的常数;R2∈[0,1],为报警值;ST∈[0,1],为安全阈值;Q为服从正态分布的随机数;L为1×d阶矩阵(元素全为1)。R2<ST时,代表该区域安全,无捕食者出没,生产者会出现大范围觅食行为;R2≥ST时,表示一些麻雀发现了捕食者并发出警告,所有麻雀迅速飞入安全区域。而对加入者而言,在觅食过程中,一旦生产者找到了好的食物源,加入者必会知晓,并飞向它的附近抢食,同时,也有加入者会时刻监视生产者,随时准备争抢食物。由此加入者的位置更新规则为

    式(6)中:xp为生产者占据的最佳位置;xworst为全局最差位置;A为1×d阶矩阵,每个元素随机为1或-1;A†=AT(AAT)-1。当i>时,表示适应性较差的第i个加入者抢夺食物失败,为了更好地获得食物避免挨饿只能飞往其他地区进行觅食。总体而言,假设意识到危险的麻雀(即警戒者)占10%~20%。初始位置则随机产生,规则为

    式(7)中:λ为步长控制函数,是一个均值为0,方差为1的正态分布随机数;fi为当前麻雀适应值;fg为全局最好适应值;fw为全局最差适应值;k为麻雀移动方向;xbest为全局最优位置;ε为最小常数,避免除数为零。当fi>fg时,警戒者位于种群边缘,意识到危险后向中央安全区靠近;当fi=fg时,则是处于种群中央的麻雀意识到了危险,为躲避危险,则向其他麻雀身边靠拢。

    ⛄ 部分代码

    %_________________________________________________________________________________

    %  Salp Swarm Algorithm (SSA) source codes version 1.0

    %

    % You can simply define your cost in a seperate file and load its handle to fobj 

    % The initial parameters that you need are:

    %__________________________________________

    % fobj = @YourCostFunction

    % dim = number of your variables

    % Max_iteration = maximum number of generations

    % SearchAgents_no = number of search agents

    % lb=[lb1,lb2,...,lbn] where lbn is the lower bound of variable n

    % ub=[ub1,ub2,...,ubn] where ubn is the upper bound of variable n

    % If all the variables have equal lower bound you can just

    % define lb and ub as two single number numbers

    % To run SSA: [Best_score,Best_pos,SSA_cg_curve]=SSA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj)

    %__________________________________________

    clear all 

    clc

    SearchAgents_no=30; % Number of search agents

    Function_name='F5'; % Name of the test function that can be from F1 to F23 ( 

    Max_iteration=100; % Maximum numbef of iterations

    % Load details of the selected benchmark function

    [lb,ub,dim,fobj]=Get_Functions_details(Function_name);

    [Best_score,Best_pos,SSA_cg_curve]=SSA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj);

    figure('Position',[500 500 660 290])

    % %Draw search space

    subplot(1,2,1);

    func_plot(Function_name);

    title('Parameter space')

    xlabel('x_1');

    ylabel('x_2');

    zlabel(['( x_1 , x_2 )'])

    %Draw objective space

    subplot(1,2,2);

    semilogy(SSA_cg_curve,'Color','r')

    title('Objective space')

    xlabel('Iteration');

    ylabel('Best score obtained so far');

    axis tight

    grid on

    box on

    legend('SSA')

    display(['The best solution obtained by SSA is \m ', num2str(Best_pos)]);

    display(['The best optimal value of the objective funciton found by SSA is \n ', num2str(Best_score)]);

    img =gcf;  %获取当前画图的句柄

    print(img, '-dpng', '-r600', './img.png')         %即可得到对应格式和期望dpi的图像    

    ⛄ 运行结果

    ⛄ 参考文献

    [1]郭北涛, 姜旭, 张丽秀. 基于麻雀算法的机械手时间最优轨迹规划[J]. 组合机床与自动化加工技术, 2022(3):5.

    ❤️ 关注我领取海量matlab电子书和数学建模资料

    ❤️部分理论引用网络文献,若有侵权联系博主删除

  • 相关阅读:
    【Cortex-M4】学习 Day1 搭建开发环境
    16.linux应用实现控制led
    (免费领源码) python语言;django框架;mysql电子档管理系统28265-计算机毕业设计项目选题推荐
    一条 sql 语句可能导致的表锁和行锁以及死锁检测
    售后服务管理系统(Java+Web+J2EE+MySQL)
    Kerberos环境下 命令行连接kafka 和zk
    LVS-DR模式部署
    华硕电脑自带壁纸位置
    [附源码]Java计算机毕业设计SSM服装创意定制管理系统
    caxa复制尺寸错乱
  • 原文地址:https://blog.csdn.net/qq_59747472/article/details/127583615