1 --算法说明:荧火虫算法

2

3

4 --================================初始化开始================================

5 domx = { { -1, 2 }, { -1, 2 } }; --定义域

6 rho = 0.4 --荧光素挥发因子

7 gamma = 0.6 --适应度提取比例

8 beta = 0.08 --邻域变化率

9 nt = 5 --邻域阀值(邻域荧火虫数)

10 s = 0.3 --步长

11 s1 = 0.03 --局部最优扰动

12 iot0 = 5 --荧光素浓度

13 rs = 1.5 --感知半径

14 r0 = 1.5 --决策半径

15 --================================初始化结束================================

16

17 --===============================分配空间开始===============================

18 m = 2 --解空间维数

19 n = 30 --群规模

20 gaddress = {} --分配荧火虫地址空间

21 gvalue = {} --分配适应度存放空间

22 ioti = {} --分配荧光素存放空间

23 rdi = {} --分配荧火虫决策半径存放空间

24 --===============================分配空间结束===============================

25

26

27 --===================================函数===================================

28 sin = math.sin

29 sqrt = math.sqrt

30 pi = math.pi

31 random = math.random

32

33 --求解函数

34 functionmaxfun(x)35 return 4 - (x[1] * sin( 4 * pi * x[1]) - x[2] * sin(4 * pi * x[2] + pi + 1))36 end

37

38 --求2范数 维数相关

39 functionnorm(xi, xj)40 return sqrt((xi[1] - xj[1]) ^ 2 + (xi[2] - xj[2]) ^ 2)41 end

42

43 print(maxfun({1.88, 1.81}))44 print(maxfun({1.8506610777502, 1.8685277417146})) --6.8987454465589

45

46

47 --===========================荧火虫常量初始化开始============================

48 math.randomseed(os.time())49

50 --初始化个体

51 for i = 1, n do

52 gaddress[i] ={}53 for j = 1, m do

54 gaddress[i][j] = domx[j][1] + (domx[j][2] - domx[j][1]) *random()55 end

56 end

57

58 --初始化荧光素

59 for i = 1, n do

60 ioti[i] =iot061 end

62

63

64 --初始化决策半径

65 for i = 1, n do

66 rdi[i] =r067 end

68 --===========================荧火虫常量初始化结束============================

69

70

71 --=============================iter_max迭代开始=============================

72

73 --最大迭代次数

74 iter_max = 20

75

76 for iter = 1, iter_max do

77

78 --下面我加了一个变异操作

79 j = 1

80 for i = 1, n do

81 gvalue[i] =maxfun(gaddress[i])82 if gvalue[j] > gvalue[i] then

83 j =i84 end

85 end

86

87 for k = 1, m do

88 gaddress[j][k] = domx[k][1] + (domx[k][2] - domx[k][1]) *random()89 end

90 gvalue[j] =maxfun(gaddress[j])91

92

93 --更新荧光素

94 for i = 1, n do

95 ioti[i] = (1 - rho) * ioti[i] + gamma *gvalue[i]96 end

97

98 --各荧火虫移动过程开始

99 for i = 1, n do

100 --决策半径内找更优点

101 Nit = {} --存放荧火虫序号

102 for j = 1, n do

103 if j ~= i and ioti[i] < ioti[j] and norm(gaddress[j], gaddress[i]) < rdi[i] then

104 table.insert(Nit, j)105 end

106 end

107

108 --找下一步移动的点开始

109 Nitnum = #Nit110 if Nitnum > 0 then

111

112 --选出Nit荧光素之差及差的总和

113 Nitioti ={}114 Denominator = 0

115 for k = 1, Nitnum do

116 Nitioti[k] = ioti[Nit[k]] -ioti[i]117 Denominator = Denominator +Nitioti[k]118 end

119

120 --求出各个选择概率

121 Nitioti[1] = Nitioti[1] /Denominator122 for k = 2, Nitnum do

123 Nitioti[k] = Nitioti[k] / Denominator + Nitioti[k - 1]124 end

125

126 --轮盘赌

127 rand =random()128 idx = 1

129 for k = 1, Nitnum do

130 if rand < Nitioti[k] then

131 idx =Nit[k]132 break

133 end

134 end

135

136 --移动

137 dist =norm(gaddress[idx], gaddress[i])138 for k = 1, m do

139 gaddress[i][k] = gaddress[i][k] + s * (gaddress[idx][k] - gaddress[i][k]) /dist140 if gaddress[i][k] < domx[k][1] then

141 gaddress[i][k] = domx[k][1]142 elseif gaddress[i][k] > domx[k][2] then

143 gaddress[i][k] = domx[k][2]144 end

145 end

146

147 --更新决策半径

148 rdi[i] = rdi[i] + beta * (nt -Nitnum)149 if rdi[i] < 0 then

150 rdi[i] = 0

151 elseif rdi[i] > rs then

152 rdi[i] =rs153 end

154 else

155 for k = 1, m do

156 gaddress[i][k] = gaddress[i][k] + s1 * (random() - 0.5) * (domx[k][2] - domx[k][1])157 if gaddress[i][k] < domx[k][1] then

158 gaddress[i][k] = domx[k][1]159 elseif gaddress[i][k] > domx[k][2] then

160 gaddress[i][k] = domx[k][2]161 end

162 end

163 end

164 end

165 end

166

167 --=============================iter_max迭代结束=============================

168

169

170

171 --=============================输出最优结果开始=============================

172

173 --求各个荧火虫的值

174 j = 1

175 for i = 1, m do

176 gvalue[i] =maxfun(gaddress[i])177 if gvalue[i] < gvalue[j] then

178 j =i179 end

180 end

181

182 --最大值

183 BestAddress =gaddress[j]184 print("(" .. BestAddress[1] .. "," .. BestAddress[2] .. ")\t".. gvalue[j])185 --=============================输出最优结果结束=============================

萤火虫算法 java_AGSO 萤火虫算法相关推荐

  1. 优化算法笔记|萤火虫算法理解及实现

    萤火虫算法 一.萤火虫算法背景知识 二.萤火虫算法 三.萤火虫算法实现 四.算法分析 一.萤火虫算法背景知识 萤火虫算法(Firefly Algorithm, FA)是基于萤火虫的闪光行为,它是一种用 ...

  2. matlab智能算法之萤火虫算法

    智能算法之萤火虫算法 1.起源 2.萤火虫发光求偶 2.1 雌雄萤火虫 2.2 求偶过程 3.原理 3.1 闪光强度 3.2 吸引力 3.3 萤火虫移动 4.具体流程 1.起源 萤火虫群优化算法是20 ...

  3. 萤火虫算法_萤火虫算法(二)

    点击上方"蓝字"关注我们吧! 前面已经简单介绍了萤火虫算法,接下来详细介绍萤火虫算法. 天然萤火虫的行为天然萤火虫在寻找猎物.吸引配偶和保护领地时表现出惊人的闪光行为.萤火虫的吸引 ...

  4. 【智能优化算法】萤火虫优化算法 (Firefly algorithm,FA),2009

    前言 萤火虫优化算法(Firefly algorithm,FA).由英国剑桥大学的 Yang 等人于 2009 年提出,主要模拟了萤火虫根据个体亮度而相互吸引的行为.作为最新的群智能优化算法之一 , ...

  5. 群体智能优化算法之萤火虫算法(Firefly Algorithm,FA)

    获取更多资讯,赶快关注上面的公众号吧! 文章目录 第八章 萤火虫算法 8.1 介绍 8.2 天然萤火虫的行为 8.3 萤火虫算法 8.4 萤火虫算法改进 参考文献 第八章 萤火虫算法 8.1 介绍 萤 ...

  6. 【优化算法】萤火虫算法matlab

    萤火虫之间通过闪光来进行信息的交互,同时也能起到危险预警的作用.我们知道从光源到特定距离r处的光强服从平方反比定律,也就是说光强I随着距离 r 的增加会逐渐降低,此外空气也会吸收部分光线,导致光线随着 ...

  7. 优化算法之萤火虫算法(firefly algorithm)

    智能优化算法有很多是模仿自然界中的生物行为进行的,例如众所周知的粒子群算法.遗传算法等,最近新看到一种算法,萤火虫优化算法(firefly algorithm). FA主要是利用萤火虫发光的特点进行随 ...

  8. (学习笔记)十大经典算法——K-means聚类算法

    概述 聚类算法是在无监督的情况下将对象自动分组的一种分析方法,典型的聚类算法分为三个阶段:特征选择和特征提取,数据对象间相似度计算,根据相似度将数据对象分组.聚类算法的目标是将数据集合分成若干簇,使得 ...

  9. 进化算法——其他进化算法

    目录 禁忌搜索 人工鱼群算法 群搜索优化器 混合蛙跳算法 萤火虫算法 细菌觅食优化 人工蜂群算法 引力搜索算法 和声搜索 基于教学的优化 禁忌搜索 禁忌搜索,Tabu,或taboo,意味着禁止或不许可 ...

  10. 条件随机场(CRF) - 4 - 学习方法和预测算法(维特比算法)

    声明: 1,本篇为个人对<2012.李航.统计学习方法.pdf>的学习总结,不得用作商用,欢迎转载,但请注明出处(即:本帖地址). 2,由于本人在学习初始时有很多数学知识都已忘记,所以为了 ...

最新文章

  1. 如何理解分时系统的四个特征
  2. 产品管理:孵化产品 Beta 流程
  3. C++变量命名规则和数据类型
  4. python哪些模块用于数据分析_python数据解析模块之glom模块的使用(一)
  5. 时间、时间戳相关小结 - iOS
  6. Vue学习笔记(八) 组件进阶
  7. Cobar部署与测试
  8. linux开启IOMMU方法
  9. 在Linux上安装IDA的命令,Linux安装IDA神器
  10. 也谈UpdatePanel与UrlRewrite一起work时出现Form Action属性的问题
  11. 测试丢包_如何使用ping和tracert命令检测丢包
  12. pve万兆网卡驱动_WiFi 6扩展有什么选择?Killer AX1650X无线网卡深度测评
  13. h5-video3 解决html5 audio iphone,ipd,safari不能自动播放问题
  14. Powershell添加英文输入法
  15. 在iOS 14中使用带有SF Symbols 2的彩色图标
  16. moles-packer_Hashicorp的Packer-是否适合PHP开发人员?
  17. AE教程丨1分钟学会制作信号故障风特效
  18. C# UDP实现数据收发
  19. 数据结构二叉排序树的查找
  20. 《人民的名义》如何圈粉“90后”| 大数据舆情分析

热门文章

  1. 第十三章:贝叶斯博弈
  2. 开源cnc软件_带有开源软件的CNC铣削
  3. RemObjects Elements多用途软件开发
  4. VISIO 2013软件和安装教程
  5. STM32基于固件库学习笔记(7)I2C通讯协议时序(GPIO模拟协议时序完成MCU对24c02读写数据)
  6. securecrt登录linux下载文件,Linux使用SecureCRT上传和下载文件教程
  7. 宝藏又小众的国画3d材质贴图素材网站分享
  8. springboot实现任务调度的第三种方式------使用第三方quartz插件调度(springBoot+quartz+cronTrigger进行任务调度)
  9. kali局域网扫描ip_kali 扫描局域网的QQ
  10. expect+shell脚本实现免密登录