本文为《遗传算法原理及应用》绪论 学习总结
一、遗传算法的生物学基础
遗传算法是根据生物遗传的原理而产生的一类算法,我们了解遗传算法前首先要理解有关遗传的生物学基础,这一部分相信大家在高中生物中多少有一定的了解了,因此我简要介绍一下相关知识:
生物在将自己的基因遗传给下一代时,两个同源染色体之间通过交叉而重组,就是高中说的交叉互换。
变异即基因突变。
生物进化是以种群为单位的,这个种群称为群体,群体中的单个生物称为个体。
二、遗传算法简介
在介绍了相关基础后,我们来介绍遗传算法概要:
下图为最优化问题的可行解及可行解集合:
其中可行解集合对应群体,可行解对应个体,最优化问题即求解群体中的最优个体。
我们求解最优解或近似最优解的方法有三种:
- 枚举法:枚举法是枚举出所有可行解。若为连续函数则需要进行离散化,但缺点是可能产生离散误差而无法求得最优解;
- 启发式算法:需要根据特定的问题找出启发式规则,算法不具有通用性,但求解效率较高;
- 搜索算法:分为局部搜索和全局搜索。其中局部搜索的代表算法为爬山算法,我们这本书教授的遗传算法则为全局搜索。
接下来我们直接给出遗传算法的流程图,然后对其进行解释:
首先对种群
进行编码便于计算机处理。在种群
进化的过程中,我们使用遗传算子得到
,然后进行解码得到解集合,然后做出个体评价进行优胜劣汰,最后得到新群体。以此不断循环,我们通常对循环次数进行控制。
接下来解释图中每部分的说明:
首先是遗传算子,我们通常进行 3 个遗传操作产生新群体:
- 选择:根据个体适应度,对个体进行优胜劣汰;
- 交叉:我们模仿细胞中的染色体交叉互换过程,对个体的部分染色体进行交换;
- 变异:以某一概率产生基因突变,突变可以是一个或多个基因。
在对遗传算法进行了简单介绍后,我们尝试手动模拟计算一个简单的遗传算法,对前面的知识进行巩固:
【例】求下述二元函数的最大值:
我们用上述流程图的过程进行计算,自己也在纸上动手算一下吧。计算过程如下:
-
个体编码。这里采用字符串的形式, 都是 0~7 之间的整数,因此我们可以用 3 位二进制数表示,例如基因型 对应的表现型为: .
-
初始种群的产生。在这个例子中取种群规模=4,每个个体通过随机方法产生,得到②。③、④为解码的结果,即表现型;
-
适应度计算。我们根据本例目标函数的特点,直接将目标函数值作为个体适应度,并计算群体适应度的总和及最大值、平均值,见⑤
-
选择运算。选择运算是一个优胜劣汰的过程,新的种群只保留部分适应度高的个体的基因。本例中用适应度/总适应度作为适应度概率确定被保留的个体,见图⑥。适应度概率高的个体遗传给下一代的几率更大,通过产生随机函数得到选择结果为⑦、⑧;
-
交叉运算。随机交换 2 个个体的染色体。比如个体 3-4 进行配对,其交叉点位置为 4,则将第 4 个基因以后的染色体片段进行交换,见⑩。得到新个体,见 序号11:
-
变异运算。随机对基因进行改变,0 变 1,1 变 0。变异过程见 序号12、13.
最后,我们将得到的变异结果作为新种群,按照上述方法继续迭代,直到达到我们规定的迭代次数后算法停止。
希望大家能够通过这次基础讲解,对遗传算法有一个基本的了解。关于遗传算法的更多学习后续会更新。