快速遗传算法(简单遗传算法的三种操作)

遗传算法

本节介绍最著名的遗传算法(GA)。遗传算法属于进化算法,其基本思想来源于“物竞天择,适者生存”的进化规律。简单来说,遗传算法就是将一个问题编码成一条染色体,然后通过不断的选择、交叉、变异等操作更新染色体的编码并迭代。每次迭代保留上一代的好染色体,丢弃坏染色体,最终到达最终满足目标的染色体。整个过程由下图组成(手写,见谅-_-!)

流程图

它由以下步骤组成:

Coding)——先初始化编码。在这个步骤中,根据问题或目标函数,形成解决方案。在遗传算法中,解被称为染色体。值得一提的是,遗传算法是基于种群的算法,所以会有多条染色体。初始化时会随机产生N条染色体,也就是说染色体中包含N条染色体。这里,第I条染色体由D维值组成。GA会以这N个数据为初始点开始进化。

评估适应度)——)这一步用染色体来计算目标函数,染色体的质量会被表示出来。

Selection)——)从当前染色体中选择优秀的个体,使其成为有一定概率的亲本进行交叉或变异操作,使其优秀的基因后代得以保留。自然选择就体现在这里。

将——亲本的两条染色体交叉,通过交换染色体形成新的染色体。比如下图,爸爸妈妈各给我提供了两个基因。这样我既保留了父母的基础,又有自己的特色。

横断

突变)——以一定概率使基因发生突变。这种运算符通常出现的概率很低。如下图所示:

变化

我们将一步一步向你展示如何用matlab编写一个简单的GA算法。

这个问题是实数的最小化。我们需要在解空间中找到最小值或近似最小值。这里我们用球函数作为目标函数(读者可以自己修改成其他目标函数)。

球形函数

初始化:这一步我们将在给定的问题空间中用以下代码生成一个随机解:% % % initial ization % % Input:Chromes _ size,dim dim,lb下界,ub上界% % Output:Chromes函数的新群体Chromes=init _ Chromes(Chromes _ size,dim,lb,Ub)% Chromes=rand(Chromes _ size,dim) * (ub-lb) lb随机生成上下界;End:选择是从当前世代中选择优良的染色体保留来繁殖下一代。我们这里采取的方法是俄罗斯轮盘选择法。被选中的概率越高,解决方案越好。首先,我们需要计算每个染色体适应度的倒数。然后计算每个染色体的比例。比例越大,被留用的机会越大。代码如下:%% Select%俄罗斯轮盘赌函数[新chromes,新fitness]=selection (chromes,fitness)权重=1。/健身;% fitness倒数totalfit=sum(重量);%累计所有重量totalf=重量。/total fit;%找出每条染色体的比重指数=[];对于i=1:size(chromes,1)%循环选择较好的染色体pick=randwhile pick==0 pick=randend for j=1:size(chromes,1)pick=pick-total f(j);if pick 0 index=[index j];break end end end new chromes=chromes(index,);newfitness=fitness(指数);End:在这一步中,将随机选取两条被选中的染色体作为亲本,从两条染色体上各切下一部分基因,生成新的染色体,代码如下:% % cross function new chromes=crossover(chromes,PC)%生成新的解new chromes=ones(size(chromes));对于i=1:size(chromes,1)%随机选择两条染色体parents=randperm(10,2);%随机选择一个位置pos=round(rand*size(chromes,2));If(rand突变:小概率随机突变一个基因,代码如下:%突变函数newchromes=muatation (chromes,PM,LB,UB) for I=1: size (chromes,1) newchromes (I,)=chromes (I,);If (rand main函数,先初始化各参数,然后迭代,满足终止条件时停止:% clear workspace,clearclc%染色体数chromes _ size=20%问题维度dim=10%交叉概率pc=0.9%变化概率pm=0.2%问题上下边界lb=-1;ub=1;%周期时间maxiter=1000% objective equation name func=' obj fun 'FD=str 2 func(name func);% initialize chromes=init _ chromes(chromes _ size,dim,lb,ub);%找到一个I=1的染色体适应度:chromes _ size适应度(I)=f eval (FD,chromes (I,);End%找到最佳解[最佳适应度最佳指数]=min(适应度);bestchrome=chromes(bestindex,);iter=1的%主循环:maxiter% select [chromes,new fitness]=selection (chromes,fitness);% crossover chromes=crossover(chromes,PC);%变化chromes=muatation (chromes,pm,lb,ub);I=1时的% update optimal:chromes _ size fitness(I)=f eval(FD,chromes (I,);if fitness(i)运行后,会生成一条体能下降曲线,如下图所示:

体能下降曲线

遗传算法大大提高了优化问题的普适性,因为遗传算法属于随机算法,不再是确定性算法(如果对此感兴趣,请留言,我可以进一步解释)。

但是,一些明显的缺陷仍然明显影响了算法的效率。主要问题如下:

早熟,过早收敛,容易陷入局部最优解。初始点对算法结果影响很大,初始点好的解效果好,反之亦然。下一节将介绍群体智能算法的代表作——粒子群优化算法。

如有疑问,欢迎留言,欢迎评论交流,创作不易,请勿抄袭,请收藏、关注、转发~

其他教程

matlabgui设计计算器(matlab gui做计算器)

2023-1-17 15:20:04

其他教程

python random随机数(python用random生成随机数)

2023-1-17 15:22:06

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索