2.2遗传算法的编码实现.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2.2遗传算法的编码实现

遗传算法的编码实现 知识准备 随机数的产生 头文件 stdlib.h 所用函数: int rand(void) 函数说明 rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用srand()设好随机数种子,如果未设随机数种子,rand()在调用时会自动设随机数种子为1。关于随机数种子请参考srand()。 返回值 返回0至RAND_MAX之间的随机数值,RAND_MAX定义在stdlib.h,其值为2147483647。 void srand (unsigned int seed); 函数说明 srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,通常可以利用geypid()或time(0)的返回值来当做seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。 范例 /* 产生介于1 到10 间的随机数值*/ #includetime.h #includestdlib.h main() { int i,j; srand((int)time(0)); for(i=0;i10;i++) { j=1+(int)(10.0*rand()/(RAND_MAX+1.0)); printf( %d ,j); } } 生成某个范围内的随机数 生成[0,N]之间的某个整数 rand()%(N+1) 生成[N,M]之间的某个整数(MN) rand()%(M-N+1)+N 生成[0,R]之间的某个实数 rand()*R*1.0/RAND_MAX 生成[S,R]之间的某个实数 rand()/(double)RAND_MAX*(R-S)+S 基本遗传算法流程 初始化种群,设定运行参数 设定好算法中的参数:种群大小,进化代数等 个体评价 评估个体的适应值 选择运算 根据适应值的大小,从群体中选择组成新的种群 交叉运算 选择两个个体进行交叉 变异运算 单个个体进行变异 终止条件判定 随机特征 遗传算法是一种随机搜索算法,因此算法中处处体现了随机性,具体体现在: 个体生成的随机性 选择中的优胜劣汰的随机性 交叉的随机性 变异的随机性 求解实例 编码 采用二进制编码 所求精度为1E-3,所以需要的二进制位数为:24位 适应值与函数值之间的转化 由于目标函数取值范围是[0,max],所以可以直接把目标函数的值作为适应值 注意:大多数情况下不能直接把目标函数的值作为适应值,需要做一下转换。 思考:为什么? 个体的表示方法 利用结构体表示 struct individual{ int chrom[CHROMLENGTH]; /*染色体*/ double fitness; /*适应值*/ }; 种群的表示 用结构体数组表示 struct individual population[POPSIZE]; 算法框架 void main(){ Generation=0;//第0代的标志 GenerateInitialPopulation();//初始化种群 EvaluatePopulation();//评估种群 while(GenerationMaxGeneration){ Generation++; GenerateNextPopulation();//产生下一代 EvaluatePopulation(); } } 定义变量 需要实现设置好算法中用到的常量和变量: #define POPSIZE 500 //种群的大小 #define LENGTH //染色体的长度 int MaxGeneration =200; //最大进化代数 double Pc=0.6; //交叉概率 doulbe Pm=0.001; //变异概率 Struct individual population[POPSIZE]; GenerateInitialPopulation 模块 模块功能:产生随机种群 方法:使用随机函数产生每一个个体 伪代码: { randomize(); for (i=0;iPOPSIZE;++i) for(j=0;jLENGTH;++j) population[i].chrom[j]=(rand%2==0?0:1); } EvaluatePopulation 模块 模块功能:评估个体适应值 方法:把个体解码,然后计算对应的函数值作为个体的适应值 伪代码: …… GenerateNextPopulation 模块 模块功能:生成下一代群体 方法:执行选择、交叉、变异三个算子 伪代码: { SelectionOperator(); //选择算子 CrossoverOperator(); //交叉算子 MutationOperator(); //变异算子 }

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档