码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 萤火虫(FA)算法(附完整Matlab代码,可直接复制)


     尊重他人劳动成果,请勿转载!

    有问题可留言或私信,看到了都会回复解答!

    其他算法请参考:

    1、粒子群(PSO)优化算法(附完整Matlab代码,可直接复制)https://blog.csdn.net/xinzhi1992/article/details/125730562?spm=1001.2014.3001.5502

    2、灰狼(GWO)优化算法(附完整Matlab代码,可直接复制)https://blog.csdn.net/xinzhi1992/article/details/125826933?spm=1001.2014.3001.5502

    3、正余弦(SCA)优化算法(附完整Matlab代码,可直接复制)https://blog.csdn.net/xinzhi1992/article/details/115359297?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22115359297%22%2C%22source%22%3A%22xinzhi1992%22%7D

    4、萤火虫(FA)优化算法(附完整Matlab代码,可直接复制)https://blog.csdn.net/xinzhi1992/article/details/126761617?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22126761617%22%2C%22source%22%3A%22xinzhi1992%22%7D5、果蝇(FOA)优化算法(附完整Matlab代码,可直接复制)https://blog.csdn.net/xinzhi1992/article/details/127649424

    在萤火虫优化算法中,萤火虫发出光亮的主要目的是作为一个信号系统,以吸引其他萤火虫个体。其种群更新基于以下策略:

    1)萤火虫会被吸引到比他更亮的萤火虫那里。

    I=I_{0}e^{-\gamma\cdot r_{i,j} }                      (1)

    I_{0}为萤火虫的最大亮度,与目标值函数相关,目标值函数越大,其自身亮度强度越强;

    \gamma为光强吸收系数,亮度会随着距离的增大和传播媒介的吸收而逐渐减弱;

    r_{i,j}为萤火虫i与萤火虫j的空间距离。

    r_{i,j}=\left | \left | x_{i}-x{j}\right | \right |                (2)

    2)萤火虫的吸引力与其自身亮度成正比,对于任何两只萤火虫,其中一只会向着亮度比他更高的移动,亮度随距离的增大而减弱。萤火虫的吸引度为:

    \beta =\beta_{0}e^{-\gamma \cdot r^2_{i,j} }                    (3)

    \beta_{0}为最大吸引度;

    3)若没有找到一个比给定的萤火虫亮度更亮的萤火虫,则该萤火虫随机移动。萤火虫的位置更新公式为:

    x_{i}=x_{j}+\beta\cdot (x_{j}-x_{i})+\alpha\cdot rand  (4)

    x_{i} x_{j}分别为萤火虫i和萤火虫j所在的空间位置;

    \alpha为步长因子,取值范围为[0,1];

    rand为[0,1]间的随机数;

    Fig1.萤火虫算法流程图

    萤火虫算法完整matlab程序如下:

    1. %pop——种群数量
    2. %dim——问题维度
    3. %ub——变量上界,[1,dim]矩阵
    4. %lb——变量下界,[1,dim]矩阵
    5. %fobj——适应度函数(指针)
    6. %MaxIter——最大迭代次数
    7. %Best_Pos——x的最佳值
    8. %Best_Score——最优适应度值
    9. clc;
    10. clear all;
    11. close all;
    12. pop=50;
    13. dim=2;
    14. ub=[10,10];
    15. lb=[-10,-10];
    16. MaxIter=100;
    17. fobj=@(x)fitness(x);%设置适应度函数
    18. [Best_Pos,Best_Score,IterCurve]=FA(pop,dim,ub,lb,fobj,MaxIter);
    19. %…………………………………………绘图…………………………………………
    20. figure(1);
    21. plot(IterCurve,'r-','linewidth',2);
    22. grid on;
    23. title('萤火虫算法迭代曲线');
    24. xlabel('迭代次数');
    25. ylabel('适应度值');
    26. %…………………………………… 结果显示……………………………………
    27. disp(['求解得到的x1,x2是:',num2str(Best_Pos(1)),' ',num2str(Best_Pos(2))]);
    28. disp(['最优解对应的函数:',num2str(Best_Score)]);
    29. %种群初始化函数
    30. function x=initialization(pop,ub,lb,dim)
    31. for i=1:pop
    32. for j=1:dim
    33. x(i,j)=(ub(j)-lb(j))*rand()+lb(j);
    34. end
    35. end
    36. end
    37. %种群越界调整函数
    38. function x=BoundrayCheck(x,ub,lb,dim)
    39. for i=1:size(x,1)
    40. for j=1:dim
    41. if x(i,j)>ub(j)
    42. x(i,j)=ub(j);
    43. end
    44. if x(i,j)<lb(j)
    45. x(i,j)=lb(j);
    46. end
    47. end
    48. end
    49. end
    50. %适应度函数,可根据自身需要调整
    51. function [Fitness]=fitness(x)
    52. Fitness=sum(x.^2);
    53. end
    54. %…………………………………………萤火虫算法主体………………………………………
    55. function [Best_Pos,Best_Score,IterCurve]=FA(pop,dim,ub,lb,fobj,MaxIter)
    56. beta0=2;%最大吸引度β0
    57. gamma=1;%光吸收强度系数γ
    58. alpha=0.2;%步长因子
    59. dmax=norm(ub-lb);%返回上下界的2范数,用于后面的距离归一化计算
    60. x=initialization(pop,ub,lb,dim);%种群初始化
    61. Fitness=zeros(1,pop);%适应度值初始化
    62. for i=1:pop
    63. Fitness(i)=fobj(x(i,:));%计算适应度值
    64. end
    65. [~,Index]=min(Fitness);%寻找适应度值最小的位置
    66. Global_Best_Pos=x(Index,:);
    67. Global_Best_Score=Fitness(Index);
    68. x_new=x;%用于记录新位置
    69. for t=1:MaxIter
    70. for i=1:pop
    71. for j=1:dim
    72. if Fitness(j)<Fitness(i)
    73. r_ij=norm(x(i,:)-x(j,:))./dmax;%计算2范数,即距离
    74. beta=beta0*exp(-gamma*r_ij^2);
    75. Pos_new=x(i,:)+beta*(x(j,:)-x(i,:))+alpha.*rand(1,dim);
    76. Pos_new=BoundrayCheck(Pos_new,ub,lb,dim);
    77. Fitness_new=fobj(Pos_new);
    78. if Fitness_new<Fitness(i)
    79. x_new(i,:)=Pos_new;
    80. Fitness(i)=Fitness_new;
    81. if Fitness_new<Global_Best_Score
    82. Global_Best_Score=Fitness_new;
    83. Global_Best_Pos=Pos_new;
    84. end
    85. end
    86. end
    87. end%结束j循环
    88. end%结束i循环
    89. x_double=[x;x_new];%将更新后的x_new和历史的x合并组成2*pop只萤火虫
    90. for i=1:2*pop
    91. Fitness_double(i)=fobj(x_double(i,:));
    92. end
    93. [~,SortIndex]=sort(Fitness_double);%适应度重新排序
    94. for k=1:pop %选取适应度靠前的pop只萤火虫,作为下次循环的种群
    95. x(k,:)=x_double(SortIndex(k),:);
    96. end%结束k循环
    97. IterCurve(t)=Global_Best_Score;
    98. end%结束t循环
    99. Best_Pos=Global_Best_Pos;
    100. Best_Score=Global_Best_Score;
    101. end

    Fig2.萤火虫算法迭代过程 

    相关阅读:

    1、粒子群(PSO)优化算法(附完整Matlab代码,可直接复制)

    2、灰狼(GWO)优化算法(附完整Matlab代码,可直接复制)

    3、正余弦(SCA)优化算法(附完整Matlab代码,可直接复制)

    4、萤火虫(FA)优化算法(附完整Matlab代码,可直接复制)

  • 相关阅读:
    Linux用一键安装包部署禅道(18.5版本)
    【AI视野·今日NLP 自然语言处理论文速览 第八十二期】Tue, 5 Mar 2024
    think-queue tp自带的消息队列类库
    今日睡眠质量记录80分
    FreeRTOS源码阅读笔记1--task.c
    SpringWeb(1)
    【Java 8 新特性】Java Comparator.reverseOrder | 倒序排序-静态方法
    Java学习笔记44——Stream流
    Pytorch:Torch数据类型学习整理与记录
    LeetCode刷题——等差数列划分#413#Medium
  • 原文地址:https://blog.csdn.net/xinzhi1992/article/details/126761617
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号