版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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进制)顺序号找到可能解:%x=chromoso
6、me_x(fatherChromosomeGroup,oneDimensionSet,solutionSum);%把解代入非线性方程组计算误差函数:functionError=nonLinearSumError1(x);%判定程是否得解函数:solution,isTrue=isSolution(x,funtionError,solutionSumError);%选择最优染色体函数:%bestChromosome,leastFunctionError=best_worstChromosome(fatherChromosomeGroup,functionError);%误差比较函数:从两个染色体中
7、,选出误差较小的染色体%holdBestChromosome,holdLeastFunctionError.% =compareBestChromosome(holdBestChromosome,holdLeastFunctionError,.% bestChromosome,leastFuntionError)%为染色体定义概率函数,好的染色体概率高,坏染色体概率低%p=chromosomeProbability(functionError);%按概率选择染色体函数:%slecteChromosomeGroup=selecteChromome(fatherChromosomeGroup,p)
8、;%父代染色体杂交产生子代染色体函数%sonChrmosomeGroup=crossChromosome(slecteChromosomeGroup,2);%防止染色体超出解空间的函数%chromosomeGroup=checkSequence(chromosomeGroup,solutionSum)%变异函数therChromosomeGroup=varianceCh(sonChromosomeGroup,0.8,solutionN);%通过实验有如下结果:%1。染色体应当多一些%2。通过概率选择染色体,在迭代早期会有效选出优秀的染色体,使解的误差迅速降低,%但随着迭代的进行,概率选择也会导
9、致某种染色体在基因池中迅速增加,使染色体趋同,%这就减少了物种的多样性,反而难以逼近解%3。不用概率选择,仅采用染色体杂交,采用保留优秀染色体,也可以得到解%4。单纯免疫效果不好,杂交+免疫效果比较好%程序开始运行clear,clc;%清理内存,清屏circleN=200;%迭代次数format long%构造可能解的空间,确定染色体的个数、长度solutionSum=4;leftBoundary=-10;rightBoundary=10;distance=1;chromosomeSum=500;solutionSumError=0.1;%solutionSum:非线性方程组的元数(待解变量的
10、个数);leftBoundary:可能解的左边界;%rightBoundary:可能解的右边界;distance:可能解的间隔,也是解的精度%chromosomeSum:染色体的个数;solveSumError:解的误差oneDimensionSet=leftBoundary:distance:rightBoundary;%oneDimensionSet:可能解在一个数轴(维)上的集合oneDimensionSetN=size(oneDimensionSet,2);%返回oneDimensionSet中的元素个数solutionN=oneDimensionSetNsolutionSum;%解空
11、间(解集合)中可能解的总数binSolutionN=dec2bin(solutionN);%把可能解的总数转换成二进制数chromosomeLength=size(binSolutionN,2);%由解空间中可能解的总数(二进制数)计算染色体的长度%程序初始化%随机生成初始可能解的顺序号,+1是为了防止出现0顺序号solutionSequence=fix(rand(chromosomeSum,1)*solutionN)+1;for i=1:chromosomeSum%防止解的顺序号超出解的个数if solutionSequence(i)>solutionN;solutionSequenc
12、e(i)=solutionN;endend%染色体是解集合中的序号,它对应一个可能解%把解的十进制序号转成二进制序号fatherChromosomeGroup=dec2bin(solutionSequence,chromosomeLength);holdLeastFunctionError=Inf;%可能解的最小误差的初值holdBestChromosome=0;%对应最小误差的染色体的初值%开始计算compute=1;circle=0;while compute%开始迭代求解%1:由可能解的序号寻找解本身(关键步骤)x=chromosome_x(fatherChromosomeGroup,o
13、neDimensionSet,solutionSum);%2:把解代入非线性方程计算误差functionError=nonLinearSumError1(x);%把解代入方程计算误差solution,minError,isTrue=isSolution(x,functionError,solutionSumError);%isSolution函数根据误差functionError判定方程是否已经解开,isTrue=1,方程得解。solution是方程的解if isTrue=1'方程得解'solutionminErrorreturn%结束程序end%3:选择最好解对应的最优染色体
14、bestChromosome,leastFunctionError=best_worstChromosome(fatherChromosomeGroup,functionError);%4:保留每次迭代产生的最好的染色体%本次最好解与上次最好解进行比较,如果上次最好解优于本次最好解,保留上次最好解;%反之,保留本次最好解。保留的最好染色体放在holdBestChromosome中holdBestChromosome,holdLeastFunctionError.=compareBestChromosome(holdBestChromosome,holdLeastFunctionError,.b
15、estChromosome,leastFunctionError);circle=circle+1%minError%solutionholdLeastFunctionErrorif circle>circleNreturnend%5:把保留的最好的染色体holdBestChromosome加入到染色体群中order=round(rand(1)*chromosomeSum);if order=0order=1;endfatherChromosomeGroup(order,:)=holdBestChromosome;functionError(order)=holdLeastFunctio
16、nError;%6:为每一条染色体(即可能解的序号)定义一个概率(关键步骤)%好的染色体概率高,坏的概率低。依据误差functionError计算概率p,trueP=chromosomeProbability(functionError);if trueP ='Fail''可能解严重不适应方程,请重新开始'return%结束程序end%7:按照概率筛选染色体(关键步骤)=bin2dec(fatherChromosomeGroup)%显示父染色体%从父染体中选择优秀染色体%selecteChromosomeGroup=selecteChromosome(fathe
17、rChromosomeGroup,p);%8:染色体杂交(关键步骤)%sle=bin2dec(selecteChromosomeGroup)%显示选择出来的解的序号(染色体)%用概率筛选出的染色体selecteChromosomeGroup进行杂交,产生子代染色体%sonChromosomeGroup=crossChromosome(selecteChromosomeGroup,2);%不用概率筛选出的染色体selecteChromosomeGroup进行杂交,而直接用上一代(父代)的sonChromosomeGroup=crossChromosome(fatherChromosomeGrou
18、p,2);%sonChromosomeGroup=immunity(fatherChromosomeGroup,holdBestChromosome,3);%把疫苗接种到其它染色体中sonChromosomeGroup=immunity(sonChromosomeGroup,holdBestChromosome,3);%cro=bin2dec(sonChromosomeGroup)%显示杂交后的子代染色体sonChromosomeGroup=checkSequence(sonChromosomeGroup,solutionN);%检查杂交后的染色体是否越界%9:变异%不杂交直接变异therCh
19、romosomeGroup=varianceCh(fatherChromosomeGroup,0.1,solutionN);%杂交后变异fatherChromosomeGroup=varianceCh(sonChromosomeGroup,0.5,solutionN);fatherChromosomeGroup=checkSequence(fatherChromosomeGroup,solutionN);%检查变异后的染色体是否越界end接种疫苗函数,这是和遗传算法唯一不同的函数,可以用它代替染色体的交叉操作。%chromosomeGroup:染色体组chterinChromosome:疫苗染
20、色体,即最好的染色体。从这个染色体上取疫苗%parameter:接种疫苗的参数,即用什么方法接种%inoculateChromosome:接种疫苗后的染色体function inoculateChromosome=immunity(chromosomeGroup,bacterinChromosome,parameter)chromosomeGroupSum,chromosomeLength=size(chromosomeGroup);row,bacterinChromosomeLength=size(bacterinChromosome);%chromosomeGroupSum:染色体的条数;
21、chromosomeLength:染色体的长度switch parametercase 1%随机选择染色体进行接种for i=1:chromosomeGroupSum%从疫苗染色体上定位疫苗headDot=fix(rand(1)*bacterinChromosomeLength);%疫苗在染色体上左边的点位if headDot=0%防止出现0点位headDot=1;endtailDot=fix(rand(1)*bacterinChromosomeLength);%疫苗在染色体上右边的点位if tailDot=0%防止出现0点位tailDot=1;endif tailDot>headDot
22、%防止右边的点位大于左边的点位dot=headDot;headDot=tailDot;tailDot=dot;end%接种randChromosomeSequence=round(rand(1)*chromosomeGroupSum);%随机产生1条染色体的序号,对这条染色体进行接种if randChromosomeSequence=0%防止产生0序号randChromosomeSequence=1;endinoculateChromosome(i,:).%先把输入染色体传给输出=chromosomeGroup(randChromosomeSequence,:);%执行免疫,即从疫苗染色体上取
23、出一段基因做疫苗,再注入到其它染色体中inoculateChromosome(i,headDot:tailDot).=bacterinChromosome(1,headDot:tailDot);endcase 2 %所有染色体挨个接种for i=1:chromosomeGroupSum%从疫苗染色体上定位疫苗headDot=fix(rand(1)*bacterinChromosomeLength);%疫苗在染色体上左边的点位if headDot=0%防止出现0点位headDot=1;endtailDot=fix(rand(1)*bacterinChromosomeLength);%疫苗在染色体
24、上右边的点位if tailDot=0%防止出现0点位tailDot=1;endif tailDot>headDot%防止右边的点位大于左边的点位dot=headDot;headDot=tailDot;tailDot=dot;end%接种inoculateChromosome(i,:)=chromosomeGroup(i,:);%先把输入染色体传给输出%执行免疫,即从疫苗染色体上取出一段基因做疫苗,再注入到其它染色体中inoculateChromosome(i,headDot:tailDot).=bacterinChromosome(1,headDot:tailDot);endcase 3 %接种位置是随机的for i=1:chromosomeGroupSum%从疫苗染色体上定位疫苗headDot=fix(rand(1)*bacterinChromosomeLength);%疫苗在染色体上左边的点位if headDot=0%防止出现0点位headDot=1;endtailDot=fix(rand(1)*bacterinChromosomeLength);%疫苗在染色体上右边的点位if tailDot=0%防止出现0点位tailDot=1;endif tailDot>headDo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 下学期教皇的奶牛-课件
- 《证券投资相关》课件
- 《湖泊的水文特征》课件
- 《语文下册《雪》鲁迅》课件
- 七年级英语上册期末复习课件
- 单位管理制度集粹选集人力资源管理
- 单位管理制度汇编大全人力资源管理篇
- 单位管理制度合并汇编【人事管理篇】
- 单位管理制度范文大合集员工管理篇
- 单位管理制度范例汇编人事管理篇
- 高职计算机专业《Web前端开发技术》说课稿
- 【独立储能】山西省独立储能政策及收益分析-中国能建
- 中东及非洲冲击式破碎机行业现状及发展机遇分析2024-2030
- 工程制图(中国石油大学(华东))智慧树知到期末考试答案章节答案2024年中国石油大学(华东)
- 化工原理(1)智慧树知到期末考试答案章节答案2024年华北科技学院
- DZ/T 0441.1-2023 岩芯数字化技术规程 第1部分 总则(正式版)
- 2024-2030年中国无创血流动力学监测装置行业市场发展趋势与前景展望战略分析报告
- CHT 1027-2012 数字正射影像图质量检验技术规程(正式版)
- 文艺复兴经典名著选读智慧树知到期末考试答案章节答案2024年北京大学
- 一年级下-科学-非纸笔测试
- 淘气的一天(教案)2023-2024学年数学二年级下册 北师大版
评论
0/150
提交评论