ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:230.36KB ,
资源ID:3635158      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3635158.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(092遗传算法.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

092遗传算法.docx

1、092遗传算法2013-2014(1)专业课程实践论文题目:遗传算法一、算法理论一、编码以及初始种群的产生 编码采用二进制编码,初始种群采用矩阵的形式,每一行表示一个染色体,每一个染色体由若干个基因位组成。关于染色体的长度(即基因位的个数)可根据具体情况而定。比如说根据要求极值的函数的情况,本文的染色体长度为6,前5个二进制构成该染色体的值(十进制),第6个表示该染色体的适应度值。长度越长,表示解空间搜索范围越大。关于如何将二进制转换为十进制,这个应该很简单,文后的C代码中函数即为转换函数。 初始种群结构如下图所示: 图1该初始种群共有4个染色体,第一列表示各个染色体的编号,第2列表示该染色体

2、值的正负号,0表示正,1表示负。第3列到第7列为二进制编码,第8列表示各个染色体的适应度值。第2列到第7列的0-1值都是随机产生的。二、适应度函数一般情况下,染色体(也叫个体,或一个解)的适应度函数为目标函数的线性组合。本文直接以目标函数作为适应度函数。即每个染色体的适应度值就是它的目标函数值,。三、选择算子 初始种群产生后,要从种群中选出若干个体进行交叉、变异,那么如何选择这些个体呢?选择方法就叫做选择算子。一般有轮盘赌选择法、锦标赛选择法、排序法等。本文采用排序法来选择,即每次选择都选出适应度最高的两个个体。那么执行一次选择操作后,得到的新种群的一部分为下图所示:图2四、交叉算子 那么接下

3、来就要对新种群中选出的两个个体进行交叉操作,一般的交叉方法有单点交叉、两点交叉、多点交叉、均匀交叉、融合交叉。方法不同,效果不同。本文采用最简单的单点交叉。交叉点随机产生。但是交叉操作要在一定的概率下进行,这个概率称为交叉率,一般设置为到之间。交叉后产生的新个体组成的新种群如下:图3 黑体字表示子代染色体继承母代个体的基因情况。五、变异 变异就是对染色体的结构进行变异,使其改变原来的结构(值也就改变),达到突变进化的目的。变异操作也要遵从一定的概率来进行,一般设置为0到0.5之间。本文的变异方法直接采取基因位反转变异法,即0变为1,1变为0。要进行变异的基因位的选取也是随机的。六、终止规则遗传

4、算法是要一代一代更替的,那么什么时候停止迭代呢?这个规则就叫终止规则。一般常用的终止规则有:若干代后终止,得到的解达到一定目标后终止,计算时间达到一定限度后终止等方法。本文采用迭代数来限制。 二、算法框图 三、算法程序源程序: /* 用遗传算法求y=x*sin(10*pi*x)+2的最大值 -1=x=2 精确到6位小数 pow(2,21)3*1000000pow(2,22) 编码的二进制长度为22 */ #include #include #include #include #include #define N 3000000 #define PI 3.14159265 #define MAX

5、(a,b) (a)(b)?(a):(b) #define SIZE 50 #define MAXGEN 50 #define P_CORSS 0.75 #define P_MUTATION 0.05 #define LEN 22 typedef struct node char xLEN; double fitness,fitsum; node; node curSIZE,nextSIZE,max,min; double randd() return (double)rand()/RAND_MAX; int randi(int k) return (int)(randd()*k+0.5); /

6、计算当前种群中各个个体的适应度 void cal_fitness() int i,j,k; double d; for(i=0;i=0;j-) k=(k0?(curi.fitness+curi-1.fitsum):(cur0.fitness); void init() int tmp; for(int i=0;iSIZE;i+) tmp=randi(N); for(int j=0;j1; cal_fitness(); int sel() double p=randd(); double sum=curSIZE-1.fitsum; for(int i=0;ip) return i; /换代 vo

7、id tran() int i,j,pos; /找当前种群最优个体 max=cur0; for(i=1;imax.fitness) max=curi; for(int k=0;kSIZE;k+=2) /选择交叉个体 i=sel(); j=sel(); /选择交叉位置 pos=randi(LEN-1); /交叉 if(randd()P_CORSS) memcpy(nextk.x,curi.x,pos); memcpy(nextk.x+pos,curj.x+pos,LEN-pos); memcpy(nextk+1.x,curj.x,pos); memcpy(nextk+1.x+pos,curi.x

8、+pos,LEN-pos); else memcpy(nextk.x,curi.x,LEN); memcpy(nextk+1.x,curj.x,LEN); /变异 if(randd()P_MUTATION) pos=randi(LEN-1); nextk.xpos=nextk.xpos; pos=randi(LEN-1); nextk+1.xpos=nextk+1.xpos; /找下一代的最差个体 min=next0,j=0; for(i=1;iSIZE-1;i+) if(nexti.fitnessmin.fitness) min=nexti,j=i; /用上一代的最优个体替换下一代的最差个体

9、 nextj=max; memcpy(cur,next,sizeof(cur); cal_fitness(); /打印个体适应度和二进制编码 void print(node tmp) printf(%.6lf,tmp.fitness); for(int i=0;iLEN;i+) printf( %d,tmp.xi); printf(n); /打印种群 void printcur() for(int i=0;iSIZE;i+) print(curi); void GA() int cnt=0; double ans; while(cnt+MAXGEN) tran(); / printf(%.6l

10、fn,max.fitness); / printcur(); ans=cur0.fitness; for(int i=1;iSIZE;i+) ans=MAX(ans,curi.fitness); printf(%.6lfn,ans); int main() srand(unsigned)time(NULL); init(); GA(); system(pause); return 0; 四、算法实现例1用遗传算法求的最大值,精确到6位小数。解:运行结果:例2用遗传算法求的最大值,精确到6位小数。解:运行结果:例3用遗传算法求的最大值,精确到6位小数。解:运行结果: 例4用遗传算法求的最大值,精确到6位小数。解:运行结果:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1