版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年面板检测系统项目发展计划
- 2024年飞机维修船坞项目发展计划
- 高考物理三轮冲刺 题型练辑 选考题保分练(四)(含解析)-人教版高三全册物理试题
- 2024年永生花项目合作计划书
- 2024-2030年中国销售参与平台行业市场现状供需分析及市场深度研究发展前景及规划战略投资分析研究报告
- 公路收费员心得体会7篇
- 2024-2030年中国铝管铸铝解决方案行业市场发展趋势与前景展望战略分析报告
- 2024-2030年中国铜管行业市场全景调研及投资价值评估咨询报告
- 2024-2030年中国铝制车用膨胀阀市场发展状况及投资策略建议报告
- 2024-2030年中国铍铜板带材市场发展现状及投资前景规划研究报告
- MOOC 医学心理学-山东大学 中国大学慕课答案
- 贵州省水利厅下属单位大坝安全监测中心公开招聘5人高频考题难、易错点模拟试题(共500题)附带答案详解
- 高中物理选修电容器省公开课一等奖全国示范课微课金奖
- 因私出国(境)审批表
- 择偶标准五十年变迁及其原因分析
- 2024年深圳市高三年级第二次调研(二模) 历史试卷(含答案)
- 全国咖啡师职业技能竞赛备赛考试题库(附答案)
- 民事公益诉讼原则的制度化及实施研究
- (正式版)SHT 3533-2024 石油化工给水排水管道工程施工及验收规范
- MOOC 机械制图1-郑州轻工业大学 中国大学慕课答案
- 2024年甘肃省2024届高三二诊生物试卷及答案
评论
0/150
提交评论