写在算法之前:1、遗传算法的本质是优胜劣汰,优胜劣汰的方法是轮盘赌选择。
2、学习遗传算法程序的关键是:遗传算法使用的情境是什么,如何在情境中使用遗传算法。遗传算法只是理论,你如何在实际的情境中构造它?还有的关键是:了解什么时候认为遗传算法已经成功。
本文主要对遗传算法的程序进行讲解,由于作者非计算机专业出身,因此不涉及SDK程序设计,这个我是一点都不懂。
先说理论,参考扬天齐编著的《人工智能及其应用》,遗传算法的几个名词为:
1.种群(Population):初始给定的多个解的集合。也就是刚开始的时候,生成一系列随机的染色体,这些染色体会进行交叉,变异等操作。那么初始的生成的这么些染色体就是种群。
2.基因(Gen):这个还未定。到底是表示染色体中的某个位,还是表示种群中的其中一个元素?
3.染色体(Chromos):表示对种群中的某一元素进行编码,也就是我们所看到的1100111这个东西。
4.适应度(Fitness)函数:如何来对种群中的染色体进行优胜劣汰?这就靠适应度函数了,每个染色体对应一个适应度函数。那么,当然是适应度函数越高的染色体更优秀,容易在竞争中生存下来。
5.操作:对染色体的三种操作:选择(Selection)、交叉(Crossover)、变异(Mutation)。
遗传算法的步骤为