(Python)萤火虫算法
萤火虫的闪光,其主要目的是作为一个信号系统,以吸引其他的萤火虫。将搜索和优化过程模拟成萤火虫之间相互吸引及位置迭代更新的过程,将求解最优值的问题看作是寻找最亮萤火虫的问题。
将空间各点看成萤火虫,发光强的会吸引发光弱的萤火虫。在发光弱的萤火虫向发光强的萤火虫移动的过程中,完成位置的迭代,从而找出最优位置,亮度是随着距离的增加而减少的。如果没有找到一个比给定萤火虫更亮,它会随机移动。
import numpy as np
import matplotlib.pyplot as plt
import copy
import timeclass FA:def __init__(self, D, N, Beta0, gama, alpha, T, bound):self.D = D # 问题维数 2self.N = N # 群体大小 20self.Beta0 = Beta0 # 最大吸引度 初始化为1self.gama = gama # 光吸收系数 0.000001self.alpha = alpha # 步长因子 0.97self.T = T # 最大迭代次数 100self.X = (bound[1] - bound[0]) * np.random.random([N, D]) + bound[0] # 随机初始化萤火虫的坐标self.X_origin = copy.deepcopy(self.X) # 萤火虫所在范围坐标self.shape=self.X_origin.shape[0]self.FitnessValue = np.zeros(N) # 初始化每个萤火虫的适应度值 默认都是0for n in range(N):self.FitnessValue[n] = self.FitnessFunction(n)# 计算两个每个萤火虫两两之间的距离def DistanceBetweenIJ(self, i, j):return np.linalg.norm(self.X[i, :] - self.X[j, :])# 计算对周围萤火虫的吸引度def BetaIJ(self, i, j): # AttractionBetweenIJreturn self.Beta0 * \np.math.exp(-self.gama * (self.DistanceBetweenIJ(i, j) ** 2)) # \是换行显示的标志# 对于每个萤火虫而言,找到吸引度最高的萤火虫个体,并更新位置def update(self, i, j):self.X[i, :] = self.X[i, :] + \self.BetaIJ(i, j) * (self.X[j, :] - self.X[i, :]) + \self.alpha * (np.random.rand(self.D) - 0.5)# 根据萤火虫的位置计算出每个萤火虫的适应度值,适应度值越优的萤火虫亮度越高def FitnessFunction(self, i):x_ = self.X[i,:]return np.linalg.norm(x_) ** 2# 迭代至最大迭代次数则结束,输入搜索到的最优的萤火虫的位置def iterate(self):t = 0while t < self.T:for i in range(self.N):FFi = self.FitnessValue[i]for j in range(self.N):FFj = self.FitnessValue[j]if FFj < FFi:self.update(i, j)self.FitnessValue[i] = self.FitnessFunction(i)FFi = self.FitnessValue[i]# 更新最优的萤火虫的位置和计算出萤火虫的适应度值t += 1# 输出萤火虫的最优适应度值及萤火虫的位置坐标def find_min(self):v = np.min(self.FitnessValue)n = np.argmin(self.FitnessValue) # 检索数组中最小值的位置,并返回其下标return v, self.X[n, :]def plot(X_origin, X):fig_origin = plt.figure(0)plt.xlabel('x')plt.ylabel('y')colorlist=['k','r','maroon','sienna','peru','darkorange','tan','orange','goldenrod','lightgreen','g','lime','springgreen','teal','c','cornflowerblue','navy','b','blueviolet','purple']# print(X_origin.shape)for i in range(X_origin.shape[0]):plt.scatter(X_origin[i,0], X_origin[i,1], c=colorlist[i])# print(X[:, 0], X[:, 1])# plt.scatter(X[:, 0], X[:, 1], c='aqua')# 中心点,作为亮蓝色plt.show()if __name__ == '__main__':t = np.zeros(10)value = np.zeros(10)for i in range(10):fa = FA(2, 20, 1, 0.000001, 0.97, 100, [-100, 100])time_start = time.time()fa.iterate()time_end = time.time()t[i] = time_end - time_startvalue[i], n = fa.find_min()plot(fa.X_origin, fa.X)print("平均值:", np.average(value))print("最优值:", np.min(value))print("最差值:", np.max(value))print("平均时间:", np.average(t))
如果加上,这里这个中心点实现原理不是很懂,求大神指点:
# plt.scatter(X[:, 0], X[:, 1], c='aqua') # 中心点,作为亮蓝色
(Python)萤火虫算法相关推荐
- python萤火虫算法_FA:萤火虫算法的测试及Python实现
一.Python中传递函数 def Test(a,b): print(a,b) class TEST: def __init__(self, FitnessFunction): self.Fitnes ...
- FA:萤火虫算法的测试及Python实现
一.Python中传递函数 def Test(a,b):print(a,b)class TEST:def __init__(self, FitnessFunction):self.FitnessFun ...
- 智能优化算法之萤火虫算法(FA)的实现(Python附源码)
一.萤火虫算法的实现思路 萤火虫算法(Firefly Algorithm,FA)是由Yang于2010年提出的一种群智能优化算法,在自然界中,萤火虫之间通过自身发光来吸引异性前来交配以及吸引猎物进行捕 ...
- 一种改进的进化模型和混沌优化的萤火虫算法-附代码
一种改进的进化模型和混沌优化的萤火虫算法 文章目录 一种改进的进化模型和混沌优化的萤火虫算法 1.萤火虫算法 2. 改进萤火虫算法 2.1 基于混沌优化策略的种群初始化 2. 2 基于惯性权重的进化计 ...
- 人工智能自动组方实习笔记2—萤火虫算法
本文记录的是在实习人工智能自动组方时有关聚类分类时阅读过的一篇相关论文,虽然在最后没有使用该算法思想,但我觉得这种随机搜索最优解的方法对于很多场景都有应用,则将其整理记录下来. 如果有哪位小伙伴在做相 ...
- GitHub超4.1万星,最全Python入门算法来了
本文来自公众号:超级数学建模 微信号 :supermodeling 今天,阿广给大家推荐一个好资源,一个在 Github 上超过 2.7 万星标的项目:最全算法及Python实现. 该项目主要包括两方 ...
- 计算机书籍-Python机器学习算法大全
书名:Python机器学习算法 作者:赵志勇 出版社: 电子工业出版社 ISBN:9787121313196 去当当网了解
- python中算法(sklearn)的最优超参数寻优:skopt贝叶斯搜索
python中算法(sklearn)的最优超参数寻优:skopt贝叶斯搜索 Jeff Dean在ICML 2019上进行了有关AutoML的演讲,并将自动化分为4个级别 手动构造预测变量,不引入学习的 ...
- python基本算法语句_Python中基本且又常用的算法
这篇文章主要学习Python常用算法,Python常用排序算法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algo ...
最新文章
- iOS架构-自动打包并上传到App Store(python)(21)
- libgdx 学习笔记七 Libgdx模块概述
- html mvc 分页 保存,Asp.net Mvc3 加载cshtml文件自定义分页+ 查询
- endnote 插入文献总变成乱码_维普文献导入Endnote中的乱码问题
- 聚类 python_python中实现k-means聚类算法详解
- Dotnet core使用JWT认证授权最佳实践(一)
- 历史上最有影响力的10款开源项目
- Spring拓展接口之FactoryBean
- python输入4个数字_输入4个整数,要求按从小到大的顺序输出python
- oracle迁移数据到mysql
- 什么样的人适合微信创业
- 20200710每日一句
- 安卓设备java代码编辑器_15款android设备上的代码编辑器,超级方便!-Go语言中文社区...
- windows7系统的“ .exe”图标显示不正常解决办法
- vscode 程序员鼓励师_把软萌程序猿鼓励师装进VScode里?最强交互彩虹屁,GitHub2.5k星标,爱上写代码...
- SGE安装部署完整过程-基于CentOS7
- Azkban上传文件报错installation Failed.Error chunking
- item_get - 获得搜好货商品详情
- result returns more than one elements 解决办法
- 5万块钱的笔记本,没能让苹果“炸场”
热门文章
- c语言平抛编程试题,平抛运动练习题及答案
- 机器学习(一)- 线性回归/(拟合)模型
- c语言程序设计课程设计水果,C语言程序设计课程设计报告超市水果信息管理系统...
- 一句话木马SQL注入
- 第九章 质量与变更管理
- buttongroup控件的SelectionChangeFcn的用法
- [elk]elastalert邮箱告警
- win10 无法拖动文件的简单解决方法,无需重启
- 全球及中国胶原蛋白行业发展现状及趋势分析,应用领域进一步扩大「图」
- 《JavaScript程序设计》课堂交流区问题汇总(进阶篇)