基本遗传算法如此简单!!!

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

一、前言

遗传算法有很多形式,其中较为简单的就是基本遗传算法(SGA)了,SGA 是其他遗传算法的基础。接下来我们介绍相关的知识。

二、基本遗传算法描述

我们首先介绍 SGA 的构成要素:

  1. 染色体编码方法。使用二进制字符串表示,等位基因由二值符号 { 0 , 1 } \{0,1\} 组成,初始种群的基因值满足均匀分布。
  2. 个体适应度评价。我们会根据个体适应度的大小对群体进行优胜劣汰,因为要以概率的形式接受个体,所以适应度必须 0 ≥0 。实际情况中需要自己设计。
  3. 遗传算子。SGA 只使用我们上篇文章说到的选择算子、交叉算子和变异算子。选择运算采用比例选择算子,即上篇文章中用个体适应度除以群体适应度总和;交叉运算采用单点交叉算子,只对染色体的一段进行交叉互换(而不考虑多段);变异运算采用基本位变异算子或均匀变异算子,即某些位发生基因突变。
  4. SGA 的运行参数。以下参数需通过反复实验尝试才能得到较好的结果。
    • M M :群体大小,取20~100
    • T T :终止进化代数,即迭代次数,取100~500
    • p c p_c :交叉概率,即发生交叉互换的概率,取0.4~0.99
    • p m p_m :变异概率,即个体产生基因突变的概率(而非每个基因座的突变概率),取0.0001~0.1

三、基本遗传算法的实现

接下来我们详细介绍 SGA 的构成要素。

  1. 染色体编码方法。

    (1)如 X = 1010 X=1010 为个体基因型,可表示一个个体;
    (2)染色体长度通常取二进制值域刚好能满足可行域的位数(有时也可取一半的离散点):

    2 m < ( U m a x U m i n ) × 1 0 S < 2 n 2^m<(U_{max}-U_{min})×10^S<2^n

    对应二进制编码位数为 n n U m a x , U m i n U_{max},U_{min} 分别为自变量最大值和最小值, S S 为需要精确到的位数。

  2. 个体适应度评价,即适应度函数的选取问题。

    (1)最小值优化问题。加负号转化为最大值优化问题;

    (2)目标函数总取正的最大值优化问题,直接将目标函数作为适应度函数;

    (3)目标函数有负值的最大值优化问题,适应度函数为:

    F ( X ) = { f ( X ) + C m i n f ( X ) + C m i n > 0 0 f ( X ) + C m i n 0 F(X)=\left\{ \begin{array}{rcl} f(X)+C_{min} & & {f(X)+C_{min}>0}\\ 0 & & {f(X)+C_{min}≤0}\\ \end{array} \right.

    其中 C m i n C_{min} 为一个相对较小的数,有三种选择方法:

    (a) 预先指定较小的数
    (b) 进化到当前代为止的最小目标函数值
    (c ) 当前代或近几代群体中的最小目标函数值

    (4)目标函数有负值的最小值优化问题,适应度函数为:
    F ( X ) = { C m a x f ( X ) f ( X ) < C m a x 0 f ( X ) C m a x F(X)=\left\{ \begin{array}{rcl} C_{max}-f(X) & & {f(X)<C_{max}}\\ 0 & & {f(X)≥C_{max}}\\ \end{array} \right.
    其中 C m a x C_{max} 是一个相对较大的值,选择方法同上。

  3. 比例选择算子。执行过程如下:
    (1)计算群体适应度总和;

    (2)计算相对适应度,即用个体适应度除以群体适应度总和;

    (3)模拟赌盘操作确定个体被选择的次数。概率大的个体被选择遗传下去的个数多。

  4. 单点交叉算子。执行过程如下:

    (1)个体两两配对,人为指定;

    (2)随机设置某基因座后为交叉点。若染色体长度为 n n ,则交叉点可选位置为 n 1 n-1 ,即不能发生不交叉的情况;

    (3)每对个体根据交叉概率 p c p_c 进行交换。示意图如下:

在这里插入图片描述

  1. 基本位变异算子。执行过程如下:

    (1)依据概率 p m p_m 对每个基因座指定为变异点;

    (2)对于变异点,基因值取反或用其他值代替。

实际上,遗传算法就是一个迭代的过程,每次迭代进行相同操作。我们通过一个例题来解释上文中的知识点:

【例】Rosenbrock 函数的全局最大值计算。
m a x   f ( x 1 , x 2 ) = 100 ( x 1 2 x 2 ) 2 + ( 1 x 1 ) 2 max\ f(x_1,x_2)=100(x_1^2-x_2)^2+(1-x_1)^2

s . t .   2.048 x i 2.048   ( i = 1 , 2 ) s.t.\ -2.048≤x_i≤2.048\ (i=1,2)

例题已经给我们了数学模型,我们直接运用遗传算法即可。

  1. 确定编码方法。 x 1 , x 2 x_1,x_2 分别用 10 位二进制编码表示,则每个变量可取的离散值为 1024 个,表示 2.048 x i 2.048 -2.048≤x_i≤2.048 间的一半离散点。将 x 1 , x 2 x_1,x_2 的编码连接。

  2. 确定解码方法。即用解码公式将上述编码方式转换回变量值,此例题的解码公式根据区间比例容易得到:
    x i = 4.096 × y i 1023 2.048 x_i=4.096×\frac{y_i}{1023}-2.048

  3. 因为目标函数非负且要求全局最大值,则个体评价方法可直接用目标函数。遗传算子及运行参数与前面相同不再赘述。

在不断进化(迭代)的过程中,适应度高的个体越来越多,并集中在最优点附近,从而可以求得最优解。

猜你喜欢

转载自blog.csdn.net/weixin_44413191/article/details/107196732
今日推荐