1、实验一:基于遗传算法的函数优化1、实验目的1) 掌握 Matlab 子函数的编写与调用。2) 理解基本遗传算法的原理,并利用程序实现利用遗传算法优化非线性函数的解。2、实验内容与实验要求1) 掌握基本遗传算法方法原理。2) 掌握 matlab 子函数的编写方法及调用方法。3) 根据基本遗传算法方法原理,编写 Matlab 程序,优化非线性函数的解。4) 设 f(x) = -x2 - 4x + 1,求 max f(x), x -2, 2,解的精度保留二位小数3、遗传算法原理遗传算法模拟自然选择和自然遗传过程中发生的繁殖、交叉和基因突变现象,在每次迭代中都保留一组候选解,并按某种指标从解群中选取较
2、优的个体,利用遗传算子( 选择、交叉和变异)对这些个体进行组合,产生新一代的候选解群,重复此过程,直到满足某种收敛指标为止。4、主程序及子函数:主函数:clearclcmy_scale=80; %种群规模gen_len=22; %基因长度M=100; %迭代次数pc=0.7; %交叉概率pm=0.05; %变异概率new_scale=produscale(my_scale,gen_len); %产生初始种群fitfit=; fittimer=; best_f1=;best_x1=; for i=1:Mmy_f=cal_my_f(new_scale); %计算函数值my_fit=cal_my_f
3、it(my_f); %计算适应度值next_scale=my_sellect(new_scale,my_fit); %采用赌轮盘法选择cross_scale=my_cross(next_scale,pc); %按概率交叉mut_scale=my_mutat(cross_scale,pm); %按概率变异%寻找每一代中的最优适应度值所对应的个体best_fit=my_fit(1); sx,sy=size(new_scale);for j=2:length(my_fit)if best_fit=anext_scale(j,:)=new_scale(1,:);else if accum(i)=ane
4、xt_scale(j,:)=new_scale(i+1,:);j=j+1;endendendendend%子函数:按概率交叉function cross_scale=my_cross(new_scale,pc)sx,sy=size(new_scale);cross_scale=new_scale;for i=1:2:sx-1if randpca=round(rand*sy);cross_scale(i,:)=new_scale(i,1:a),new_scale(i+1,a+1:end);cross_scale(i+1,:)=new_scale(i+1,1:a),new_scale(i,a+1:
5、end);endend%子函数:按概率变异function mut_scale=my_mutat(new_scale,pm)sx,sy=size(new_scale);mut_scale=new_scale;for i=1:sxif randpm a=round(rand*sy);if a=0a=1;endif mut_scale(i,a)=0mut_scale(i,a)=1;elsemut_scale(i,a)=0;endendend%子函数:2进制转10进制function mychange=my2to10(new_scale)sx,sy=size(new_scale);new_scale
6、1=new_scale;for i=1:synew_scale1(:,i)=2.(sy-i).*new_scale(:,i);endmychange=sum(new_scale1,2);end5、运行结果及分析连续运行程序 4 次得到的运行结果如下:第一次:(best_fit,best_f,best_x 分别代表每一代中最优个体的适应度值,函数值,以及所对应的自变量 x 的值)best_fit,best_f,best_x=10.0000 5.0000 -1.9996第二次:best_fit,best_f,best_x=10.0000 5.0000 -1.9985第三次:best_fit,bes
7、t_f,best_x=10.0000 5.0000 -1.9969第四次best_fit,best_f,best_x=9.9999 4.9999 -1.9916对应的迭代次数与适应度函数图如下:0 50 1009.979.989.9910代 代 代 代 (1)-wxb代代代代代0 50 1009.989.9859.999.99510代 代 代 代 (2)-wxb代代代代代0 50 1009.979.989.9910代 代 代 代 (3)-wxb代代代代代0 50 1009.99.9510代 代 代 代 (4)-wxb代代代代代由连续四次的运行结果可以看出:(1) 基本上每次运行结果都能够找到最有的解,即当 x 取-2 时,函数最大值为 5,说明此算法的稳定性比较高,可靠性好;(2) 达到最大值的精度也比较的高,前三次为 5,第四次为 4.9999。(3) 从迭代次数与适应度函数值的图像中分析,可以得到并不是迭代次数越多,所对应的适应度值最大,而是在迭代的 100 次里面中间的某一次或者某几次适应度值最大。这是因为我们在选择的时候,采用赌轮盘的放来来选择,而此方法是以概率来选择,因此存在将相对较差的个体选择到的可能性,再加上交叉和变异也是不定向的,从而使得每代中最有个体的出现差异。(4) 影响结果的因素:(a)迭代次数;(b)编码长度;(c )种群规模;(d)变异和交叉的概率。