||
自2003年暑假学习演化计算后,也曾尝试学习一下一个基本的遗传算法,但一直没有进行下去,觉得太复杂了。
其实简单的遗传算法描述是容易理解的,只是一些用C语言写的代码太复杂,让人一看就不想再学了。像写一个“Hello,world”一样写智能算法,这一直是我想要的。
2020年寒假20多天的居家,总算静下心来,终于完成了遗传算法的Java实现,此后继续学习了6个演化算法,觉得有所收获,在此分享。
面向对象的软件工程是为解决“软件危机”而提出的,而基于面向对象设计的遗传算法,自然极大降低了学习的难度。
以求解一个一元函数的极大值为例:
1)个体,即问题的可能解。它是我们研究的对象,个体类包含属性为:编码串,自变量的最大、小值,码长;方法有:个体构建器、解码器、计算适度器。(该个体类其他多个智能算法同样可用)
2)种群,由个体对象通过组合机制构成,简单的说就是个体的数组。种群类中的属性为:个体的父代数组,个体的子代数组,交叉率,变异率;包括方法:初始化方法、选择算子、交叉算子、变异算子和集成器(算子组合)。
3)主类,创建一个种群类的实例,通过迭代多次输出最优适度个体即可。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-22 19:55
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社