WORD格式整理
表2 第二代选中次数表
染色体 s1=11001 s2=01100 s3=11011 s4=10000 适应选择概积累概 估计的选中次度 率 率 数 625 0.36 0.36 1 144 0.08 0.44 0 729 0.41 0.85 2 256 0.15 1 1 假设这一轮选择-复制操作中,种群s2中的4个染色体都被选中,则得到群体:
s’=11001(25), s’= 01100(12)
1
2
s’=11011(27), s’= 10000(16)
3
4
做交叉运算,让s’与s’,s’与s’ 分别交换后三位基因,得
s’’ =11100(28), s’’ = 01001(9)
1
2
1234
s’’ =11000(24), s’’ = 10011(19)
3
4
这一轮仍然不会发生变异。于是,得第三代种群S3:
s1=11100(28),s2=01001(9)
s3=11000(24), s4=10011(19)
表3 第三代选中次数
染色体 适应度 选择概率 积累概率 估计的选中次数 s1=11100 784 0.44 0.44 s2=01001 81 0.04 0.48 s3=11000 576 0.32 0.8 s4=10011 361 0.2 1 2 0 1 1 设这一轮的选择-复制结果为:
s’=11100(28), s’=11100(28)
1
2
专业资料 值得拥有
WORD格式整理
s’=11000(24), s’=10011(19)
3
4
做交叉运算,让s’与s’,s’与s’ 分别交换后两位基因,得
1
4
2
3
s’’=11111(31), s’’=11100(28)
1
2
s’’=11000(24), s’’=10000(16)
3
4
这一轮仍然不会发生变异。
于是,得第四代种群S4:
s1=11111(31), s2=11100(28)
s3=11000(24), s4=10000(16)
显然,在这一代种群中已经出现了适应度最高的染色体s1=11111。于是,遗传操作终止,将染色体“11111”作为最终结果输出。然后,将染色体“11111”解码为表现型,即得所求的最优解:31。将31代入函数y=x2中,即得原问题的解,即函数y=x2的最大值为961。
六、遗传算法编程
MATLAB程序需要解决的问题是利用遗传算法,求解区间[0,31]上的二次函数y?x2的最大值。使用的是matlabR2010A,在WIN7环境下运行。鉴于此版本的软件不含有遗传算法工具箱,自行安装至路径“D:\\MATLAB\\R2010a\\toolbox\\genetic\\gatbx”,并在操作界面上添加路径。程序见附录一,程序界面如图3所示。
专业资料 值得拥有
WORD格式整理
图3 程序图
运行结果如图4所示。
专业资料 值得拥有
WORD格式整理
图4 运行结果图
由图可知,经过10代之后,遗传算法找个了二次函数的最优值。
附录一:运行程序
addpath D:\\MATLAB\\R2010a\\toolbox\\genetic\\gatbx
专业资料 值得拥有
WORD格式整理
fplot ('variable.*variable',[0,31]); NIND=4; %种群个体数目 MAXGEN=10; %最大遗传代数 PRECI=5; %变量的二进制位数 GGAP=1; %代沟
trace=zeros(2,MAXGEN); %寻优结果的初始值 FieldD=[5;0;31;1;0;1;1]; %区域描述器 Chrom=crtbp(NIND,PRECI); %初始种群 gen=0; %计数器
variable=bs2rv(Chrom,FieldD); %计算初始种群的十进制转换 ObjV=variable.*variable; %计算目标函数值 while gen FitnV=ranking(-ObjV); %分配适应度函数值 SelCh=select('sus',Chrom,FitnV,GGAP); %选择 SelCh=recombin('xovsp',SelCh,1); %重组,100% SelCh=mut(SelCh); %变异 variable=bs2rv(SelCh,FieldD); %子代个体的十进制转换 ObjVSel=variable.*variable; %计算子代的目标函数值 [Chrom ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入子代的新种群 variable=bs2rv(Chrom,FieldD); %子代个体的十进制转换 专业资料 值得拥有
遗传算法基本理论及实例



