几分钟带你走进遗传算法

本文为《遗传算法原理及应用》绪论 学习总结

一、遗传算法的生物学基础

遗传算法是根据生物遗传的原理而产生的一类算法,我们了解遗传算法前首先要理解有关遗传的生物学基础,这一部分相信大家在高中生物中多少有一定的了解了,因此我简要介绍一下相关知识:

生物在将自己的基因遗传给下一代时,两个同源染色体之间通过交叉而重组,就是高中说的交叉互换。

变异即基因突变。

生物进化是以种群为单位的,这个种群称为群体,群体中的单个生物称为个体。

二、遗传算法简介

在介绍了相关基础后,我们来介绍遗传算法概要:

下图为最优化问题的可行解及可行解集合:
在这里插入图片描述
其中可行解集合对应群体,可行解对应个体,最优化问题即求解群体中的最优个体。

我们求解最优解或近似最优解的方法有三种:

  1. 枚举法:枚举法是枚举出所有可行解。若为连续函数则需要进行离散化,但缺点是可能产生离散误差而无法求得最优解;
  2. 启发式算法:需要根据特定的问题找出启发式规则,算法不具有通用性,但求解效率较高;
  3. 搜索算法:分为局部搜索和全局搜索。其中局部搜索的代表算法为爬山算法,我们这本书教授的遗传算法则为全局搜索。

接下来我们直接给出遗传算法的流程图,然后对其进行解释:
在这里插入图片描述
首先对种群 P ( t ) P(t) 进行编码便于计算机处理。在种群 P ( t ) P(t) 进化的过程中,我们使用遗传算子得到 P ( t + 1 ) P(t+1) ,然后进行解码得到解集合,然后做出个体评价进行优胜劣汰,最后得到新群体。以此不断循环,我们通常对循环次数进行控制。

接下来解释图中每部分的说明:

首先是遗传算子,我们通常进行 3 个遗传操作产生新群体:

  1. 选择:根据个体适应度,对个体进行优胜劣汰;
  2. 交叉:我们模仿细胞中的染色体交叉互换过程,对个体的部分染色体进行交换;
  3. 变异:以某一概率产生基因突变,突变可以是一个或多个基因。

在对遗传算法进行了简单介绍后,我们尝试手动模拟计算一个简单的遗传算法,对前面的知识进行巩固:

【例】求下述二元函数的最大值:
m a x f ( x 1 , x 2 ) = x 1 2 + x 2 2 max f(x_1,x_2)=x_1^2+x_2^2

s . t . x 1 0 , 1 , , 7 s.t. x_1∈{0,1,…,7}

x 2 0 , 1 , , 7 x_2∈{0,1,…,7}

我们用上述流程图的过程进行计算,自己也在纸上动手算一下吧。计算过程如下:
在这里插入图片描述

  1. 个体编码。这里采用字符串的形式, x 1 , x 2 x_1,x_2 都是 0~7 之间的整数,因此我们可以用 3 位二进制数表示,例如基因型 X = 101 , 110 X=101,110 对应的表现型为: X = [ 5 , 6 ] T X=[5,6]^T .

  2. 初始种群的产生。在这个例子中取种群规模=4,每个个体通过随机方法产生,得到②。③、④为解码的结果,即表现型;

  3. 适应度计算。我们根据本例目标函数的特点,直接将目标函数值作为个体适应度,并计算群体适应度的总和及最大值、平均值,见⑤

  4. 选择运算。选择运算是一个优胜劣汰的过程,新的种群只保留部分适应度高的个体的基因。本例中用适应度/总适应度作为适应度概率确定被保留的个体,见图⑥。适应度概率高的个体遗传给下一代的几率更大,通过产生随机函数得到选择结果为⑦、⑧;

  5. 交叉运算。随机交换 2 个个体的染色体。比如个体 3-4 进行配对,其交叉点位置为 4,则将第 4 个基因以后的染色体片段进行交换,见⑩。得到新个体,见 序号11:
    在这里插入图片描述

  6. 变异运算。随机对基因进行改变,0 变 1,1 变 0。变异过程见 序号12、13.

最后,我们将得到的变异结果作为新种群,按照上述方法继续迭代,直到达到我们规定的迭代次数后算法停止。

希望大家能够通过这次基础讲解,对遗传算法有一个基本的了解。关于遗传算法的更多学习后续会更新。

猜你喜欢

转载自blog.csdn.net/weixin_44413191/article/details/107192875