遗传算法求函数极值[章节练习]

上传人:cn****1 文档编号:468853527 上传时间:2023-12-18 格式:DOC 页数:15 大小:462KB
返回 下载 相关 举报
遗传算法求函数极值[章节练习]_第1页
第1页 / 共15页
遗传算法求函数极值[章节练习]_第2页
第2页 / 共15页
遗传算法求函数极值[章节练习]_第3页
第3页 / 共15页
遗传算法求函数极值[章节练习]_第4页
第4页 / 共15页
遗传算法求函数极值[章节练习]_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《遗传算法求函数极值[章节练习]》由会员分享,可在线阅读,更多相关《遗传算法求函数极值[章节练习](15页珍藏版)》请在金锄头文库上搜索。

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、计概率为:根据上面的式子,可得到:例如设从区间0, 1中产生4个随机数: r1 = 0.450126, r2 = 0.110347 r3 = 0.572496, r4 = 0.985034. 交叉基本遗传算法(SGA)中交叉算子采用单点交叉算子。单点交叉运算5.变异6.至下一代,适应度计算选择交叉变异,直至满足终止条件三、解决问题初始化输入种群大小,交叉概率,变异概率等条件根据精度编码将区间-1,2分成Num份,再通过Num求解种群基因个数(-1,2用二进制等分)计算每个个体的适应度,该题适应度函数就是f(X)根据适应度求解积累概率,并用轮盘赌法选着个体产生备选种群在备选种群中,利用交叉概率,

3、随机选择个体,再随机选择交叉点进行单点交叉,形成交叉后的种群在交叉后种群中,利用变异概率,随机选择个体,再随机选择变异点进行单点变异,形成变异后的种群是否达到迭代次数输出结果最大值。是否 四、实验结果源代码:/*问题:用遗传算法求解f(x)=xsin(10*x)+2.0的最大值,x取-1,2.*/*洪文杰 2016-3-9. 智能优化算法 第一次作业*/#include/#includ#include#include#include#includeusing namespace std;#define NUMBER 50/种群规模#define GENE_NUMBER 10000/迭代次数in

4、t UnitNUMBER30;/初始种群int Unit_chooseNUMBER30;/选择、交叉、变异后的种群int NumberNUMBER;/被选择的个体编号float FitnessNUMBER;/适应度float 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);

5、/产生初始种群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_aberrance(int num,float aberrance);/变异后的得到的种群void hwj_max(int num);/找到最适应的个体in

6、t 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初始种群-endl;/*for(int i=0;iNUMBER;i+)for(int j=0;jNum;j+) coutUnitij ;coutendl;*/while(key!=G

7、ENE_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_cross(Num,cross);/*cout-5交叉后的种群-endl;for(int i=0;iNUMBER;i+)for(int j=0;jNum;j+) coutUnitij ;coutendl

8、;*/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_maxendl;return 0;int hwj_coding(int start,int end)/种群编码float precision;int temp=2;int sum;int N=1;cout请输入精度范围:precision;

9、if(precision=0) cout对不起精度不能为零:endl; return 0;elsesum=(end-start)/precision;coutsum:sumendl;while(tempsum)temp*=2; N+;return N;void hwj_initial_population(int num)/生成初始种群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(i

10、nt 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;/coutFitnessiendl;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_probability0;for(i=1;iNUMBER;i+)select_probabilityi=Fitnessi/sum;temp+=select_probabilityi;accumula_probabilityi=temp;/coutaccumula_probabilityiendl;for(i=0;iNUMBER;i+

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 习题/试题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号