-
Geatpy是一个高性能的Python遗传算法库以及开放式进化算法框架,由华南理工大学、华南农业大学、德州奥斯汀公立大学的学生联合团队开发。
- Website (including documentation): http://www.geatpy.com
- Contact us: https://www.geatpy.com/supports
- Source: https://github.com/geatpy-dev/geatpy
- Bug reports: https://github.com/geatpy-dev/geatpy/issues
(注意:Geatpy已于2018.10.18更新至1.1.0版本,这是一个内核更新,新版本提供了一个新的数据结构:LegV,用于保存种群个体的可行性,即标记了哪些是可行解哪些是非可行解。并给出了求解约束优化问题两大基本方法。在多目标优化上,提供了新的内核函数redisNDSet,用于计算帕累托最优解集的拥挤距离,使得帕累托前沿点分布更加均匀。在单目标优化上,提供了新的内核函数sgaplot,可以绘制进化过程中的动态图)。
由于数据结构的改进和内核的全面升级,v1.1.*版本与v1.0.*版本并不相互兼容,因此需要及时更新。
Geatpy提供了许多已实现的遗传和进化算法相关算子的库函数,如初始化种群、选择、交叉、变异、重插入、多种群迁移、多目标优化非支配排序等,并且提供开放式的进化算法框架来实现多样化的进化算法。其执行效率高于Matlab遗传算法工具箱和Matlab第三方遗传算法工具箱Gaot、gatbx、GEATbx,学习成本低。
Geatpy支持二进制/格雷码编码种群、实数值种群、整数值种群、排列编码种群。支持轮盘赌选择、随机抽样选择、锦标赛选择。提供单点交叉、两点交叉、洗牌交叉、部分匹配交叉(PMX)、线性重组、离散重组、中间重组等重组算子。提供简单离散变异、实数值变异、整数值变异、互换变异等变异算子。支持随机重插入、精英重插入。支持awGA、rwGA、nsga2、快速非支配排序等多目标优化的库函数、提供进化算法框架下的常用进化算法模板等。
关于遗传算法、进化算法的学习资料,在官网中https://www.geatpy.com 有详细讲解以及相关的学术论文链接。同时网上也有很多资料。
闲话少说……下面讲一下怎么安装和使用:
先说一下安装方法:
首先是要windows系统,Python要是3.5,3.6或3.7版本 ,并且安装了pip。只需在控制台执行
有些初学Python的读者反映还是不知道怎么安装,或者安装之后不知道怎么写代码。这里推荐安装Anaconda,它集成了Python的许多常用的运行库,比如Numpy、Scipy等。其内置的Spyder风格跟Matlab类似,给人熟悉的感觉,更容易上手。
再说一下更新方法:
Geatpy在持续更新。可以通过以下命令使电脑上的版本与官方最新版保持一致:
1. 编写脚本实现遗传算法:
用过谢菲尔德大学的Matlab遗传算法库Gatbx以及其升级版——GEATbx的朋友应该非常熟悉下面的Matlab脚本:
这是在Matlab的gatbx工具箱下实现简单遗传算法搜索f(x)=x*sin(10*pi*x)+2.0,在[-1,2]上的最大值的脚本程序,运行结果如下:
时间已过 0.051572 秒。
ans =
result = 3.850224
再看一下在Geatpy上如何编写脚本:
运行结果如下:
目标函数最大值: 3.850273756279405
用时: 0.04900471389770508对比发现,Geatpy的运行效率要高于Matlab,而且结果较好。
对比Matlab代码和Python代码,我们会发现Geatpy提供风格极为相似的库函数,有Matlab相关编程经验的基本上可以无缝转移到Python上利用Geatpy进行遗传算法程序开发。
Geatpy提供了详尽的API文档,比如要查看上面代码中的"ranking"函数是干什么的,可以在python中执行
即可看到"ranking"函数的相关使用方法。另外也可以参见github上面的文档:
https://github.com/geatpy-dev/geatpy/tree/master/geatpy/doc
另外官网上也有更多详尽的Geatpy教程,Geatpy官网http:www.geatpy.com将于九月初重新上线。
2. 利用框架实现遗传算法。
Geatpy提供开放的进化算法框架。即“函数接口”+“进化算法模板”。对于一些复杂的进化算法,如多目标进化优化、改进的遗传算法等,利用上面所说的编写脚本是非常麻烦的,改用框架的方法可以极大提高编程效率。
这里给出一个利用框架实现NSGA-II算法求多目标优化函数ZDT-1的帕累托前沿面的例子:
首先编写函数接口文件:
运行结果如下:
用时: 7.359716176986694 秒
帕累托前沿点个数: 479 个
单位时间找到帕累托前沿点个数: 65 个可以改用moea_q_sorted_templet快速非支配排序的多目标优化进化算法模板,可以得到更好的效率和更好的结果:
进化算法的核心算法逻辑是写在进化算法模板内部的,代码是开源的,我们可以参考Geatpy进化算法模板的源代码来自定义算法模板,以实现丰富多样的进化算法,如差分进化算法、改进的遗传算法等:
https://github.com/geatpy-dev/geatpy/tree/master/geatpy/source-code/templets
后面的博客将深入理解Geatpy的库函数用法,以及探讨框架的核心——进化算法模板的实现。还会讲一些使用Geatpy解决问题的案例。欢迎继续跟进~感谢!
下一篇:Python遗传和进化算法框架(二)Geatpy库函数和数据结构