ImageVerifierCode 换一换
格式:DOCX , 页数:7 ,大小:17.56KB ,
资源ID:9463754      下载积分:10 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/9463754.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请。


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(人工免疫算法-matlab代码.docx)为本站上传会员【仙人****88】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

人工免疫算法-matlab代码.docx

1、在生命科学领域中,人们已经对遗传(Heredity)与免疫(Immunity)等自然现象进行了广泛深入的研究。六十年代Bagley和Rosenberg等先驱在对这些研究成果进行分析与理解的基础上,借鉴其相关内容和知识,特别是遗传学方面的理论与概念,并将其成功应用于工程科学的某些领域,收到了良好的效果。时至八十年代中期,美国Michigan大学的Hollan教授不仅对以前的学者们提出的遗传概念进行了总结与推广,而且给出了简明清晰的算法描述,并由此形成目前一般意义上的遗传算法(GeneticAlgorithm)GA。由于遗传算法较以往传统的搜索算法具有使用方便、鲁棒性强、便于并行处理等特点,因而广

2、泛应用于组合优化、结构设计、人工智能等领域。另一方面,Farmer和Bersini等人也先后在不同时期、不同程度地涉及到了有关免疫的概念。遗传算法是一种具有生成+检测 (generate and test)的迭代过程的搜索算法。从理论上分析,迭代过程中,在保留上一代最佳个体的前提下,遗传算法是全局收敛的。然而,在对算法的实施过程中不难发现两个主要遗传算子都是在一定发生概率的条件下,随机地、没有指导地迭代搜索,因此它们在为群体中的个体提供了进化机会的同时,也无可避免地产生了退化的可能。在某些情况下,这种退化现象还相当明显。另外,每一个待求的实际问题都会有自身一些基本的、显而易见的特征信息或知识。

3、然而遗传算法的交叉和变异算子却相对固定,在求解问题时,可变的灵活程度较小。这无疑对算法的通用性是有益的,但却忽视了问题的特征信息对求解问题时的辅助作用,特别是在求解一些复杂问题时,这种忽视所带来的损失往往就比较明显了。实践也表明,仅仅使用遗传算法或者以其为代表的进化算法,在模仿人类智能处理事物的能力方面还远远不足,还必须更加深层次地挖掘与利用人类的智能资源。从这一点讲,学习生物智能、开发、进而利用生物智能是进化算法乃至智能计算的一个永恒的话题。所以,研究者力图将生命科学中的免疫概念引入到工程实践领域,借助其中的有关知识与理论并将其与已有的一些智能算法有机地结合起来,以建立新的进化理论与算法,来

4、提高算法的整体性能。基于这一思想,将免疫概念及其理论应用于遗传算法,在保留原算法优良特性的前提下,力图有选择、有目的地利用待求问题中的一些特征信息或知识来抑制其优化过程中出现的退化现象,这种算法称为免疫算法(ImmuneAlgorithm)IA。下面将会给出算法的具体步骤,证明其全局收敛性,提出免疫疫苗的选择策略和免疫算子的构造方法,理论分析和对TSP问题的仿真结果表明免疫算法不仅是有效的而且也是可行的,并较好地解决了遗传算法中的退化问题。 immune.m %这是免疫算法。这个算法几乎与遗传算法一样,只是多用了一个免疫函数 %免疫算法是遗传算法的变体,它不用杂交,而是采用注入疫苗的方法

5、 %疫苗是优秀染色体中的一段基因,把疫苗接种到其它染色体中 %注意:标准遗传算法的一个重要概念是,染色体是可能解的2进制顺序号,由这个序号在可能解的集合(解空间)中找到可能解 %这是免疫算法的主程序,它需要调用的函数如下。 %接种疫苗函数: %function inoculateChromosome=immunity(chromosomeGroup,bacterinChromosome,parameter) %parameter:1,随机制取染色体接种。2,每个染色体都接种。3,每个染色体都接种,但接种的位置是随机的 %这个函数实现对染色体的疫苗接种 %由染色体(可能解的2进

6、制)顺序号找到可能解: %x=chromosome_x(fatherChromosomeGroup,oneDimensionSet,solutionSum); %把解代入非线性方程组计算误差函数:functionError=nonLinearSumError1(x); %判定程是否得解函数:[solution,isTrue]=isSolution(x,funtionError,solutionSumError); %选择最优染色体函数: %[bestChromosome,leastFunctionError]=best_worstChromosome(fatherChromosome

7、Group,functionError); %误差比较函数:从两个染色体中,选出误差较小的染色体 %[holdBestChromosome,holdLeastFunctionError]... % =compareBestChromosome(holdBestChromosome,holdLeastFunctionError,... % bestChromosome,leastFuntionError) %为染色体定义概率函数,好的染色体概率高,坏染色体概率低 %p=chromosomeProbability(functionError); %按概率选择染色体函数: %slec

8、teChromosomeGroup=selecteChromome(fatherChromosomeGroup,p); %父代染色体杂交产生子代染色体函数 %sonChrmosomeGroup=crossChromosome(slecteChromosomeGroup,2); %防止染色体超出解空间的函数 %chromosomeGroup=checkSequence(chromosomeGroup,solutionSum) %变异函数 �therChromosomeGroup=varianceCh(sonChromosomeGroup,0.8,solutionN); %通过实验有

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

10、的个数、长度 solutionSum=4;leftBoundary=-10;rightBoundary=10; distance=1;chromosomeSum=500;solutionSumError=0.1; %solutionSum:非线性方程组的元数(待解变量的个数);leftBoundary:可能解的左边界; %rightBoundary:可能解的右边界;distance:可能解的间隔,也是解的精度 %chromosomeSum:染色体的个数;solveSumError:解的误差 oneDimensionSet=leftBoundary:distance:rightBou

11、ndary; %oneDimensionSet:可能解在一个数轴(维)上的集合 oneDimensionSetN=size(oneDimensionSet,2);%返回oneDimensionSet中的元素个数 solutionN=oneDimensionSetN^solutionSum;%解空间(解集合)中可能解的总数 binSolutionN=dec2bin(solutionN);%把可能解的总数转换成二进制数 chromosomeLength=size(binSolutionN,2);%由解空间中可能解的总数(二进制数)计算染色体的长度 %%%%%%%%%%%%%%%%程序初

12、始化 %随机生成初始可能解的顺序号,+1是为了防止出现0顺序号 solutionSequence=fix(rand(chromosomeSum,1)*solutionN)+1; for i=1:chromosomeSum%防止解的顺序号超出解的个数 if solutionSequence(i)>solutionN; solutionSequence(i)=solutionN; end end %染色体是解集合中的序号,它对应一个可能解 %把解的十进制序号转成二进制序号 fatherChromosomeGroup=dec2bin(solutionSequence,chromo

13、someLength); holdLeastFunctionError=Inf;%可能解的最小误差的初值 holdBestChromosome=0;%对应最小误差的染色体的初值 %%%%%%%%%%%%%%%%%%开始计算 compute=1; circle=0; while compute%开始迭代求解 %%%%%%%%%%%%%1:由可能解的序号寻找解本身(关键步骤) x=chromosome_x(fatherChromosomeGroup,oneDimensionSet,solutionSum); %%%%%%%%%%%%%2:把解代入非线性方程计算误差 functi

14、onError=nonLinearSumError1(x);%把解代入方程计算误差 [solution,minError,isTrue]=isSolution(x,functionError,solutionSumError); %isSolution函数根据误差functionError判定方程是否已经解开,isTrue=1,方程得解。solution是方程的解 if isTrue==1 '方程得解' solution minError return%结束程序 end %%%%%%%%%%%%%3:选择最好解对应的最优染色体 [bestChromosome,leastFu

15、nctionError]=best_worstChromosome(fatherChromosomeGroup,functionError); %%%%%%%%%%%%%4:保留每次迭代产生的最好的染色体 %本次最好解与上次最好解进行比较,如果上次最好解优于本次最好解,保留上次最好解; %反之,保留本次最好解。保留的最好染色体放在holdBestChromosome中 [holdBestChromosome,holdLeastFunctionError]... =compareBestChromosome(holdBestChromosome,holdLeastFunctionErr

16、or,... bestChromosome,leastFunctionError); circle=circle+1 %minError %solution holdLeastFunctionError if circle>circleN return end %%%%%%%%%%%%%%5:把保留的最好的染色体holdBestChromosome加入到染色体群中 order=round(rand(1)*chromosomeSum); if order==0 order=1; end fatherChromosomeGroup(order,:)=holdBestCh

17、romosome; functionError(order)=holdLeastFunctionError; %%%%%%%%%%%%%%%6:为每一条染色体(即可能解的序号)定义一个概率(关键步骤) %%%%%%%%%%%%%%%好的染色体概率高,坏的概率低。依据误差functionError计算概率 [p,trueP]=chromosomeProbability(functionError); if trueP =='Fail' '可能解严重不适应方程,请重新开始' return%结束程序 end %%%%%%%%%%%%%%%7:按照概率筛选染色体(关键步骤) �=b

18、in2dec(fatherChromosomeGroup)%显示父染色体 %从父染体中选择优秀染色体 %selecteChromosomeGroup=selecteChromosome(fatherChromosomeGroup,p); %%%%%%%%%%%%%%%8:染色体杂交(关键步骤) %sle=bin2dec(selecteChromosomeGroup)%显示选择出来的解的序号(染色体) %用概率筛选出的染色体selecteChromosomeGroup进行杂交,产生子代染色体 %sonChromosomeGroup=crossChromosome(selecteChr

19、omosomeGroup,2); %不用概率筛选出的染色体selecteChromosomeGroup进行杂交,而直接用上一代(父代)的 sonChromosomeGroup=crossChromosome(fatherChromosomeGroup,2); %sonChromosomeGroup=immunity(fatherChromosomeGroup,holdBestChromosome,3); %把疫苗接种到其它染色体中 sonChromosomeGroup=immunity(sonChromosomeGroup,holdBestChromosome,3); %cro=b

20、in2dec(sonChromosomeGroup)%显示杂交后的子代染色体 sonChromosomeGroup=checkSequence(sonChromosomeGroup,solutionN);%检查杂交后的染色体是否越界 %%%%%%%%%%%%%%%9:变异 %不杂交直接变异 �therChromosomeGroup=varianceCh(fatherChromosomeGroup,0.1,solutionN); %杂交后变异 fatherChromosomeGroup=varianceCh(sonChromosomeGroup,0.5,solutionN); fa

21、therChromosomeGroup=checkSequence(fatherChromosomeGroup,solutionN);%检查变异后的染色体是否越界 end   接种疫苗函数,这是和遗传算法唯一不同的函数,可以用它代替染色体的交叉操作。 %chromosomeGroup:染色体组 �chterinChromosome:疫苗染色体,即最好的染色体。从这个染色体上取疫苗 %parameter:接种疫苗的参数,即用什么方法接种 %inoculateChromosome:接种疫苗后的染色体 function inoculateChromosome=immunity(chr

22、omosomeGroup,bacterinChromosome,parameter) [chromosomeGroupSum,chromosomeLength]=size(chromosomeGroup); [row,bacterinChromosomeLength]=size(bacterinChromosome); %chromosomeGroupSum:染色体的条数;chromosomeLength:染色体的长度 switch parameter case 1%随机选择染色体进行接种 for i=1:chromosomeGroupSum %%%%%%%%%%%%从疫苗染色体

23、上定位疫苗 headDot=fix(rand(1)*bacterinChromosomeLength); %疫苗在染色体上左边的点位 if headDot==0%防止出现0点位 headDot=1; end tailDot=fix(rand(1)*bacterinChromosomeLength); %疫苗在染色体上右边的点位 if tailDot==0%防止出现0点位 tailDot=1; end if tailDot>headDot%防止右边的点位大于左边的点位 dot=headDot; headDot=tailDot; tailDot=dot; end %

24、接种 randChromosomeSequence=round(rand(1)*chromosomeGroupSum); %随机产生1条染色体的序号,对这条染色体进行接种 if randChromosomeSequence==0%防止产生0序号 randChromosomeSequence=1; end inoculateChromosome(i,:)...%先把输入染色体传给输出 =chromosomeGroup(randChromosomeSequence,:); %执行免疫,即从疫苗染色体上取出一段基因做疫苗,再注入到其它染色体中 inocula

25、teChromosome(i,headDot:tailDot)... =bacterinChromosome(1,headDot:tailDot); end case 2 %所有染色体挨个接种 for i=1:chromosomeGroupSum %%%%%%%%%%%%从疫苗染色体上定位疫苗 headDot=fix(rand(1)*bacterinChromosomeLength); %疫苗在染色体上左边的点位 if headDot==0%防止出现0点位 headDot=1; end tailDot=fix(rand(1)*bacterinChromosomeLengt

26、h); %疫苗在染色体上右边的点位 if tailDot==0%防止出现0点位 tailDot=1; end if tailDot>headDot%防止右边的点位大于左边的点位 dot=headDot; headDot=tailDot; tailDot=dot; end %%%%%%%%%%%%%接种 inoculateChromosome(i,:)=chromosomeGroup(i,:);%先把输入染色体传给输出 %执行免疫,即从疫苗染色体上取出一段基因做疫苗,再注入到其它染色体中 inoculateChromosome(i,headDot:tailDot)...

27、 =bacterinChromosome(1,headDot:tailDot); end case 3 %接种位置是随机的 for i=1:chromosomeGroupSum %%%%%%%%%%%%从疫苗染色体上定位疫苗 headDot=fix(rand(1)*bacterinChromosomeLength); %疫苗在染色体上左边的点位 if headDot==0%防止出现0点位 headDot=1; end tailDot=fix(rand(1)*bacterinChromosomeLength); %疫苗在染色体上右边的点位 if tailDot==0%防

28、止出现0点位 tailDot=1; end if tailDot>headDot%防止右边的点位大于左边的点位 dot=headDot; headDot=tailDot; tailDot=dot; end %%%%%%%%%%%%%在染色体上随机定位接种位置 inoculateDot=fix(rand(1)*chromosomeLength);%随机选择染色体的接种点位 if inoculateDot==0 inoculateDot=1; inoculateChromosome(i,:)=chromosomeGroup(i,:); inoculateChromosom

29、e(i,inoculateDot:tailDot-headDot+1)... =bacterinChromosome(1,headDot:tailDot); elseif inoculateDot<=headDot inoculateChromosome(i,:)=chromosomeGroup(i,:); inoculateChromosome(i,inoculateDot:inoculateDot+tailDot-headDot)... =bacterinChromosome(1,headDot:tailDot); elseif (chromosomeLength-inocul

30、ateDot)>=(tailDot-headDot) inoculateChromosome(i,:)=chromosomeGroup(i,:); inoculateChromosome(i,inoculateDot:inoculateDot+tailDot-headDot)... =bacterinChromosome(1,headDot:tailDot); else inoculateChromosome(i,:)=chromosomeGroup(i,:); inoculateChromosome(i,headDot:tailDot)... =bacterinChromosome(1,headDot:tailDot); end end end

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服