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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

遗传算法求函数极值.docx

1、遗传算法求函数极值智能优化算法第一次作业 -遗传算法 洪文杰 S1*3问题:用遗传算法求解f(x)=xsin(10*x)+2、0的最大值,x取-1,2、一、分析:遗传算法基本思路二、实例简介1、 产生初始种群s1= 13 (01101)s2= 24 (11000)s3= 8 (01000)s4= 19 (10011)2、 计算适应度假定适应度为f(s)=s2 ,则f (s1) = f(13) = 132 = 169f (s2) = f(24) = 242 = 576f (s3) = f(8) = 82 = 64f (s4) = f(19) = 192 = 3613、选择染色体的选择概率为:染色

2、体的累计概率为:根据上面的式子,可得到:例如设从区间0, 1中产生4个随机数: r1 = 0、450126, r2 = 0、110347 r3 = 0、572496, r4 = 0、985034、 交叉基本遗传算法(SGA)中交叉算子采用单点交叉算子。单点交叉运算5、变异6、至下一代,适应度计算选择交叉变异,直至满足终止条件三、解决问题四、实验结果源代码:/*问题:用遗传算法求解f(x)=xsin(10*x)+2、0的最大值,x取-1,2、*/*洪文杰 2016-3-9、 智能优化算法 第一次作业*/#include/#includ#include#include#include#includ

3、eusing namespace std;#define NUMBER 50/种群规模#define GENE_NUMBER 10000/迭代次数int UnitNUMBER30;/初始种群int Unit_chooseNUMBER30;/选择、交叉、变异后的种群int NumberNUMBER;/被选择的个体编号float FitnessNUMBER;/适应度float select_probabilityNUMBER;/选择概率float accumula_probabilityNUMBER ;/积累概率float f_max=0、0;/最大值float f_x=0、0;/最大值对应的自变

4、量int hwj_coding(int start,int end);/编码void hwj_initial_population(int num);/产生初始种群void hwj_fitness(int num);/适应度计算void hwj_choose();/选择个体int hwj_binary_search(int l, int r,float temp);/查找选择/void hwj_N_M(int a,int b,int N, int M);/从M个数中选N个不一样的数void hwj_cross(int num,float cross);/交叉后的得到种群void hwj_abe

5、rrance(int num,float aberrance);/变异后的得到的种群void hwj_max(int num);/找到最适应的个体int main() int strat,end;/区间 int Num;/编码大小 float cross=0、8;/交叉概率 float aberrance = 0、04;/变异概率 int key=1; cout请输入求解区间:stratend; Num=hwj_coding(strat,end); coutNum:Numendl;/ cout-1-endl; hwj_initial_population(Num);/ cout-2初始种群-e

6、ndl;/* for(int i=0;iNUMBER;i+) for(int j=0;jNum;j+) coutUnitij ; coutendl; */ while(key!=GENE_NUMBER) hwj_fitness(Num);/ cout-3适应度-endl;/ for(int i=0;iNUMBER;i+)/ coutFitnessiendl;/ hwj_choose();/ cout-4被选择的个体-endl;/* for(int i=0;iNUMBER;i+) for(int j=0;jNum;j+) coutUnit_chooseij ; coutendl; */ hwj_

7、cross(Num,cross);/* cout-5交叉后的种群-endl; for(int i=0;iNUMBER;i+) for(int j=0;jNum;j+) coutUnitij ; coutendl; */ hwj_aberrance(Num,aberrance);/* cout-6变异后的种群-endl; for(int i=0;iNUMBER;i+) for(int j=0;jNum;j+) coutUnitij ; coutendl; */ key+; hwj_max(Num); cout最大值就是对应的x值就是:endl; coutf_xendl; cout最大值为:f_m

8、axendl; return 0;int hwj_coding(int start,int end)/种群编码 float precision; int temp=2; int sum; int N=1; cout请输入精度范围:precision; if(precision=0) cout对不起精度不能为零:endl; return 0; else sum=(end-start)/precision; coutsum:sumendl; while(tempsum) temp*=2; N+; return N; void hwj_initial_population(int num)/生成初始

9、种群 srand(time(NULL); for(int i=0;iNUMBER;i+) for(int j=0;jnum;j+) Unitij=rand()%2; void hwj_fitness(int num)/计算适应度 float sum; int temp; for(int i=0;i=0;j-) sum+=Unitij*temp; temp*=2、0; Fitnessi=sum*3/(temp-1、0)-1、0;/ coutFitnessi;/ cout-+; Fitnessi=Fitnessi*sin(10*3、1415926*Fitnessi)+2、0;/ coutFitne

10、ssiendl; int hwj_binary_search(int l,int r,float temp) for(int i=0;iNUMBER;i+) if(tempaccumula_probabilityi-1) return i; return -1; void hwj_choose()/选择个体 float sum=0、0; float temp; int i; for(i=0;iNUMBER;i+) sum+=Fitnessi; select_probability0=Fitness0/sum; temp=accumula_probability0=select_probabil

11、ity0; for(i=1;iNUMBER;i+) select_probabilityi=Fitnessi/sum; temp+=select_probabilityi; accumula_probabilityi=temp;/ coutaccumula_probabilityiendl; for(i=0;iNUMBER;i+)/ srand(time(NULL); temp=(rand()%1000000)/1000000、0;/ couttemp; Numberi=hwj_binary_search(0,NUMBER,temp);/ coutNumberiendl; for(int j=

12、0;jNUMBER;j+) Unit_chooseij=UnitNumberij; /*void hwj_N_M(int a,int b,int N,int M)/从M个数中选N个不一样的数 int i=1; srand(time(NULL); a0=rand()%M; ba0=1; while(i!=N) ai=rand()%M; if(bai=0) i+; bai=1; coutaiendl; / coutai baiendl; */void hwj_cross(int num,float cross)/交叉后的得到种群 int num_cross=NUMBER*cross; int k;

13、/交叉点 int i , j; if(num_cross%2!=0) num_cross=num_cross+1; /需要交叉的个体数 int croNUMBER;/被交叉的个体编号 int tempNUMBER;/就是否交叉数组一览 for(i=0;iNUMBER;i+) croi=-1; tempi=0; / hwj_N_M(cro,temp,num_cross,NUMBER); srand(time(NULL); cro0=rand()%NUMBER; tempcro0=1; i=1; while(i!=num_cross) croi=rand()%NUMBER; if(tempcroi

14、=0) tempcroi=1; i+; / for(int i=0;iNUMBER;i+)/ couttempi croiendl;/ / coutnum_crossendl; for(i=0;inum_cross/2;i+) srand(time(NULL); k=rand()%num; for(j=0;jnum;j+) if(j=k) Unitij=Unit_choosecronum_cross-ij; Uniti+num_cross/2j=Unit_choosecroij; else Unitij=Unit_choosecroij; Uniti+num_cross/2j=Unit_cho

15、osecroij; for(i=0;iNUMBER;i+)/ couttempiendl; if(tempi=0) for(j=0;jnum;j+) Unitnum_crossj=Unit_chooseij; num_cross+; void hwj_aberrance(int num,float aberrance)/变异后的得到的种群 int num_aberrance=NUMBER*aberrance;/变异的个体数 int k;/变异点 int abeNUMBER;/变异的个体编号 int tempNUMBER;/就是否变异数组一览 int i,j,p; for(i=0;iNUMBER

16、;i+) abei=-1; tempi=0; / hwj_N_M(cro,temp,num_cross,NUMBER); srand(time(NULL); abe0=rand()%NUMBER; tempabe0=1; i=1; while(i!=num_aberrance) abei=rand()%NUMBER; if(tempabei=0) tempabei=1; i+; for( i=0;iNUMBER;i+) for( j=0;jnum_aberrance;j+) if(i=abej) k=rand()%num; for( p=0;pnum;p+) if(p=k) if(Unitip=1) Unitip=0; else Unitip=1; void hwj_max(int num) hwj_fitness(num);/ float max=0、0; int i; int temp=1; float sum=0、0; int k; for(i=0;iNUMBER;i+)/ coutFitnessif_max) f_max=Fitnessi; k=i; for(int j=num-1;j=0;j-) sum+=Unitkj*temp; temp*=2、0; f_x=sum*3/(temp-1、0)-1、0;

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

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