遗传算法求函数极值.pdf

上传人:tbuqq 文档编号:5492004 上传时间:2020-05-23 格式:PDF 页数:15 大小:1.40MB
返回 下载 相关 举报
遗传算法求函数极值.pdf_第1页
第1页 / 共15页
遗传算法求函数极值.pdf_第2页
第2页 / 共15页
遗传算法求函数极值.pdf_第3页
第3页 / 共15页
遗传算法求函数极值.pdf_第4页
第4页 / 共15页
遗传算法求函数极值.pdf_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《遗传算法求函数极值.pdf》由会员分享,可在线阅读,更多相关《遗传算法求函数极值.pdf(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 = 169 f (s2) = f(24) = 242 = 576 f (s3) = f(8) = 82 = 64 f (s4) = f

2、(19) = 192 = 361 3. 选择 染色体的选择概率为: 标准文档 实用文案 染色体的累计概率为: 根据上面的式子,可得到: 标准文档 实用文案 例如设从区间0, 1中产生4 个随机数 : r1 = 0.450126, r2 = 0.110347 r3 = 0.572496, r4 = 0.98503 标准文档 实用文案 4. 交叉 基本遗传算法(SGA)中交叉算子采用单点交叉算子。 单点交叉运算 5. 变异 标准文档 实用文案 6. 至下一代,适应度计算选择交叉变异,直至满足终止条件 三、解决问题 标准文档 实用文案 初始化输入种群大小,交叉概率, 变异概率等条件 根据精度编码将区

3、间-1,2分成 Num 份,再通过Num 求解种群基因个数 (-1,2用二进制等分) 计算每个个体的适应度,该题适应 度函数就是f(X) 根据适应度求解积累概率,并用轮 盘赌法选着个体产生备选种群 在备选种群中,利用交叉概率,随 机选择个体,再随机选择交叉点进 行单点交叉,形成交叉后的种群 在交叉后种群中,利用变异概率, 随机选择个体,再随机选择变异点 进行单点变异,形成变异后的种群 是 否 达 到 迭代次数 输出结果最大 值。 是 否 标准文档 实用文案 四、实验结果 源代码: /* 问题:用遗传算法求解f(x)=xsin(10*x)+2.0 的最大值, x 取-1,2.*/ /* 洪文杰2

4、016-3-9. 智能优化算法第一次作业 */ #include /#includ #include #include #include #include using namespace std; #define NUMBER 50/ 种群规模 #define GENE_NUMBER 10000/迭代次数 int UnitNUMBER30;/初始种群 int Unit_chooseNUMBER30;/选择、交叉、变异后的种群 int NumberNUMBER;/ 被选择的个体编号 float FitnessNUMBER;/ 适应度 float select_probabilityNUMBER;

5、/选择概率 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);/查找选择 /v

6、oid 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; co

7、utstratend; Num=hwj_coding(strat,end); coutprecision; if(precision=0) cout=0;j-) sum+=Unitij*temp; temp*=2.0; Fitnessi=sum*3/(temp-1.0)-1.0; / coutaccumula_probabilityi-1) return i; return -1; void hwj_choose()/ 选择个体 float sum=0.0; float temp; int i; for(i=0;if_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;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1