免疫算法matlab程序解析_第1页
免疫算法matlab程序解析_第2页
免疫算法matlab程序解析_第3页
免疫算法matlab程序解析_第4页
免疫算法matlab程序解析_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、免疫算法matlab程序这是免疫算法。这个算法几乎与遗传算法一样,只是多用了一个免疫函数免疫 算法是遗传算法的变体,它不用杂交,而是采用注入疫苗的方法。 疫苗是优 秀染色 体中的一段基因,把疫苗接种到其它染色体中。注意:标准遗传算法的一个重要概念是,染色体是可能解的2进制顺序号,由这个 序号在可能解的集合(解空间中找到可能解。这是免疫算法的主程序,它需要调用的函数如下。接种疫苗函数:%fun cti onino culateChromosome=im mun ity(chromosomeGroup,bacteri nChromosome,paramet er%parameter:1随机制取染色

2、体接种。2,每个染色体都接种。3,每个染色体都接 种,但接种的位置是随机的%这个函数实现对染色体的疫苗接种%由染色体(可能解的2进制顺序号找到可能解:%x=chromosome_x(fatherChromosomeGroup, on eDime nsion Set,soluti on Sum;把 解代入非线性方程组计算误差函数:fun ctio nError= non Li nearSumError1(x;判定程是 否得解函数:solution,isTrue=isSolution(x,funtionError,solutionSumError; % 选择最优 染色体函数:%bestChromo

3、some,leastF un cti on Error=best_worstChromosome(fatherChromoso m eGroup,fu nctio nError;%误差比较函数:从两个染色体中,选出误差较小的染色体%holdBestChromosome,holdLeastF un ctio nError.% =compareBestChromosome(holdBestChromosome,holdLeastF un ctio nError,. % bestChromosome,leastFuntion Error%为染色体定义概率函数,好的染色体概率高,坏染色体概率低%p=c

4、hromosomeProbability(fu nctio nError;%按概率选择染色体函数:%slecteChromosomeGroup=selecteChromome(fatherChromosomeGroup,p;%父代染色体杂交产生子代染色体函数%son ChrmosomeGroup=crossChromosome(slecteChromosomeGroup,2;%防止染色体超出解空间的函数%chromosomeGroup=checkSeque nce(chromosomeGroup,soluti on Sum%变异函数%fatherChromosomeGroup=varia nc

5、eCh(s on ChromosomeGroup,0.8,solutio nN;通 过实验有如下结果:%1。染色体应当多一些%2。通过概率选择染色体,在迭代早期会有效选出优秀的染色体,使解的误差 迅速降低,%但随着迭代的进行,概率选择也会导致某种染色体在基因池中迅速增加,使染色体趋同,%这就减少了物种的多样性,反而难以逼近解%3。不用概率选择,仅采用染色体杂交,采用保留优秀染色体,也可以得到解4。单纯免疫效果不好,杂交+免疫效果比较好程序开始运行clear,clc;%清理内存,清屏circleN=200;% 迭代次数format long%构造可能解的空间,确定染色体的个数、长度solutio

6、 nSum=4;leftBo un dary=-10;rightBo un dary=10;dista nce=1;chromosomeSum=500;soluti on SumError=0.1;%solutionSum:非线性方程组的元数(待解变量的个数;leftBoundary:可能解的左边界;%rightBoundary:可能解的右边界;distanee:可能解的间隔,也是解的精度chromosomeSum染色体的个数;solveSumError:解的误差on eDime nsio nSet=leftBo un dary:dista nce:rightBo un dary;%oneDi

7、mensionSet可能解在一个数轴(维上的集合on eDime nsion SetN=size( on eDime nsion Set,2;%回 on eDime nsion Set 中的元素个数solutionN=oneDimensionSetNsolutionSum;%解空间(解集合中可能解的总数bin Solutio nN=dec2bi n( solutio nN;%把可能解的总数转换成二进制数chromosomeLength=size(binSolutionN,2;%由解空间中可能解的总数(二进制数计算染色体的长度程序初始化%随机生成初始可能解的顺序号,+1是为了防止出现0顺序号so

8、lutio nSeque nce=fix(ra nd(chromosomeSum,1*solutio nN+1;for i=1:chromosomeSum%防止解的顺序号超出解的个数if soluti on Seque nce(isoluti onN;solutio nSeque nce(i=soluti onN;endend%染色体是解集合中的序号,它对应一个可能解%把解的十进制序号转成二进制序号fatherChromosomeGroup=dec2b in (solutio nSeque nce,chromosomeLe ngth;holdLeastFu nctio nError=l nf;

9、%可能解的最小误差的初值 holdBestChromosome=0;%对应最小误差的染色体的初值 开始计算compute=1;circle=0;while compute%开始迭代求解%1:由可能解的序号寻找解本身(关键步骤x=chromosome_x(fatherChromosomeGroup, on eDime nsion Set,soluti on Sum; % %2 :把解代入非线性方程计算误差fun ctio nError= non Li nearSumError1(x;% 把解代入方程计算误差solution,minError,isTrue=isSolution(x,functio

10、nError,solutionSumError; %isSolution函数根据误差functionError判定方程是否已经解开,isTrue=1方程得解。 solution是方程的解if isTrue=1方程得解solutio nmin Errorreturn%结束程序end%3:选择最好解对应的最优染色体bestChromosome,leastF unction Error=best_worstChromosome(fatherChromosome Group,fu nctio nError;%4:保留每次迭代产生的最好的染色体%本次最好解与上次最好解进行比较,如果上次最好解优于本次最好

11、解,保留上次最好解;%反之,保留本次最好解。保留的最好染色体放在holdBestChromosome中 holdBestChromosome,holdLeastF un ctio nError.=compareBestChromosome(holdBestChromosome,holdLeastF un ctio nError,. bestChromosome,leastF un ctio nError;circle=circle+1%mi nError%soluti onholdLeastF unction Errorif circlecircleNreturnend%5:把保留的最好的染色

12、体 holdBestChromosome加入 到染色体群中order=ro un d(ra nd(1*chromosomeSum;if order=0order=1;endfatherChromosomeGroup(order,:=holdBestChromosome;fun ctio nError(order=holdLeastF un ctio nError;%6:为每一条染色体(即可能解的序号定义一个概率(关键步骤%好的染色体概率高,坏的概率低。依据误差 functionError 计算概率p,trueP=chromosomeProbability(fu nctio nError;if

13、trueP =Fail可能解严重不适应方程,请重新开始return%结束程序end按照概率筛选染色体(关键步骤%fa=b in 2dec(fatherChromosomeGroup%显 示父染色体%从父染体中选择优秀染色体%selecteChromosomeGroup=selecteChromosome(fatherChromosomeGroup,p; %8:染色体杂交(关键步骤%sle=bi n2dec(selecteChromosomeGroup%示选择出来的解的序号(染色体%用概率筛选出的染色体selecteChromosomeGroup进行杂交,产生子代染色体 son Chromoso

14、meGroup=crossChromosome(selecteChromosomeGroup,2;%不用概率筛选出的染色体 selecteChromosomeGroup进行杂交,而直接用上一代(父代的son ChromosomeGroup=crossChromosome(fatherChromosomeGroup,2; %son Chro mosomeGroup=im mun ity(fatherChromosomeGroup,holdBestChromosome ,3;%把疫苗接种到其它染色体中son ChromosomeGroup=immu ni ty(s on ChromosomeGro

15、up,holdBestChromosome,3; %cro=b in 2dec(s on ChromosomeGroup%显 示杂交后的子代染色体 sonChromosomeGroup=checkSequence(sonChromosomeGroup,solutionN检查杂交 后的染色体是否越界%9:变异%不杂交直接变异%fatherChromosomeGroup=varia nceCh(fatherChromosomeGroup,0.1,solutio nN; % 杂交后变异fatherChromosomeGroup=varia nceCh(s on ChromosomeGroup,0.5

16、,solutio nN; fatherChromosomeGroup=checkSequence(fatherChromosomeGroup,solutionN检查 变异后的染色体是否越界end接种疫苗函数,这是和遗传算法唯一不同的函数,可以用它代替染色体的交叉操 作。%chromosomeGroup 染 色体组%bachterinChromosome疫苗染色体,即最好的染色体。从这个染色体上取疫 苗%parameter接种疫苗的参数,即用什么方法接种%in oculateChromosome接种疫苗后的染色体fun ctio nino culateChromosome=im mun ity(

17、chromosomeGroup,bacteri nChromosome,paramet erchromosomeGroupSum,chromosomeLe ngth=size(chromosomeGroup;row,bacteri nChromosomeLe ngth=size(bacteri nChromosome; %chromosomeGrou pSum:染色体的条数;chromosomeLength 染色体的长度 switch parametercase 1%随机选择染色体进行接种for i=1:chromosomeGroupSum%从疫苗染色体上定位疫苗headDot=fix(ra

18、nd(1*bacteri nChromosomeLe ngth;%疫苗在染色体上左边的点位if headDot=0%防止出现0点位headDot=1;endtailDot=fix(ra nd(1*bacteri nChromosomeLe ngth;%疫苗在染色体上右边的点位if tailDot=0%防止出现0点位tailDot=1;endif tailDotheadDot%防止右边的点位大于左边的点位dot=headDot;headDot=tailDot;tailDot=dot;end接种ran dChromosomeSeque nce=ro un d(ra nd(1*chromosomeG

19、roupSum;%随机产生1条染色体的序号,对这条染色体进行接种if randChromosomeSequence=0%J止产生 0 序号 randChromosomeSequence=1;endino culateChromosome(i,:.%先把输入染色体传给输出=chromosomeGroup(ra ndChromosomeSeque nee,:;%执行免疫,即从疫苗染色体上取出一段基因做疫苗,再注入到其它染色体中ino culateChromosome(i,headDot:tailDot.=bacterinChromosome(1,headDot:tailDot; end case

20、2 所有染色体挨个接种 for i=1:chromosomeGroupSum %从 疫苗染色体上定位疫苗 headDot=fix(ra nd(1*bacteri nChromosomeLe ngth; %疫苗在染色体上左边的点位 if headDot=0%防 止出现 0 点位 headDot=1; endtailDot=fix(ra nd(1*bacteri nChromosomeLe ngth; % 疫苗在染色体上右边的点位 if tailDot=0%防止出现0点位tailDot=1; end if tailDotheadDot%防止右边的点位大于 左边的点位 dot=headDot; he

21、adDot=tailDot; tailDot=dot; end % 接种 ino culateChromosome(i,:=chromosomeGroup(i,:;%先 把输入染色体传给输出 % 执行免疫,即从疫苗染色体上取出一段基因做疫苗,再注入到其它染色体中 ino culateChromosome(i,headDot:tailDot. =bacteri nChromosome(1,headDot:tailDot; end case 3 %接种位置是随机的for i=1:chromosomeGroupSum %从 疫苗染色体上定位疫苗 headDot=fix(ra nd(1*bacteri nChromosomeLe ngth; %疫苗在染色体上左边的点位 if headDot=0%防 止出现 0 点位 headDot=1; endtailDot=fix(ra nd(1*bacteri nChromosomeLe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论