遗传算法基础

1. 遗传算法简介

遗传算法(Genetic Algorithm, GA)是模拟生物在自然环境中的遗传和进化的过程而形成的自适应全局优化搜索算法。它借用了生物遗传学的观点,通过自然选择、遗传和变异等作用机制,实现各个个体适应性的提高。

1.1 生物学基础

生物遗传和进化的规律:

  • 生物的所有遗传信息都包含在其染色体中,染色体决定了生物的性状。染色体是由基因及其有规律的排列所构成的。
  • 生物的繁殖过程是由其基因的复制过程来完成的。同源染色体的交叉变异会产生新的物种,使生物呈现新的性状。
  • 对环境适应能力强的基因或染色体,比适应能力差的基因或染色体有更多的机会遗传到下一代。

1.2 基本概念

遗传学术语 遗传算法术语
群体 可行解集
个体 可行解
染色体 可行解的编码
基因 可行解编码的分量
基因形式 遗传编码
应适度 评价函数值
选择 选择操作
交叉 交叉操作
变异 变异操作

1.2.1 群体和个体

  • 个体就是模拟生物个体而对问题中的对象(一般就是问题的解)的一种称呼,一个个体也就是搜索空间中的一个点。
  • 种群(population)就是模拟生物种群而由若干个体组成的群体, 它一般是整个搜索空间的一个很小的子集。

1.2.2 染色体和基因

  • 染色体(chromosome)就是问题中个体的某种字符串形式的编码表示。
  • 字符串中的字符也就称为基因(gene)。

1.2.3 遗传编码

二进制编码方法是遗传算法中最常用的一种编码方法,它使用的编码符号集是由二进制符号\(0\)\(1\)所组成的二值符号集\(\{0,1\}\),它所构成的个体基因型是一个二进制编码符号串。

假设某一参数的取值范围是\([u_{\rm{min}},u_{\rm{max}}]\),用长度为\(L\)的二进制编码符号来表示该参数。则它总共能够产生\(2^L\)种不同的编码,参数编码时的对应关系如下:

\[\begin{aligned} & 000\cdots 000 = 0 & u_{\min} \\ & 000\cdots 001 = 1 & u_{\min}+\delta \\ & \cdots & \cdots \\ & 111\cdots 111 = 2^\lambda-1 & u_{\max} \\ \end{aligned} \]

二进制编码的精度为:

\[\delta=\dfrac{u_{\max}-u_{\min}}{2^\lambda -1} \]

假设某一个体的编码是:\(x:b_\lambda b_{\lambda-1} b_{\lambda-2} \cdots b_{2}b_{1}\),则对应的解码公式为:

\[x = u_{\min}+\left(\sum_{i=1}^{\lambda}{b\cdot 2^{i-1}}\right)\delta \]

1.3 遗传操作

1.3.1 选择操作

选择操作,是从旧的种群中选择适应度高的染色体,放入匹配集(缓冲区),为以后染色体交换、变异,产生新的染色体作准备。

适应度比例法,也叫作轮盘赌、转轮法,按各染色体适应度大小比例来决定其被选择数目的多少。第\(i\)个染色体被选的概率为:

\[P_{ci}=\dfrac{f\left(x_i\right)}{\sum_{j=1}^{N_p}{f\left(x_j\right)}} \]

式中,\(x_i\)为种群中的第\(i\)个染色体;\(f\left(x\right)\)为染色体的适应度函数;\(N_p\)为种群大小。

1.3.2 交叉操作

交叉操作,是指对两个相互配对的染色体依据交叉概率\(P_c\)按某种方式相互交换其部分基因,从而形成两个新的个体。

具体方法: 随机选择二个染色体(双亲染色体),随机指定一点或多点, ,进行交换,可得二个新的染色体(子辈染色体)。

双亲染色体如下,\({\color{red}|}\)为交换点,

\[\begin{aligned} A\quad & 11010{\color{red}|}110 \\ B\quad & 01011{\color{red}|}011 \\ \end{aligned} \]

则通过交叉操作,产生的新的子辈染色体为

\[\begin{aligned} A'\quad & 11010{\color{red}0\color{red}1\color{red}1} \\ B'\quad & 01011{\color{red}1\color{red}1\color{red}0} \\ \end{aligned} \]

1.3.3 变异操作

变异操作,即_基本位突变算子_是指对个体编码串随机指定的某一位或某几位基因作突变运算。

对于基本遗传算法中用二进制编码符号串所表示的个体,若需要进行突变操作的某一基因座上的原有基因值为0,则突变操作将其变为1;反之,若原有基因值为1,则突变操作将其变为0 。

变异产生染色体的多样性,避免进化中早期成熟,陷入局部极值点,突变的概率很低。

父辈染色体如下,\({\color{red}|}\)为变异点,

\[\begin{aligned} A\quad & 1101{\color{red}|}011{\color{red}|}0 \\ \end{aligned} \]

则通过变异操作,产生的新的子辈染色体为

\[\begin{aligned} A'\quad & 1101{\color{red}1\color{red}0\color{red}0}0 \\ \end{aligned} \]

2. 算法内容

2.1 遗传算法流程

  1. 初始化。设置进化代数计数器\(g=0\),设置最大进化代数\(G_{\max}\),随机生成\(N_p\)个个体作为初始群体\({\bf{P}}\left(g\right)\)
  2. 个体评价。计算群体\({\bf{P}}\left(g\right)\)中各个个体的适应度。
  3. 选择操作。将选择算子作用于群体,根据个体适应度,按照一定的规则或方法,选择一些优良个体遗传到下一代群体。
  4. 交叉操作。将交叉算法作用于群体,对选中的成对个体,以某一概率交换它们之间的部分染色体,产生新的个体。
  5. 变异操作。将编译算子作用于群体,对选中的个体,以某一概率改变某一个或某一些基因值为其他的等位基因。
  6. 终止条件判断。若\(g\leq G\),则\(g=g+1\),转到步骤2,若\(g>G\),则进化过程中所得到的具有最大适应度的个体作为最优解输出,终止计算。

2.2 关键参数说明

  • 种群规模 \(N_p\):群体规模将影响遗传优化的最终结果以及遗传算法的执行效率。一般\(N_p\)取10到200。
  • 交叉概率 \(P_c\):交叉概率\(P_c\)控制着交叉操作被使用的频度。一般\(P_c\)取0.25到1.00。
  • 变异概率 \(P_m\):变异在遗传算法中属于辅助性的搜索操作,它的目的是保持群体的多样性。一般\(P_m\)取0.001到0.1。
  • 最大进化代数 \(G_{\text{max}}\):最大进化代数\(G_{\max}\)是表示遗传算法运行结束条件的一个参数,表示遗传算法运行到指定代数之后就停止运行。一般\(G_{\max}\)取100到1000,视具体情况而定。

3. Matlab实现

3.1 遗传算法求解函数极值

\(f(x)=x-10\sin(5x)+7\cos(4x)\)的最大值,其中\(x\)的范围为\(x\in[0,10]\)

遗传算法计算结果

遗传算法迭代曲线

3.2 遗传算法求解旅行商问题

使用遗传算法求解旅行商问题,求解路程最短的路径。

posted @ 2022-07-15 16:33  亦贤  阅读(569)  评论(0)    收藏  举报