遗传算法实验报告_第1页
遗传算法实验报告_第2页
遗传算法实验报告_第3页
遗传算法实验报告_第4页
遗传算法实验报告_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

遗传算法实验报告姓名:张虎学号:E200902056一、实验目的: 熟悉和掌握遗传算法的运行机制和求解的基本方法。遗传算法是一种基于空间搜索的算法,它通过自然选择、遗传、变异等操作以及达尔文的适者生存的理论,模拟自然进化过程来寻找所求问题的答案。其求解过程是个最优化的过程。一般遗传算法的主要步骤如下:(1)随机产生一个确定长度的特征字符串组成的初始种群。。(2)对该字符春种群迭代地执行下面的步骤a和步骤b,直到满足停止准则为止:a计算种群中每个个体字符串的适应值;b应用复制、交叉和变异等遗传算子产生下一代种群。(3)把在后代中表现的最好的个体字符串指定为遗传算法的执行结果,即为问题的一个解。二、实验原理和题目: 通过编码、设置种群、设置适应度函数、遗传操作、解码产生需要的解。 f(x)=x*sin(x)+1,xÎ[0,2p],求解f(x)的最大值和最小值。 三、实验条件

硬件:微型计算机。 语言:本实验选用的为C#语言。四、实验内容:

建造针对f(x)的遗传算法程序,然后进行运行求解。五、实验步骤: 1.

确定基本功能:本实验是实现f(x)的最大值和最小值的求解。 2.对f(x)进行编码:用一个二进制矢量表示一个染色体,由染色体来代表变量x的实数值,这里精度取小数点后6位数,变量x的域长为2p,整个区间被分为2p*1000000个等长的区间。由于2p*1000000在23位二进制数的表示范围呢,所以,编码长度为23位。试验中用函数GetRandomBinaryArray(intcount,inti);来实现。 3.设计适应度函数:由于要求f(x)的最值,所以适应度函数就是f(x)。4.

针对f(x)的设计并且实现遗传算法程序:遗传操作主要包括复制、交叉和变异。复制是直接将父代遗传给子代,即根据个体的适应度函数值所度量的优劣程度决定它在下一代是被淘汰还是被遗传。交叉从能进入下一代的个体中选出两个,将两者的部分码值进行交换。变异是根据变异概率选出一个个体,随机对其某位编码进行改变。复制由voidSelection(boolflag);实现;交叉由voidCrossed();实现;变异由voidMution();实现。 5.

设计初始种群:默认设置为50个随机产生的23位字节的染色体,可以通过输入来设置种群规模。 6.调试交叉和变异概率:在常用的交叉和变异概率范围内,结果随交叉和变异的概率的改变而改变,之间差异相对来说不太明显 7.

实验参数:实验中主要的参数有遗传代数、群体规模、交叉概率、变异概率。实验结果:求最大值求最小值:核心程序:publicEGAlgorith(doublemin,doublemax,doublecrossRate,doublevarRate,intprecision,intpopulationNumeber){m_minValue=min;m_maxValue=max;m_crossRate=crossRate;m_varRate=varRate;m_populationNumber=populationNumeber;m_length=max-min;m_populations=newstring[m_populationNumber][];m_doublePopulation=newdouble[m_populationNumber];m_fit=newdouble[m_populationNumber];m_codeLength=Convert.ToString(Convert.ToInt32(m_length*Math.Pow(10,precision)),2).Length;//初始化种群for(inti=0;i<m_populationNumber;i++){m_populations[i]=GetRandomBinaryArray(m_codeLength,i);}}//产生随机数组publicstaticstring[]GetRandomBinaryArray(intcount,inti){Randomrnd=newRandom(DateTime.Now.Millisecond+i);byte[]keys=newbyte[count];rnd.NextBytes(keys);string[]items=newstring[count];for(intj=0;j<count;j++){if(keys[j]>127){items[j]="1";}else{items[j]="0";}}returnitems;}//根据适应度进行选择最值publicvoidFromFitSelect(boolflag){//int[]indexs=newint[m_populationNumber];intwinIndex=0;doubletempMin=double.MinValue;doubletempMax=double.MaxValue;if(flag){for(inti=0;i<m_populationNumber;i++){//indexs[i]=i;if(m_fit[i]>tempMin){tempMin=m_fit[i];winIndex=i;}}}else{for(inti=0;i<m_populationNumber;i++){if(m_fit[i]<tempMax){tempMax=m_fit[i];winIndex=i;}}}//intwinIndex=GetMaxIndex(indexs);m_winCode=m_populations[winIndex];m_winValue=m_doublePopulation[winIndex];m_winFit=m_fit[winIndex];}//选择方法privatevoidSelection(boolflag){intsize=3;//竞争规模string[][]tempPopulation=newstring[m_populationNumber][];for(inti=0;i<m_populationNumber;i++){int[]inSelect=GetRandomIntArray(0,m_populationNumber-1,size,i);intwinIndex=GetMaxIndex(inSelect,flag);string[]tempStr=newstring[m_codeLength];for(intj=0;j<m_codeLength;j++){tempStr[j]=m_populations[winIndex][j];}tempPopulation[i]=tempStr;}m_populations=tempPopulation;}//交叉方法privatevoidCrossed(){int[]crossRate=GetRandomIntArray(0,1000,m_populationNumber,3);for(inti=0;i<m_populationNumber;i++){if(crossRate[i]<=m_crossRate*1000){int[]doubCrossIndex=GetRandomIntArray(0,m_populationNumber-1,2,2);Randomrnd=newRandom();intcrossPosition=rnd.Next(m_codeLength);string[]tempStr=newstring[m_codeLength];for(intj=0;j<crossPosition;j++){tempStr[j]=m_populations[i][j];}for(intk=crossPosition;k<m_codeLength;k++){tempStr[k]=m_populations[doubCrossIndex[0]][k];}m_populations[i]=tempStr;}}}//变异方法privatevoidMution(){int[]varRate=GetRandomIntArray(0,1000,m_populationNumber,3);for(inti=0;i<m_populationNumber;i++){Randomrnd=newRandom(i*i);intvarPosition=rnd.Next(m_codeLength);

温馨提示

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

评论

0/150

提交评论