版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.智能优化算法第一次作业 -遗传算法 洪文杰 S151000853问题:用遗传算法求解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、60;选择染色体的选择概率为:染色体的累计概率为:根据上面的式子,可得到:例如设从区间0, 1中产生4个随机数: r1 = 0.450126, r2 = 0.110347 r3 = 0.572496, r4 = 0.98503 4. 交叉基本遗传算法(SGA)中交叉算子采用单点交叉算子。单点交叉运算5. 变异6. 至下一代,适应度计算选择交叉变异,直至满足终止条件三、解决问题初始化输入种群大小,交叉概率,变异概率等条件根据精度编码将区间-1,
3、2分成Num份,再通过Num求解种群基因个数(-1,2用二进制等分)计算每个个体的适应度,该题适应度函数就是f(X)根据适应度求解积累概率,并用轮盘赌法选着个体产生备选种群在备选种群中,利用交叉概率,随机选择个体,再随机选择交叉点进行单点交叉,形成交叉后的种群在交叉后种群中,利用变异概率,随机选择个体,再随机选择变异点进行单点变异,形成变异后的种群是否达到迭代次数输出结果最大值。是否 四、实验结果源代码:/*问题:用遗传算法求解f(x)=xsin(10*x)+2.0的最大值,x取-1,2.*/*洪文杰 2016-3-9. 智能优化算法 第一次作业*/#include<iostream&g
4、t;/#includ<stdio.h>#include<stdlib.h>#include<math.h>#include<time.h>#include<float.h>using namespace std;#define NUMBER 50/种群规模#define GENE_NUMBER 10000/迭代次数int UnitNUMBER30;/初始种群int Unit_chooseNUMBER30;/选择、交叉、变异后的种群int NumberNUMBER;/被选择的个体编号float FitnessNUMBER;/适应度flo
5、at select_probabilityNUMBER;/选择概率float accumula_probabilityNUMBER ;/积累概率float f_max=0.0;/最大值float f_x=0.0;/最大值对应的自变量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);/
6、查找选择/void hwj_N_M(int a,int b,int N, int M);/从M个数中选N个不一样的数void hwj_cross(int num,float cross);/交叉后的得到种群void hwj_aberrance(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<<&
7、quot;请输入求解区间:"<<endl;cin>>strat>>end;Num=hwj_coding(strat,end);cout<<"Num:"<<Num<<endl;/cout<<"-1-"<<endl; hwj_initial_population(Num);/cout<<"-2初始种群-"<<endl;/*for(int i=0;i<NUMBER;i+)for(int j=0;j<N
8、um;j+) cout<<Unitij<<' 'cout<<endl;*/while(key!=GENE_NUMBER)hwj_fitness(Num);/cout<<"-3适应度-"<<endl;/for(int i=0;i<NUMBER;i+)/cout<<Fitnessi<<endl;/hwj_choose();/cout<<"-4被选择的个体-"<<endl;/*for(int i=0;i<NUMBER;i+)f
9、or(int j=0;j<Num;j+) cout<<Unit_chooseij<<' 'cout<<endl;*/hwj_cross(Num,cross);/*cout<<"-5交叉后的种群-"<<endl;for(int i=0;i<NUMBER;i+)for(int j=0;j<Num;j+) cout<<Unitij<<' 'cout<<endl;*/hwj_aberrance(Num,aberrance);/*cout&
10、lt;<"-6变异后的种群-"<<endl;for(int i=0;i<NUMBER;i+)for(int j=0;j<Num;j+) cout<<Unitij<<' 'cout<<endl;*/key+;hwj_max(Num);cout<<"最大值是对应的x值是:"<<endl;cout<<f_x<<endl;cout<<"最大值为:"<<f_max<<endl;re
11、turn 0;int hwj_coding(int start,int end)/种群编码float precision;int temp=2;int sum;int N=1;cout<<"请输入精度范围:"<<endl;cin>>precision;if(precision=0) cout<<"对不起精度不能为零:"<<endl; return 0;elsesum=(end-start)/precision;cout<<"sum:"<<sum<
12、<endl;while(temp<sum)temp*=2; N+;return N;void hwj_initial_population(int num)/生成初始种群srand(time(NULL);for(int i=0;i<NUMBER;i+)for(int j=0;j<num;j+)Unitij=rand()%2;void hwj_fitness(int num)/计算适应度float sum;int temp;for(int i=0;i<NUMBER;i+)temp=1;sum=0.0;for(int j=num-1;j>=0;j-)sum+=U
13、nitij*temp;temp*=2.0;Fitnessi=sum*3/(temp-1.0)-1.0;/cout<<Fitnessi;/cout<<"-+"Fitnessi=Fitnessi*sin(10*3.1415926*Fitnessi)+2.0;/cout<<Fitnessi<<endl;int hwj_binary_search(int l,int r,float temp)for(int i=0;i<NUMBER;i+)if(temp<=accumula_probabilityi&&te
14、mp>accumula_probabilityi-1)return i;return -1; void hwj_choose()/选择个体float sum=0.0;float temp;int i;for(i=0;i<NUMBER;i+)sum+=Fitnessi;select_probability0=Fitness0/sum;temp=accumula_probability0=select_probability0;for(i=1;i<NUMBER;i+)select_probabilityi=Fitnessi/sum;temp+=select_probability
15、i;accumula_probabilityi=temp;/cout<<accumula_probabilityi<<endl;for(i=0;i<NUMBER;i+)/srand(time(NULL);temp=(rand()%1000000)/1000000.0;/cout<<temp;Numberi=hwj_binary_search(0,NUMBER,temp);/cout<<Numberi<<endl;for(int j=0;j<NUMBER;j+)Unit_chooseij=UnitNumberij;/*voi
16、d 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; cout<<ai<<endl; / cout<<ai<<' '<<bai<<endl; */void hwj_cross(int num,float cross)/交叉后的得到种群int num_cross=NUMBER*cross;i
17、nt k;/交叉点int i , j;if(num_cross%2!=0)num_cross=num_cross+1;/需要交叉的个体数int croNUMBER;/被交叉的个体编号int tempNUMBER;/是否交叉数组一览for(i=0;i<NUMBER;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=0)
18、 tempcroi=1; i+; /for(int i=0;i<NUMBER;i+)/cout<<tempi<<" "<<croi<<endl;/cout<<num_cross<<endl;for(i=0;i<num_cross/2;i+)srand(time(NULL);k=rand()%num;for(j=0;j<num;j+)if(j<=k)Unitij=Unit_choosecronum_cross-ij; Uniti+num_cross/2j=Unit_choosecr
19、oij;elseUnitij=Unit_choosecroij; Uniti+num_cross/2j=Unit_choosecroij;for(i=0;i<NUMBER;i+)/cout<<tempi<<endl;if(tempi=0)for(j=0;j<num;j+)Unitnum_crossj=Unit_chooseij;num_cross+;void hwj_aberrance(int num,float aberrance)/变异后的得到的种群int num_aberrance=NUMBER*aberrance;/变异的个体数int k;/变异点int abeNUMBER;/变异的个体编号int tempNUMB
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T∕CPSS 102-2026 配电台区稳态电能质量协同控制技术规范
- 七年级信息技术 数据分析教学设计 青岛版
- 高中历史 专题三 中国社会主义建设道路的探索 二 伟大的历史性转折(2)教学教学设计 人民版必修2
- 六年级下科学教学设计-人的一生-青岛版(六年制三起)
- 2026自然资源法律实务完整试题及答案
- 项目五 描述洗衣机的洗衣流程-了解算法及其基本控制结构教学设计高中信息技术沪科版2019必修1 数据与计算-沪科版2019
- 人教版地理必修2第四章第2节《工业地域的形成》教学设计
- 2026年重庆公务员考试(计算机)强化训练试题及答案
- 2026第五次全国经济普查知识竞赛题库附含参考答案
- 孔子事迹知识问答及答案阐释
- 慢病患者居家康复护理指导手册
- 2026年注册营养师道真题(名校卷)附答案详解
- 食堂食材供货、配送服务保障方案
- 护患沟通人文关怀课件
- 高磷血症科普
- 设备管理技术培训课件
- 集装箱活动板房施工方案
- 一体化消防泵房水池施工方案
- 脊柱骨折的急救处理措施
- 中国2型糖尿病运动治疗指南(2024版)
- CJ/T 283-2017偏心半球阀
评论
0/150
提交评论