还剩10页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
—.爬山算法HillClimbing介绍模拟退火前,先介绍爬山算法爬山算法是一种简洁的贪心搜寻算法,该算法每次从当前解的接近解空间中选择一个最优解作为当前解,直到达到一个局部最优解爬山算法实现很简洁,其主要缺点是会陷入局部最优解,而不肯定能搜寻到全局最优解如图1所示:假设C点为当前解,爬山算法搜寻到A点这个局部最优解就会停止搜寻,由于在A点无论向那个方向小幅度移动都不能得到更优的解模拟退火SASimulatedAnnealing思想跟人一样找不到最优解就最产生怀疑,我究竟需不需要坚持,随着时间的推移,渐渐的渐渐的放弃去追寻最优解的念头爬山法是完完全全的贪心法,每次都鼠目寸光的选择一个当前最优解,因此只能搜寻到局部的最优值模拟退火其实也是一种贪心算法,但是它的搜寻过程引入了随机因素模拟退火算法以肯定的概率来接受一个比当前解要差的解,因此有可能会跳出这个局部的最优解,达到全局的最优解以图1为例,模拟退火算法在搜寻到局部最优解A后,会以肯定的概率接受到E的移动或许经过几次这样的不是局部最优的移动后会到达D点,于基本遗传算法伪代码/*Pc:交叉发生的概率Prn:变异发生的概率M种群规模G:终止进化的代数Tf:进化产生的任何一个个体的适应度函数超过Tf则可以终止进化过程/初始化PmPcMGTf等参数随机产生第一代种群Popdo计算种群Pop中每一个体的适应度Fi0初始化空种群newPopdo依据适应度以比例选择算法从种群Pop中选出2个个体ifrandom0z1Pc对2个个体按交叉概率Pc执行交叉操作ifrandom0f1Pm对2个个体按变异概率Pm执行变异操作将2个新个体加入种群newPop中}untilM个子代被创建用newPop取代Pop}until任何染色体得分超过Tf或繁殖代数超过G五.基本遗传算法优化下面的方法可优化遗传算法的性能精英主义ElitistStrategy选择是基本遗传算法的一种优化为了防止进化过程中产生的最优解被交叉和变异所破坏,可以将每一代中的最优解原封不动的复制到下一代中插入操作可在3个基本操作的基础上增加一个插入操作插入操作将染色体中的某个随机的片段移位到另一个随机的位置是就跳出了局部最大值A若JYi+1=JYi即移动后得到更优解,则总是接受该移动若JYi+1JYi即移动后的解比当前解要差,则以肯定的概率接受移动,而且这个概率随着时间推移渐渐降低渐渐降低才能趋向稳定这里的〃肯定的概率〃的计算参考了金属冶炼的退火过程,这也是模拟退火算法名称的由来依据热力学的原理,在温度为T时消失能量差为dE的降温的概率为PdE,表示为PdE=expdE/kT其中k是一个常数,exp表示自然指数,且dE0这条公式说白了就是温度越高,消失一次能量差为dE的降温的概率就越大;温度越低,则消失降温的概率就越小又由于dE总是小于0否则就不叫退火了,因此dE/kT0,所以PdE的函数取值范围是01随着温度T的降低,PdE会渐渐降低我们将一次向较差解的移动看做一次温度跳变过程,我们以概率PdE来接受这样的移动关于爬山算法与模拟退火,有一个好玩的比方有点意思爬山算法兔子朝着比现在高的地方跳去它找到了不远处的最高山峰但是这座山不肯定是珠穆朗玛峰这就是爬山算法,它不能保证局部最优值就是全局最优值模拟退火兔子喝醉了它随机地跳了很长时间这期间,它可能走向高处,也可能踏入平地但是,它渐渐糊涂了并朝最高方向跳去这就是模拟退火模拟退火的伪代码代码/*Jy在状态y时的评价函数值Yi表示当前状态Yi+1:表示新的状态r:用于掌握降温的快慢T:系统的温度,系统初始应当要处于一个高温的状态T_min:温度的下限,若温度T达到T_min则停止搜寻*/whileTT_mindE=JYi+l-JYi;ifdE=0〃表达移动后得到更优解,则总是接受移动Yi+1=Yi;〃接受从Yi到Yi+1的移动else//函数expdE/T的取值范围是01dE/T越大,则expdE/T也ifexpdE/Trandom01Yi+1=Yi;//接受从Yi至I」Yi+1的移动T=r*T;〃降温退火z0rlor越大,降温越慢;r越小,降温越快/**若r过大,则搜寻到全局最优解的可能会较高,但搜寻的过程也就较长若r过小,则搜寻的过程会很快,但最终可能会达到一个局部最优值*/i++;模拟退火算法是一种随机算法,并不肯定能找到全局的最优解,可以比较快的找到问题的近似最优解假如参数设置得当,模拟退火算法搜寻效率比穷举法要高遗传算法GAGeneticAlgorithm也称进化算法遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜寻算法因此在介绍遗传算法前有必要简洁的介绍生物进化学问一.进化论学问作为遗传算法生物背景的介绍,下面内容了解即可种群Population:生物的进化以群体的形式进行,这样的一个群体称为种群个体组成种群的单个生物基因Gene:一个遗传因子染色体Chromosome:包含一组的基因生存竞争,适者生存对环境适应度高的、牛B的个体参加繁殖的机会比较多,后代就会越来越多适应度低的个体参加繁殖的机会比较少,后代就会越来越少遗传与变异新个体会遗传父母双方各一部分的基因,同时有肯定的概率发生基因变异简洁说来就是繁殖过程,会发生基因交叉Crossover,基因突变Mutation适应度Fitness低的个体会被逐步淘汰,而适应度高的个体会越来越多那么经过N代的自然选择后,保存下来的个体都是适应度很高的,其中很可能包含史上产生的适应度最高的那个个体=.遗传算法思想借鉴生物进化论,遗传算法将要解决的问题模拟成一个生物进化的过程,通过复制、交叉、突变等操作产生下一代的解,并逐步淘汰掉适应度函数值低的解,增加适应度函数值高的解这样进化N代后就很有可能会进化出适应度函数值很高的个体举个例子,使用遗传算法解决0-1背包问题”的思路0-1背包的解可以编码为一串0-1字符串0:不取,1:取;首先,随机产生M个0-1字符串,然后评价这些0-1字符串作为0-1背包问题的解的优劣;然后,随机选择一些字符串通过交叉、突变等操作产生下一代的M个字符串,而且较优的解被选中的概率要比较高这样经过G代的进化后就可能会产生出0-1背包问题的一个近似最优解”编码需要将问题的解编码成字符串的形式才能使用遗传算法最简洁的一种编码方式是二进制编码,即将问题的解编码成二进制位数组的形式例如,问题的解是整数,那么可以将其编码成二进制位数组的形式将0-1字符串作为0-1背包问题的解就属于二进制编码遗传算法有3个最基本的操作选择,交叉,变异选择选择一些染色体来产生下一代一种常用的选择策略是“比例选择,也就是个体被选中的概率与其适应度函数值成正比假设群体的个体总数是M那么那么一个体Xi被选中的概率为fXi/fXl+fX2+.….…+fXn0比例选择实现算法就是所谓的轮盘赌算法RouletteWheelSelection轮盘赌算法的一个简洁的实现如下轮盘赌算法/*按设定的概率,随机选中一个个体P[i]表示第i个个体被选中的概率/intRWSm=0;r=Random0l;〃r为0至1的随机数fori=l;i=N;i++/*产生的随机数在m〜m+P[i]间则认为选中了i因此i被选中的概率是P[i]/m=m+P[i];ifr=mreturni;交叉Crossover:2条染色体交换部分基因,来构造下一代的2条新的染色体例如交叉前00000||1000011100|000001111110|00101交叉后00000|000001111110|1000011100||00101染色体交叉是以肯定的概率发生的,这个概率记为Pc0变异Mutation:在繁殖过程,新产生的染色体中的基因会以肯定的概率出错,称为变异变异发生的概率记为Pm例如变异前变异后适应度函数FitnessFunction:用于评价某个染色体的适应度,用fx表示有时需要区分染色体的适应度函数与问题的目标函数例如0-1背包问题的目标函数是所取得物品价值,但将物品价值作为染色体的适应度函数可能并不肯定适合适应度函数与目标函数是正相关的,可对目标函数作一些变形来得到适应度函数四.基本遗传算法的伪代码。
个人认证
优秀文档
获得点赞 0