关于-遗传算法的实验报告

上传人:桔**** 文档编号:508513265 上传时间:2022-10-31 格式:DOC 页数:7 大小:167.50KB
返回 下载 相关 举报
关于-遗传算法的实验报告_第1页
第1页 / 共7页
关于-遗传算法的实验报告_第2页
第2页 / 共7页
关于-遗传算法的实验报告_第3页
第3页 / 共7页
关于-遗传算法的实验报告_第4页
第4页 / 共7页
关于-遗传算法的实验报告_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《关于-遗传算法的实验报告》由会员分享,可在线阅读,更多相关《关于-遗传算法的实验报告(7页珍藏版)》请在金锄头文库上搜索。

1、 关于遗传算法的实验报告一、实验目的:理解和掌握遗传算法的应用及意义,能用一门自己擅长的语言实现遗传算法的基本功能,在此基础上进一步理解和巩固对遗传算法的重要,以便在今后的学习和工作中能有效的运用和借鉴!需要指出的是遗传算法并不是能保证所得到的就是最佳的答案但通过一定的方法可以将误差控制在一定的X围内!二、 实验原理和题目:1.遗传算法是一种基于空间搜索的算法,它通过自然选择、遗传、变异等操作以及达尔文的适者生存的理论,模拟自然进化过程来寻找所求问题的答案。其求解过程是个最优化的过程。一般遗传算法的主要步骤如下:(1)随机产生一个确定长度的特征字符串组成的初始种群。(2)对该字符串种群迭代地执

2、行下面的步骤a和步骤b,直到满足停止准则为止: a计算种群中每个个体字符串的适应值; b应用复制、交叉和变异等遗传算子产生下一代种群。(3) 把在后代中表现的最好的个体字符串指定为遗传算法的执行结果,即为问题的一个解。 2.通过编码、设置种群、设置适应度函数、遗传操作、解码产生需要的解。f(x)=x*sin(x)+1, x0,2p,求解f(x)的最大值和最小值。三、实验条件 硬件:微型计算机。语言:本实验选用的为C+语言。四、实验内容: 建造针对f(x)的遗传算法程序,然后进行运行求解。五、实验步骤:1.确定基本功能:本实验是实现f(x)的最大值和最小值的求解。2. 对f(x)进行编码:用一个

3、二进制矢量表示一个染色体,由染色体来代表变量x的实数值,这里精度取小数点后6位数,变量x的域长为2p,整个区间被分为2p*1000000个等长的区间。由于2p*1000000在23位二进制数的表示X围呢,所以,编码长度为23位。3. 设计适应度函数:由于要求f(x)的最值,所以适应度函数可根据f(x)做适当的改变。最大值:f(x)=x*sin(x)+5;最小值:f(x)=1/(x*sin(x)+5 ); 4.针对f(x)的设计并且实现遗传算法程序:遗传操作主要包括复制、交叉和变异。复制是直接将父代遗传给子代,即根据个体的适应度函数值所度量的优劣程度决定它在下一代是被淘汰还是被遗传。交叉从能进入

4、下一代的个体中选出两个,将两者的部分码值进行交换。变异是根据变异概率选出一个个体,随机对其某位编码进行改变。复制由voidSelection_operation(boolflag);实现;交叉由voidCrossover_operation();实现;变异由voidMution-operation();实现。5. 设计初始种群:默认设置为50个随机产生的23位字节的染色体。6. 调试交叉和变异概率:在常用的交叉和变异概率X围内,结果随交叉和变异的概率的改变而改变,之间差异相对来说不太明显7. 实验参数:实验中主要的参数有遗传代数、群体规模、交叉概率、变异概率。 实验结果:求最大值:求最小值:程

5、序主要代码如下(后台代码):class GAvector Pop;vector SubPop;double Pc;double Pm;int Num_Iteration;int Num_Population;double Optimal_Max_X_Solution;double Optimal_Min_X_Solution; double Optimal_Max_Function_Vlaue;double Optimal_Min_Function_Value;string Optimal_Individual;vector LunPan;/float fitness;public:GA()P

6、c=0.25;Pm=0.01;Num_Population=50;Num_Iteration=100;void GA_Init();void Crossover_Operation();void Select_Operation();void Mutation_Operation();void Evaluation(bool);void LunPan_Operation(bool);double Function(double);void Extreme_Value(bool);void Display(bool,int);void Display_M();/ Find the max and

7、 min valuevoid GA:Extreme_Value(bool flag)if(flag) Optimal_Max_Function_Vlaue=-100;else Optimal_Min_Function_Value=100;for(vector:iterator iter=Pop.begin();iter!=Pop.end();+iter)double t=0.5;double Deum1=0;/*string p=*iter;*/for(int i=(*iter).length()-1;i=0;-i)t=t*2;Deum1+=(*iter)i-48)*t;Deum1=Deum1

8、*(2*PI)/ValueOfString);/coutDeum1 ;double Temp=Function(Deum1);/ 求函数值/coutTempOptimal_Max_Function_Vlaue)Optimal_Max_Function_Vlaue=Temp;Optimal_Max_X_Solution=Deum1;Optimal_Individual=*iter;/fitness=Temp+5;else /find the minimumif(TempOptimal_Min_Function_Value)Optimal_Min_Function_Value=Temp;Optim

9、al_Min_X_Solution=Deum1;Optimal_Individual=*iter;/fitness=Temp+5;/Initialize the Populationsvoid GA:GA_Init()for(int ixx=0;ixxNum_Population;+ixx)string STRing;for(int i=0;i23;i+)int rnd=rand()%2;STRing.push_back(rnd+48);Pop.push_back(STRing);STRing.clear();/for(vector:iterator iter=Pop.begin();iter

10、!=Pop.end();+iter)/cout*iterendl;/Select Operationvoid GA:Select_Operation()/随机选择个体double rnd=0.0001*(rand()%10000);for(vector:iterator iter=LunPan.begin();iter!=LunPan.end();+iter)if(rnd=*iter)SubPop.push_back(*(Pop.begin()+(iter-LunPan.begin();/cout*(Pop.begin()+(iter-LunPan.begin()endl;break;/Cro

11、ssover Operationvoid GA:Crossover_Operation()/随机选择两个个体进行交叉操作double rnd=0.0001*(rand()%10000);for(vector:iterator iter=LunPan.begin();iter!=LunPan.end();+iter)if(rnd=*iter)string STRing=*(Pop.begin()+(iter-LunPan.begin();double rnd1=0.0001*(rand()%10000);for(vector:iterator iter1=LunPan.begin();iter1

12、!=LunPan.end();+iter1)if(rnd1=*iter1)string STRing1=*(Pop.begin()+(iter1-LunPan.begin();int rnd2=rand()%23;char Temp;for(int i=rnd2;iSTRing.length();+i)Temp=STRingi;STRingi=STRing1i;STRing1i=Temp;SubPop.push_back(STRing);SubPop.push_back(STRing1);break;break;/Mutation Operationvoid GA:Mutation_Opera

13、tion()/选择个体进行突变操作double rnd=0.0001*(rand()%10000);for(vector:iterator iter=LunPan.begin();iter!=LunPan.end();+iter)if(rnd=*iter)string STRing=*(Pop.begin()+(iter-LunPan.begin();int rnd1=rand()%23;if(STRingrnd1=0)STRingrnd1=1;elseSTRingrnd1=0;SubPop.push_back(STRing);break;/coutMutationendl;/Evaluation Operationvoid GA:Evaluation(bool flag)srand(time(NULL);Pop.clear();GA_Init();Extreme_Value(flag);Display(flag,0);/*srand(time(NULL);*/for(int i=1;i=Num_Iteration;+i)LunPan_Operation(flag);/for(vector:iterator iter=LunPan.begin();iter!=LunPan.end();+iter)/cout*iterendl;/for(int

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号