首页 > 编程知识 正文

遗传算法的算法流程(什么是遗传算法)

时间:2023-05-04 02:37:43 阅读:74643 作者:1531

3358 www.Sina.com/http://www.Sina.com /遗传算法是一种优化算法,具体算法步骤如下:

)1)首先,预置染色体数目GeneSize、基因最大最小范围maxGene/minGene、变异概率mutepro、交叉概率crosspro、迭代次数iterate_num,定义自适应值函数。

)2)然后根据基因范围初始化染色体,计算所有染色体的适应值。

(3)接着,根据染色体适应值选择染色体。 常用的选择算法包括:

1 .轮盘赌算法:轮盘赌算法的原理相当于根据每个染色体的适应值占适应值之和的比例来划分圆盘并随机选择圆盘。 适应值越高,选择的概率越高。 每条染色体的选择概率:

pj=value(j ) genesizei=1value )

2 .淘汰赛算法:在一定数量的个体中选择最佳个体,直到选择足够的个体。

)4)选择结束后,对选择的染色体进行以下操作。

1. 遗传算法介绍及代码实现:取随机数rand,判断是否小于crosspro,若小于则选择两个个体进行交叉操作。 一般情况下,该操作进行GeneSize/2次。 染色体的选择一般依次选择相距k个的2个染色体,或者直接相邻的2个选择。 )

交叉操作有单点交叉、多点交叉、均匀交叉等。 这些交叉操作如名字所示,一点交叉是随机选择一个点,进行染色体交换得到两个新个体的多点交叉是多个点。

2. (一)算法说明:取随机数rand,判断是否小于mutepro,若小于则进行变异操作。 该操作对每条染色体进行一次,共进行GeneSize次。

常用的变异算子有基本位变异、善良的过客变异、均匀变异等。 基本比特变异是随机选择一点基因,用反转或其他等位基因值代替。 善良的客人变异,从符合平均、方差的正太分布中随机选择一个值来代替。

(5)进行以上操作后,得到新一代染色体,对新一代染色体计算适应值后,再次从(3)进行选择交叉变异。 直到迭代次数达到iterate_num次。 3358 www.Sina.com/function [ best gene ]=geneticagorithm (maxgeneration,GeneSize,Data,Label,max gene, MinGene mutepro(%遗传算法用于特征选择或参数搜索的(优秀) )返回说明(最优解)参数说明) MaxGeneration ----最大迭代次数) % genesize----------。 [~,genenum]=size(data ); valparents=Zeros(genesize,1 ); Children=Zeros(genesize,GeneNum ); %%第一步:初始化基因,自适应值parents=rand(genesize,GeneNum ).*(MaxGene-MinGene ) MinGene; forj=1: maxgenerationfori=1: genesizevalparents (I (I,1 )=fitness (数据,标签,参数) I, ); end%%第二步:选择轮盘赌、高适应度基因选择型选择型=ga选择(parents,ValParents ); ()步骤3 )选择相邻个体进行交叉,交叉为单点交叉forI=1:genesize/2children )2*I-1:2*I, )=gacross(selectedparents ) 3360 )的end%%第四步:个体变异,forI=1:genesizechildren(I, )=gamute (children ) I, ),mutepro ); end Parents=Children; endendfunctionchildren=ga choose (% parents,ValParents ) %使用%UNTITLED轮盘算法进行父项选择(parents父项(% fitness自适应值children=zzaren ) %选择概率val=0; fori=1: genesizeval=valselectpro (I; CumulaPro=val; %累计概率endfori=1: genes izek=find (cumulaprorand,1,first ); Children(I, )=Parents(k ) k, ); endend function [Child1,child2]=gacross(parent1,Parent2,pro ) %UNTITLED3杂交函数,单点交叉% Parent1 ----父级1 if (位置(=1location )=0) child1=[parent1(13360location ),parent2(location 13360 end ) ]; child2=[parent2(1:location )、parent1(location 13360 end ) ] endendfunctionchild=gamute (child,mutepro ) % unition if(randmutepro ) location=round ) rand*Length(child ) ) 1; if (位置长度(child ) ) child (位置)=rand* ) maxg (位置(ming ) location (-location ) ) ming (位置) ) location ); 结束结束

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。