改进的实数编码遗传算法及C++实现

写在前面:博客内容来自我一次课程大作业。过了很久才想起来把它贴出来和大家分享交流,我把我对遗传算法的理解贴出来,欢迎大家批评指针。无论是遗传算法还是差分进化算法,课堂上学的主要是它们的主要框架或者说经典原理,真正到实际应用还是需要进行很多优化,下面的内容是读了很多文献我自己的综合理解,且内容写的比较早一些在实际程序中改正的东西文中或许没有改,纰漏存在,大家辨证看。后面附上程序c++实现的链接,以那个为主。

优化具体部分可以看链接的简略介绍。

3算法原理与计算步骤

3.1经典遗传算法

3.1.1经典遗传算法的基本原理

         遗传算法是模拟自然界生物的优胜劣汰的遗传和进化的过程形成一种自适应性、全局性的概率搜索算法。它从问题的可能潜在解集的一个种群开始,首先将表现型映射到基因型即编码,从而将解空间映射到编码空间,每个编码对应问题的一个解,称为染色体或个体。然后评估每个个体的对应的适应度;在每一代,根据问题域中个体的适应度大小选择个体,并借助自然遗传学的遗传算子进行组合交叉和变异,产生出代表新的解集的种群。这个过程使种群像自然进化一样,后代种群比前代更加适应于环境,末代种群中的最优个体经过解码可以作为问题近似最优解。遗传算法的主要步骤包括染色体编码、种群初始化、评估适应度、进化操作几大部分,后面将一一介绍。下面先介绍遗传算法和生物进化概念相对应的几个术语。

    进化:仿照生物在自然界中生存,逐渐适应生存环境,改良基因的过程,表示在搜索空间中寻找最优解的过程。个体:与遗传算法所要解决的实际问题中的一种可能解想对应,一个解对应一个个体,在问题限定的搜索空间对应一个点。种群:与实际问题一组可能的解对应,在限定的搜索空间中点的集合。种群规模:种群中个体数目,搜索空间点的个数。编码:一个问题的可行解从其解空间转换到遗传算法所能处理的搜索空间的转换方法。解码:搜索空间的点到问题解空间转化的方法。基因:表示个体特征的个体编码串中的元素。适应度:模拟生物在自然选择中对生长环境的适应程度,对应实际问题的评价指标。选择:按适应度大小从父代种群选择个体使其基因能够遗传的过程。对应问题较优解被选中以便进行进一步操作。交叉:生物进化中基因重组,对应搜索空间中点的大幅迁移以寻找最优解。变异:生物进化时基因位可能产生突变,变异也可能调节搜索空间中点的位置以寻求最优解。交叉概率:进行交叉操作的个体占进行繁衍的个体集的比例一般用Pc表示。变异概率:子代个体中发生基因突变的概率。

        但是,仅有经典的遗传算法够用吗,聪明的你可以用简单的GA写一个测试程序看看。

 

3.1.2、编码

         遗传算法需要将问题解空间的参数转化为遗传算法搜索空间中由基因组成的个体,这个映射的过程叫做编码。映射关系如图3.1所示。

图3.1 编码映射关系

         编码策略一般需要满足:完备性、健全性、非冗余性三个原则【14】。完备性:问题空间所有解都能由遗传算法搜索空间中的个体表现。健全性:问题空间的任何一个解都可以在遗传算法搜索空间中找到染色体与之对应。非冗余性:对于问题空间中的任意一个解,在遗传算法搜索空间中有且仅有一个染色体与之对应。编码方法一般由算法所要解决的实际问题决定,不同的编码方案也会影响到算法的效率。一般常见的编码方案有二进制编码、实数编码、字符编码等。二进制编码使用字符集0,1组成的位串表示问题空间的参数,简单易用,但存在海明悬崖问题,在求解最优化问题时缺陷较大。实数编码在解决函数优化问题比二进制编码更有效,实数编码搜索空间的拓扑结构和问题空爱你的拓扑结构相似。本文所设计的算法使用的是实数编码。

 

3.1.3适应度函数

适应度函数的映入是为评价进化过程个体的竞争水平,适应度函数的形式有具体问题而定,一般是由目标函数转化得到。遗传算法在进化过程基本不用外部信息仅用适应度函数,对适应的函数的唯一要求是针对输入可计算出能加以比较的非负结果。常用的适应度函数如下:

(1)  线性变换:适应度函数由目标函数经过线性尺度变换得到, 

(2)  乘幂变换:Gillies将这种方法用到机器视觉实验中,一般形式为:                    

(3)  指数变换:其中β为缩放系数,β越大个体之间差异越小,β越大个体差异越大.       

                 

3.1.4选择算子

         选择算子根据适应度函数评判个体的优劣,把适应度较高的个体的基因以较大概率遗传给下一代。因此个体被选择概率与其适应度成正相关。个体选择概率的分配有如下几种方法。

(1)蒙特卡罗法:个体被选择的概率为其适应度值占种群各个个体适应度值总和的比例,个体被选择的概率为:

                                                    

    (2)Boltzmann 选择法【15,16】:Goldberg 通过Boltzmann 选择来动态调整种群进化过程的选择压力,进化初期选择压力较小,适应度较小的个体也有生存机

会,进化后期选择的压力增加,收敛速度得到提高。个体i 被选择的概率为:

                                                        

     式中T>0为退火温度,T随着迭代代数的增加而减小,种群选择压力随着T的减小而增加。选择概率确定后,需要选择个体基因复制,常见的几种选择方法如下。

(1)  轮盘赌法:按照个体被选择的概率形成轮盘,轮盘中每个方块的面积占整块轮盘面积的比例表示个体的被选择概率。

(2)  联赛选择法【17】:每次选择几个个体中适应度最高的一个个体遗传到下一代群体中,它的优点是对适应度正负无要求。随机性更强,存在更大的随机误差,但是有较大概率保证最优个体被选择,最差的个体被淘汰,称每次进行适应度大小比较的个体数目为联赛规模N,一般情况取N=2。

 

3.1.5、交叉算子

         交叉算子对种群中的个体随机配对,然后以交叉概率为概率交换配对基因信息,可能产生波动较大的基因波动,提高种群的基因多样性。交叉的过程既不能破坏适应度较高的优良

个体,又要能高效的产生拥有优良基因的个体。交叉算子的设计通常与种群个体的编码有关,通常二进制编码使用分散交叉,分散交叉包括单点交叉和多点交叉;实数编码使用融合交叉【18】。

(1)  分散交叉:二进制编码下交换父代基因,有单点交叉,两点交叉,多点交叉。多点交叉易破坏优良个体基因很少使用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值