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

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上信息与管理科学学院计算机科学系实验报告课程名称: 人工智能 实验名称: 遗传算法问题 姓 名:苏鹏海 贾美丽 赵妍 张汉昭 学 号: 班 级: 计科 实 验 室: 软件技术实验室 指导教师: 张慧 日 期: 2016.11.09 &&遗传算法问题一、 实验目的 1熟悉和掌握遗传算法的原理、实质;2学会使用遗传算法解决问题;3学会编写遗传算法程序寻找函数最值;二、 实验原理遗传算法是仿真生物遗传学和自然选择机理,通过人工方式所构造的一类搜索算法,从某种程度上说遗传算法是对生物进化构成进行的数学方式仿真。在遗传算法中染色体对应的是一系列符号序列,在标准的遗

2、传算法(即基本遗传算法)中,通常用0, 1组成的位串表示,串上各个位置对应基因座,各位置上的取值对应等位基因。遗传算法对染色体进行处理,染色体称为基因个体。一定数量的基因个体组成基因种群。种群中个体的数目为种群的规模,各个体对环境的适应程度称为适应度。三、 实验内容 用遗传算法求根号2,也就是求方程f(x)=x*x-2=0的正整数解,x=1时f(1)<0,x=2时f(2)>0,由介值定理,则1到2中间存在一个根,根据代数基本定理和根的对称性知这就是我们要找的根,由目标函数得到适应度函数,我们选择个体都在1,2之间,那适应度函数我可以取j(x)=40/(2+|x*x-2|)-10,由

3、x的取值范围知j的范围是(0,10)x和y交叉就用取平均(x+y)/2,交叉概率取0.9,变异概率为0,四、 步骤分析1. 选择目标函数,确定变量定义域及编码精度,形成编码方案2. 随机产生一个规模为 (即该种群中含有个体)的种群 23. 个体评价:计算群体P(t)中各个个体适应度4. 选择运算:将选择算子作用于群体。选择的目的是把优化的个体直接遗传到下一代或通过配对交叉产生新的个体再遗传到下一代。选择操作是建立在群体中个体的适应度评估基础上的。(选择运算用轮盘赌算法)5. 对被选择进入匹配池中的个体进行交叉操作,形成新种群6. 以小概率在种群 中选择个体进行变异操作形成新种群7. 计算每个个

4、体的适值8. 根据适值概率选择新个体形成新种群9. 检查结束条件,若满足则算法结束,当前种群中适值最高的个体即所求解;否则转3选择操作:首先要知道适应度函数,所谓的适应度函数就是评价函数,通常是问题的目的函数(或它的倒数),它描述了个体的优劣程度同时也决定了选择操作的概率,设fi表示第i个个体的适应度值,那选择第i个个体的概率就是fi/fj,简单来说,这个概率的大小就决定了该个体是被淘汰还是被保留。通常的具体做法是用类似赌盘的方法,每个个体占它的适应度那么宽的转盘大小,每次掷色子,落到哪一格就选哪一格对应的个体。交叉操作:交叉操作就是让2个以上的染色体进行交叉产生后代的过程,具体的交叉操作要看

5、具体的问题。不过我觉得有一个原则,就是要有对称性,交叉得到的后代中的基因要来源于父代的所有个体中,也就是说n个个体进行交叉是和它们的排列没关系,这样子代才有机会得到更优秀的基因。交叉操作是遗传算法中最重要的操作。最简单的基本方式是交换父代中染色体片段。变异操作:生物可以突变,有时候突变是好的,有时候却是坏的,但正是因为有了突变才让有限的种群中基因库可以非常丰富,也保证了种群的适应能力。变异操作通常是翻转个体中某段染色体,编码后的染色体在计算机中都是01串,也就可以随机的翻转某个(或多个)bit上的值。交叉和变异不是一定要发生在选择了的个体上,而是按一定控制概率发生的,交叉概率比较高通常是0.6

6、0.95,而变异概率比较低通常是0.0010.01。五、 实验程序#include<stdio.h>#include<time.h>#include<stdlib.h>typedef struct _indi/个体 double code;/染色体 double degree;/适应度Indi;Indi group40;/种群规模为40/-/适应度算法void Judge(Indi &x)/适应度算法 double tmp=x.code*x.code-2.0; if(tmp>=0) x.degree=40.0/(2.0+tmp)-10.0; e

7、lse x.degree=40.0/(2.0-tmp)-10.0;/-int happened(double p)/是否发生一个概率在p=01的事件 return rand()<(int)(p*RAND_MAX);/-/交叉操作void Cross(Indi &x,Indi &y)/交叉操作,产生一个子代取代父代中最次的一个 Indi z; z.code=(x.code+y.code)/2.0;/交叉只进行了取平均值 Judge(z); if(x.degree<y.degree) if(z.degree<=x.degree) return;/如果新个体不如双亲

8、,淘汰之 x=z;/否则,替代父代中最次的一个 else if(z.degree<=y.degree) return; y=z; /-void main() srand(time(NULL);/设置随机数种子 int i,j,best,x,y,c; double sum,strick; for(i=0;i<40;+i)/随机得到初始种群 groupi.code=1.0+(double)rand()/RAND_MAX; Judge(groupi); for(i=1;i<=10;+i)/固定进化10代 for(sum=0.0,best=0,j=0;j<40;+j) sum+

9、=groupj.degree;/求总的适应度sum if(groupj.degree>groupbest.degree) best=j;/求当前最优个体 printf("第%2d代中 最优个体为 %10f(适应度%10f) 平均适应度为 %10fn", i,groupbest.code,groupbest.degree,sum/40.0); for(c=40;c;-c)/轮盘赌法选择个体 strick=(double)rand()/RAND_MAX*sum;/赌盘中的色子,选择个体x,y for(x=0;x<40&&strick>=grou

10、px.degree;+x) strick-=groupx.degree; strick=(double)rand()/RAND_MAX*sum; for(y=0;y<40&&strick>=groupy.degree;+y) strick-=groupy.degree; if(happened(0.9)/交叉率为0.9 Cross(groupx,groupy);/交叉 实验结果:六、实验心得本次人工智能实验是以小组任务来完成,小组中的几个成员分工明确,各有所长,就我们组所选择的人工智能遗传算法而言,从拿到题目不知所措到问题一一解决,例如程序运行错误,流程图难以画出等。重要的是在遗传算法实验过程中发现了遗传算法的优缺点,例如遗传算法直接以

温馨提示

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

评论

0/150

提交评论