遗传算法的基本运行过程包括编码、选择、交叉和变异,包括二进制算法和浮点数算法,下面分别加以介绍。
8.4.3.1 二进制编码遗传算法
(1)染色体编码(coding)。在二进制染色体编码中,二进制串的长度取决于变量所要求的精度。设变量的取值区间为[a,b],要求精度为小数点后n 位,则染色体串v 的长度m 由式(8.8)确定:
二进制编码v 转换成对应的十进制编码x′的公式为:
式中:m为染色体串v 的长度。
十进制编码x′与实数变量x 的转换公式为:
例如在求解一个函数极大值问题时,取值区间为[0,10],精度要求为精确到小数点后6位,由式(8.8)计算得二进制染色体串的长度m=24。若种群规模为P=20,通过随机产生了20个长度为24的二进制串(染色体)v1,v2,…,v20。此时就完成了染色体的二进制编码。
(2)染色体的适应值计算。设问题的适应度函数fit(x)=f(x),如第10 个染色体为:
则由式(8.9)和式(8.10)计算对应的实数变量为x10=3.309060。由此可以计算第10个染色体的适应度函数值fit(v10)=f(3.309060)),同样可以计算其他染色体的适应值fit(v1),fit(v2),…,fit(v20)。
(3)染色体选择(selection)。在遗传算法的进化过程中,对染色体的评价目的是为了选择哪些染色体进入下一代。常用的方法是“轮盘赌选择”,其基本思想是根据各染色体的适应值大小与全体染色体适应值之和的比值,确定染色体被选择进入下一代的概率。适应值越大进入下一代的可能性越大,反之越小。各染色体的累积概率计算公式为:
在进行选择操作时,首先在[0,1]内产生一个随机数r,若
(4)交叉或基因重组(crossover/recombination)。交叉是结合来自父代交配种群中的信息产生新的个体。依据个体编码方法的不同,有单点交叉、多点交叉、均匀交叉、洗牌交叉及缩小代理交叉等。这里采用最简单的单点交叉法说明交叉运算的方法。
(5)变异(mutation)。交叉之后子代经过的变异,实际上是子代基因按小概率扰动产生的变化,即染色体中某个1 与0相互转换。变异操作的过程如下。
8.4.3.2 浮点编码遗传算法
与二进制编码的遗传算法类似,浮点编码遗传算法的运算过程也包括编码、选择、交叉、变异,但具体操作方法有所不同。
(1)浮点编码。浮点编码采用自然的表达形式,每个染色体向量被编码成一个与解向量长度相同的浮点向量。
仍以求解函数极大值为例说明浮点编码遗传算法的运行过程。设变量的取值区间为[0,10],要求精确到小数点后6 位,种群规模为P=20,于是在[0,10]区间内均匀随机产生20个浮点数作为初始种群x1,x2,…,x20,同时计算各染色体的适应值fit(x1),fit(x2),…,fit(x20)。(www.xing528.com)
(2)染色体选择。这里采用标准化几何分布规律对染色体进行随机选择,以最佳染色体的选择概率ps为参数,按照染色体的排列序号计算其选择概率。操作步骤如下。
第一步:根据预先确定的选择概率ps,计算标准分布值,其计算公式如下:
第二步:计算染色体的选择概率,公式如下:
式中:N(k)为第k 个染色体的适应值在种群中从大到小排列的序号,k=1,2,…,P。
第三步:计算染色体的累积概率,公式如下:
(3)交叉运算。与二进制算法一样,浮点遗传算法的交叉运算方法很多,这里采用线性交叉的方式说明运算步骤。
第一步:设定交叉率pc,然后计算交叉运算的次数:
式中:nc为交叉次数;[]为取整;P 为种群规模。
(4)变异运算。采用非均匀变异计算方法,即各代参与变异操作的染色体的变异量是非均匀变化的,计算步骤如下。
第一步:确定变异率pm 和形状系数b。
第二步:计算变异的操作次数nm =[pmP],P 为种群规模,[]表示取整。
第三步:在种群中随机选取变异操作的父代xl(l =1,2,…,nm)。
第四步:计算染色体xl 的变异量,计算公式如下:
式中:x 为参与变异操作的染色体;bl、br 分别为取值区域的左、右边界;sign为随机产生的符号标记。
第五步:计算由父代xl 变异产生的后代x′l:
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。