萤火虫算法 java_AGSO 萤火虫算法
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 萤火虫算法相关推荐
- 优化算法笔记|萤火虫算法理解及实现
萤火虫算法 一.萤火虫算法背景知识 二.萤火虫算法 三.萤火虫算法实现 四.算法分析 一.萤火虫算法背景知识 萤火虫算法(Firefly Algorithm, FA)是基于萤火虫的闪光行为,它是一种用 ...
- matlab智能算法之萤火虫算法
智能算法之萤火虫算法 1.起源 2.萤火虫发光求偶 2.1 雌雄萤火虫 2.2 求偶过程 3.原理 3.1 闪光强度 3.2 吸引力 3.3 萤火虫移动 4.具体流程 1.起源 萤火虫群优化算法是20 ...
- 萤火虫算法_萤火虫算法(二)
点击上方"蓝字"关注我们吧! 前面已经简单介绍了萤火虫算法,接下来详细介绍萤火虫算法. 天然萤火虫的行为天然萤火虫在寻找猎物.吸引配偶和保护领地时表现出惊人的闪光行为.萤火虫的吸引 ...
- 【智能优化算法】萤火虫优化算法 (Firefly algorithm,FA),2009
前言 萤火虫优化算法(Firefly algorithm,FA).由英国剑桥大学的 Yang 等人于 2009 年提出,主要模拟了萤火虫根据个体亮度而相互吸引的行为.作为最新的群智能优化算法之一 , ...
- 群体智能优化算法之萤火虫算法(Firefly Algorithm,FA)
获取更多资讯,赶快关注上面的公众号吧! 文章目录 第八章 萤火虫算法 8.1 介绍 8.2 天然萤火虫的行为 8.3 萤火虫算法 8.4 萤火虫算法改进 参考文献 第八章 萤火虫算法 8.1 介绍 萤 ...
- 【优化算法】萤火虫算法matlab
萤火虫之间通过闪光来进行信息的交互,同时也能起到危险预警的作用.我们知道从光源到特定距离r处的光强服从平方反比定律,也就是说光强I随着距离 r 的增加会逐渐降低,此外空气也会吸收部分光线,导致光线随着 ...
- 优化算法之萤火虫算法(firefly algorithm)
智能优化算法有很多是模仿自然界中的生物行为进行的,例如众所周知的粒子群算法.遗传算法等,最近新看到一种算法,萤火虫优化算法(firefly algorithm). FA主要是利用萤火虫发光的特点进行随 ...
- (学习笔记)十大经典算法——K-means聚类算法
概述 聚类算法是在无监督的情况下将对象自动分组的一种分析方法,典型的聚类算法分为三个阶段:特征选择和特征提取,数据对象间相似度计算,根据相似度将数据对象分组.聚类算法的目标是将数据集合分成若干簇,使得 ...
- 进化算法——其他进化算法
目录 禁忌搜索 人工鱼群算法 群搜索优化器 混合蛙跳算法 萤火虫算法 细菌觅食优化 人工蜂群算法 引力搜索算法 和声搜索 基于教学的优化 禁忌搜索 禁忌搜索,Tabu,或taboo,意味着禁止或不许可 ...
- 条件随机场(CRF) - 4 - 学习方法和预测算法(维特比算法)
声明: 1,本篇为个人对<2012.李航.统计学习方法.pdf>的学习总结,不得用作商用,欢迎转载,但请注明出处(即:本帖地址). 2,由于本人在学习初始时有很多数学知识都已忘记,所以为了 ...
最新文章
- 如何理解分时系统的四个特征
- 产品管理:孵化产品 Beta 流程
- C++变量命名规则和数据类型
- python哪些模块用于数据分析_python数据解析模块之glom模块的使用(一)
- 时间、时间戳相关小结 - iOS
- Vue学习笔记(八) 组件进阶
- Cobar部署与测试
- linux开启IOMMU方法
- 在Linux上安装IDA的命令,Linux安装IDA神器
- 也谈UpdatePanel与UrlRewrite一起work时出现Form Action属性的问题
- 测试丢包_如何使用ping和tracert命令检测丢包
- pve万兆网卡驱动_WiFi 6扩展有什么选择?Killer AX1650X无线网卡深度测评
- h5-video3 解决html5 audio iphone,ipd,safari不能自动播放问题
- Powershell添加英文输入法
- 在iOS 14中使用带有SF Symbols 2的彩色图标
- moles-packer_Hashicorp的Packer-是否适合PHP开发人员?
- AE教程丨1分钟学会制作信号故障风特效
- C# UDP实现数据收发
- 数据结构二叉排序树的查找
- 《人民的名义》如何圈粉“90后”| 大数据舆情分析
热门文章
- 第十三章:贝叶斯博弈
- 开源cnc软件_带有开源软件的CNC铣削
- RemObjects Elements多用途软件开发
- VISIO 2013软件和安装教程
- STM32基于固件库学习笔记(7)I2C通讯协议时序(GPIO模拟协议时序完成MCU对24c02读写数据)
- securecrt登录linux下载文件,Linux使用SecureCRT上传和下载文件教程
- 宝藏又小众的国画3d材质贴图素材网站分享
- springboot实现任务调度的第三种方式------使用第三方quartz插件调度(springBoot+quartz+cronTrigger进行任务调度)
- kali局域网扫描ip_kali 扫描局域网的QQ
- expect+shell脚本实现免密登录