遗传算法(四) |
您所在的位置:网站首页 › 基因型AaXBXb交叉互换 › 遗传算法(四) |
交叉(Crossover)
在上一篇文章所描述的选择过后,我们在一个population中选出了一部分可以用作交配的父母个体,而染色体交叉操作,就是指我们在这些父母个体中,选择两个进行相互交配,将他们的染色体按照某种方式相互交换部分基因,形成两个新的个体的过程。 实际上交叉操作还分为无性、有性、多亲重组三种: 无性:子代由一个父个体产生有性:子代由两个父个体产生一个/两个子个体多亲重组:多余两个父个体产生一个/多个子个体适用于二进制编码的交叉算子: 单点交叉(One-point Crossover):指在个体编码串中只随机设置一个交叉点,将染色体分成两部分,子代染色体的左右两侧分别来自于父母染色体。![]() ![]() 适用于浮点数/实数编码的交叉算子: 离散重组:子个体的每一个变量按照等概率随机地挑选父母个体的变量值,组成新的子个体。![]() ![]() ![]() ![]() 模拟二进制交叉SBX(Simulated Binary Crossover) SBX方法的主要思想是在使用浮点数编码/实数编码时,可以模拟二进制编码的交叉操作: 混合交叉算子BLX(the Blend Crossover operator) 关于交叉操作有些优秀的博文推荐阅读: 遗传算法中几种交叉算子小结 Simulated Binary Crossover(SBX)的学习 SBX(Simulated binary crossover)模拟二进制交叉算子和DE(differential evolution)差分进化算子 百度文库-遗传算法 变异(Mutation)在交叉操作过后形成的新个体,有一定的概率会发生基因变异,与选择操作一样,这个操作是基于概率的,这个概率成为变异概率 p m p_m pm。一般来说变异概率设置得很小,一般 p m ≤ 0.05 p_m≤0.05 pm≤0.05。 适用于二进制编码和实数编码的变异算子: 最简单的做法就是:对交叉后代集中每个后代的每一位,产生一个随机数 r ⊂ [ 0 , 1 ] r\subset[0,1] r⊂[0,1],若 r ≤ p m r≤p_m r≤pm则将该位取反,否者该位不变。 基本位变异(Simple Mutation):对个体编码串中以变异概率、随机指定的某一位或某几位仅因座上的值做变异运算。均匀变异(Uniform Mutation):分别用符合某一范围内均匀分布的随机数,以某一较小的概率来替换个体编码串中各个基因座上的原有基因值。(特别适用于在算法的初级运行阶段)边界变异(Boundary Mutation):随机的取基因座上的两个对应边界基因值之一去替代原有基因值。特别适用于最优点位于或接近于可行解的边界时的一类问题。非均匀变异:对原有的基因值做一随机扰动,以扰动后的结果作为变异后的新基因值。对每个基因座都以相同的概率进行变异运算之后,相当于整个解向量在解空间中作了一次轻微的变动。高斯近似变异:进行变异操作时用符号均值为P的平均值,方差为P**2的正态分布的一个随机数来替换原有的基因值。另外: 如果变异概率很大,那么整个搜索过程就退化为一个随机搜索过程。所以,比较稳妥的做法是,进化过程刚刚开始的时候,取p为一个比较大的概率,随着搜索过程的进行,p逐渐缩小到0附近。 关于变异操作有些优秀的博文推荐阅读: 遗传算法系列 (4) 变异算法 【建模必备】遗传算法的基本原理与步骤(变异) 百度文库-遗传算法 替换策略除了父子个体的选择、重组、变异之外,还需要考虑的是替换策略——生成的新个体如何取代旧的个体。 有如下几种: 如果生成一个子个体,可以用来替换掉最差的父个体。这个替换规则可以(或必须)基于子个体的适应度优于父个体。玻尔兹曼(Boltzmann)选择可以用来确定子个体是否替换父个体。新的子个体替换掉种群中的劣势个体。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |