简介
最近做一个项目要用到人工智能,于是了解了一下神经网络和相关的常用算法,其中遗传算法(Genetic Algorithm,简称 GA)最为有趣,因为我喜欢自然和生物:)
遗传算法基本思想来自于达尔文的进化论和孟德尔的遗传学说,模拟自然选择的过程,生物群落在繁殖的过程中产生基因交叉和突变,优胜劣汰。总体来说是一种带有随机性的启发式算法,可以在整个问题空间搜索,逐步逼近最优解。更详细介绍有很多书籍、论文和网上的文章,这里不再赘述。
关键流程
1.产生初始种群
上帝创造一批良莠不齐的生物
2.计算适应度
生物展开生存竞争
3.根据适应度选择交叉
嘿咻繁殖,越适应环境的产生下一代的概率越大
4.变异
被雷劈变成超级生物,或者被蜘蛛咬变成蜘蛛侠,极小概率事件
5.循环 2~4 的过程,直到满足退出条件
经典测试函数
本例计算其在区间 [-1, 2] 上的最大值,采用实数编码、单点交叉、赌轮选择。
代码
三个主要类: Defs 包含常量定义, FunctionProblem 求解的问题, Program 启动算法主程序,为简单起见,就不考虑其通用性了。