《2022年第七章-遗传算法应用举例》由会员分享,可在线阅读,更多相关《2022年第七章-遗传算法应用举例(36页珍藏版)》请在金锄头文库上搜索。
1、97 第七章遗传算法应用举例遗传算法提供了一种求解非线性、多模型、多目标等复杂系统优化问题的通用框架,它不依赖于问题具体的领域。随着对遗传算法技术的不断研究,人们对遗传算法的实际应用越来越重视,它已经广泛地应用于函数优化、组合优化、自动控制、机器人学、图象处理、人工生命、遗传编码、机器学习等科技领域。遗传算法已经在求解旅行商问题、背包问题、装箱问题、图形划分问题等多方面的应用取得了成功。本章通过一些例子,介绍如何利用第五章提供的遗传算法通用函数,编写MATLAB程序,解决实际问题。7.1 简单一元函数优化实例利用遗传算法计算下面函数的最大值:( )sin(10)2.0 1,2f xxxx,选择
2、二进制编码,种群中个体数目为40,每个种群的长度为20,使用代沟为0.9,最大遗传代数为25。下面为一元函数优化问题的MATLAB 代码。figure(1); fplot (variable.*sin(10*pi*variable)+2.0,-1,2); %画出函数曲线% 定义遗传算法参数NIND= 40; % 个体数目 (Number of individuals) MAXGEN = 25; % 最大遗传代数(Maximum number of generations) PRECI = 20; % 变量的二进制位数(Precision of variables) GGAP = 0.9; %
3、代沟 (Generation gap) trace=zeros (2, MAXGEN); % 寻优结果的初始值FieldD = 20;-1;2;1;0;1;1; % 区域描述器 (Build field descriptor) Chrom = crtbp(NIND, PRECI); % 初始种群gen = 0; % 代计数器variable=bs2rv(Chrom,FieldD); % 计算初始种群的十进制转换ObjV = variable.*sin (10*pi*variable)+2.0; % 计算目标函数值while gen MAXGEN, FitnV = ranking (-ObjV)
4、; % 分配适应度值 (Assign fitness values) SelCh = select (sus, Chrom, FitnV , GGAP); % 选择SelCh = recombin (xovsp,SelCh,0.7); % 重组SelCh = mut(SelCh); % 变异variable=bs2rv(SelCh,FieldD); % 子代个体的十进制转换ObjVSel =variable.*sin(10*pi*variable)+2.0; % 计算子代的目标函数值Chrom ObjV=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); % 重插入子代的
5、新种群gen = gen+1; % 代计数器增加% 输出最优解及其序号,并在目标函数图象中标出,Y 为最优解, I 为种群的序号Y,I=max(ObjV),hold on; plot (variable (I),Y, bo); trace (1,gen)=max (ObjV); %遗传算法性能跟踪精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 36 页98 trace (2,gen)=sum (ObjV)/length (ObjV); end variable=bs2rv (Chrom,FieldD); %最优个体的十进制转换hold
6、on,grid; plot (variable,ObjV,b*); figure (2); plot (trace (1,:); hold on; plot (trace (2,:),-.);grid; legend (解的变化 ,种群均值的变化) 使用基于适应度的重插入确保四个最适应的个体总是被连续传播到下一代。这样在每一代中有 36NIND*GGAP 个新个体产生。区域描述器FieldD 描述染色体的表示和解释,每个格雷码采用20 位二进制, 变量区间为-1,2。程序段 Chrom = crtbp (NIND, PRECI)表示一个初始种群Chrom 被函数 crtbp 创建,它是由NIN
7、D 个均匀分布长度为PRECI 的二进制串矩阵构成。基于排序的适应度分配计算由程序段FitnV = ranking (-ObjV)实现。对这个等级评定算法的缺省设置是选择等差为2 和使用线性评估,给最适应个体的适应度值为 2,最差个体的适应度值为0,这里的评定算法假设目标函数是最小化的,所以ObjV乘了一个负号,使目标函数为最大化。适应度值结果被向量FitnV 返回。选择层使用高级函数选择调用低级函数随机遍历抽样例程sus,SelCh 包含来自原始染色体的 GGAP *NIND个个体, 这些个体将使用高级函数recombin 进行重组, recombin 使个体通过 SelCh 被选择再生产,
8、并使用单点交叉例程xovsp,使用交叉概率执行并叉。交叉后产生的子代被同一个矩阵SelCh 返回,实际使用的交叉例程通过支持使用不同函数名字串传递给recombin 而改变。为了产生一组子代,变异使用变异函数mut。子代再次由矩阵SelCh 返回,变异概率缺省值,这里Lind 是假定的个体长度。再次使用bs2rv,将个体的二进制编码转换为十进制编码,计算子代的目标函数值ObjVSel 。由于使用了代沟,所以子代的数量比当前种群数量要小,因此需要使用恢复函数reins。这里 Chrom 和 SelCh 是矩阵, 包含原始种群和子代结果。这两个事件的第一个被使用单个种群和采用基于适应度的恢复,基于
9、适应度的恢复用SelCh 中的个体代替Chrom 中最不适应的个体。新种群中的个体是由原始种群中的优良个体和子代中新产生的个体组成。原始种群中个体的目标函数值ObjV随后又作为函数reins 的输入参数,子代中个体的目标函数值由ObjVSel 提供。 Reins 返回具有插入子代的新种群Chrom 和该种群中个体的目标函数值ObjV 。每次迭代后的最优解和解的均值存放在trace 中。这个遗传优化的结果包含在矩阵ObjV中。决策变量的值为variable (I) 。画出迭代后个体的目标函数值分布图和遗传算法性能跟踪图。遗传算法的运行结果如下:( )sin(10)2.0 1,2f xxxx,的图
10、象。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 36 页99 图 7.1 目标函数图像2图 7.2 为目标函数的图像和初始随机种群个体分布图。图 7.2 初始种群分布图3经过 1次遗传迭代后,寻优结果如图7.3 所示。 x=,f(x)=。图 7.3 一次遗传迭代后的结果4经过 10 次遗传迭代后,寻优结果如图7.4 所示。 x=, f(x)=。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 36 页100 图 7.4 经过 10 次遗传迭代后的结果5经过 25 次遗传迭代后,
11、寻优结果如图7.5 所示。x=, f(x)。图 7.5 经过 25 次遗传迭代后的结果6经过 25 次迭代后最优解的变化和种群均值的变化见图7.6。图 7.6 经过 25 次迭代后最优解的变化和种群均值的变化7.2 多元单峰函数的优化实例目标函数是De Jong 函数,是一个连续、凸起的单峰函数,它的M 文件 objfun1 包含在GA 工具箱软件中。De Jong 函数的表达式为求解min( )512512ifxx,这里 n 是定义问题维数的一个值。这个例子中选取n=20。由 De Jong 函数的表达式可以看出,De Jong 函数是一个简单的平方和函数,只有一个极小点 0,0,0 ,理论
12、最小值为f(0,0,0)=0。程序的主要变量:个体的数量NIND 为 40,最大遗传代数为MAXGEN=300 ,变量维数为NVAR=20 ,每个变量使用20 位表示,即PRECI = 20 ,使用代沟。下面为求解De Jong 函数最小值的MATLAB代码。% 定义遗传算法参数NIND = 40; % 个体数目 (Number of individuals) MAXGEN =500; % 最大遗传代数 (Maximum number of generations) 21( )512512,niiif xxx精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - -
13、 -第 4 页,共 36 页101 NVAR = 20; % 变量的维数PRECI = 20; % 变量的二进制位数(Precision of variables) GGAP = 0.9; % 代沟 (Generation gap) trace=zeros (MAXGEN,2); % 建立区域描述器(Build field descriptor) FieldD = rep (PRECI,1,NVAR);rep (-512;512,1,NVAR);rep (1;0;1;1,1,NVAR); Chrom = crtbp (NIND, NV AR*PRECI); % 创建初始种群gen = 0; %
14、 代计数器ObjV = objfun1(bs2rv (Chrom,FieldD); % 计算初始种群个体的目标函数值while gen MAXGEN, % 迭代FitnV = ranking (ObjV); % 分配适应度值 (Assign fitness values) SelCh = select (sus, Chrom, FitnV , GGAP); % 选择SelCh = recombin (xovsp,SelCh,0.7); % 重组SelCh = mut (SelCh); % 变异ObjVSel = objfun1 (bs2rv (SelCh,FieldD); % 计算子代目标函数
15、值Chrom ObjV=reins (Chrom,SelCh,1,1,ObjV,ObjVSel); % 重插入gen = gen+1; % 代计数器增加% 输出最优解及其对应的20 个自变量的十进制值,Y 为最优解, I 为种群的序号trace (gen,1)=min (ObjV); % 遗传算法性能跟踪trace (gen,2)=sum (ObjV)/length (ObjV); end plot (trace (:,1);hold on; plot (trace (:,2),-.);grid; legend (种群均值的变化,解的变化 ) 区域描述器的构建采用矩阵复制函数rep 建立矩阵F
16、ieldD ,描述染色体的表示和解释。一个初始种群被函数crtbp 创建,随后产生一个矩阵Chrom,它由 NIND 个均匀分布长度为 NVAR*PRECI 的二进制串构成。使用函数objfun1 重新计算目标函数,初始种群中的所有个体的目标函数值由下面程序段计算:ObjV = objfun1(bs2rv (Chrom, FieldD); 函数 bs2rv 根据域描述器FieldD 转换矩阵Chrom 的二进制串为实值,返回一实值表现型的矩阵。这个bs2rv 返回值矩阵通过直接作为目标函数objfun1 的输入变量,目标函数结果被返回在矩阵ObjV 中。这个例子中基于排序的适应度分配计算由下面
17、程序段实现:FitnV = ranking (ObjV); 对这个等级评定算法的缺省设置是选择等差2,使用线性评估, 给最适应个体的适应度值为 2 和最差个体的适应度值为0。适应度值结果被向量FitnV 返回。使用高级函数选择调用低级函数随机遍历抽样例程sus,程序段为:SelCh = select ( sus , Chrom, FitnV, GGAP);后面的选择中,SelCh 包含来自原始染色体的GGAP *NIND个个体,这些个体将使用高级函数 recombin 进行重组,程序段为:SelCh = recombin (xovsp, SelCh, 0.7); 函数 recombin 使个体
18、通过SelCh 被选择再生产, 并使用单点交叉例程函数xovsp,使用交叉概率执行并叉。个体作为矩阵SelCh 的输入被排序, 以便使奇数位置的个体与它相邻的个体进行交叉, 如果 SelCh 个体的数量是奇数个,则最后一个个体不进行交叉而返回。交叉后产生的子代被同一个矩阵SelCh 返回,实际使用的交叉例程通过支持使用不同函数名字串传递给精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 36 页102 recombin 而改变。为了产生一组子代,变异现在使用变异函数mut:SelCh = mut (SelCh); 子代再次由矩阵SelCh
19、 返回,函数调用中变异概率没有被指定,这个缺省值,这里Lind是个体的长度。子代的目标函数值ObjVSel 由程序段计算:ObjVSel = objfun1 (bs2rv (SelCh, FieldD); 因为使用了代沟,子代的数量比当前种群数量要小,完成使用恢复函数reins:Chrom,ObjV=reins (Chrom, SelCh,1,1,ObjV,ObjVSel); 这里, Chrom 和 SelCh 是矩阵包含原始种群和子代结果。这两个事件的第一个被使用单个种群和采用基于适应度的恢复,基于适应度的恢复用SelCh 中的个体代替Chrom 中最不适应的个体。原始种群目标函数值ObjV
20、 随后被要求作为reins 的参数,另外新种群的目标函数值不用重新计算整个种群的目标函数而返回,子代的目标值ObjVSel 被提供。 Reins 返回具有插入子代的新种群Chrom 和这个种群的目标函数值ObjV 。这个遗传优化的结果包含在矩阵ObjV 中,决策变量的值可能被包含在下面程序段中:Phen = bs2rv (Chrom, FieldD); 遗传算法的运行结果如下:1图 7.7 为二维 De Jong 函数图形。图 7.7 二维 De Jong 函数图形2初始种群中个体的目标函数值分布图如图7.8 所示。图 7.8 初始种群中个体的目标函数值分布图3经过 20 次遗传迭代后的结果如
21、图7.9 所示。此时 min ( )f x = 2.7412e+005。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 36 页103 图 7.9 经过 20 次遗传迭代后的结果4经过 100 次遗传迭代后的结果如图7.10 所示。此时min ( )f x = 6.9666e+003。图 7.10 经过 100次遗传迭代后的结果5 经过 250 次遗传迭代后的结果如图7.11 所示。此时min ( )f x =。图 7.11 经过 250次遗传迭代后的结果6经过 500 次遗传迭代后的结果如图7.12 所示。此时min ( )f x =
22、。图 7.12 经过 500次遗传迭代后的结果7经过250 次迭代后种群目标函数均值的变化和最优解的变化如图7.13 所示。min ( )f x =时 20 个变量的值见表7.1。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 36 页104 图 7.13 经过 250 次迭代后种群目标函数均值的变化和最优解的变化表 7.1 目标函数取最优解时20个变量的值7.3 多元多峰函数的优化实例Shubert 函数为:55121211(,)cos(1)cos(1)1010(1,2)iiif x xiixiiixixi,求)(minxf。Shub
23、ert 函数图像。图 7.14 Shubert 函数图下面为Shubert 函数寻优的MA TLAB 代码。function z=Shubert (x,y) % Shubert 函数z= ( (1*cos ( (1+1)*x+1)+ (2*cos ( (2+1)*x+2)+ (3*cos ( (3+1)*x+3)+(4*cos ( ( 4+1)*x+4)+ (5*cos ( (5+1)*x+5).* ( (1*cos ( (1+1)*y+1)+(2*cos ( (2+1)*y+2)+ (3*cos ( (3+1)*y+3)+ (4*cos ( (4+1)*y+4)+ (5*cos ( (5+1
24、)*y+5); x1,x2=meshgrid (-10:.1:10); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 36 页105 Figure(1);mesh (x1,x2,Shubert (x1,x2); % 画出 Shubert 函数图像% 定义遗传算法参数NIND = 40; % 个体数目 (Number of individuals) MAXGEN =50; % 最大遗传代数 (Maximum number of generations) NVAR = 2; % 变量数目PRECI = 25; % 变量的二进制位数(Pre
25、cision of variables) GGAP =0.9; % 代沟 (Generation gap) % 建立区域描述器(Build field descriptor) FieldD = rep (PRECI,1,NVAR);rep (-3;3,1,NVAR);rep (1;0;1;1,1,NVAR); Chrom = crtbp (NIND, NV AR*PRECI); % 创建初始种群gen = 0; trace=zeros (MAXGEN,2); % 遗传算法性能跟踪初始值x=bs2rv (Chrom,FieldD); % 初始种群十进制转换ObjV =Shubert (x (:,
26、1),x (:,2); % 计算初始种群的目标函数值while gen MAXGEN, FitnV = ranking (ObjV); % 分配适应度值 (Assign fitness values) SelCh = select (sus, Chrom, FitnV , GGAP); % 选择SelCh = recombin (xovsp,SelCh,0.7); % 重组SelCh = mut (SelCh); % 变异x=bs2rv (SelCh,FieldD); % 子代十进制转换ObjVSel =Shubert (x (:,1),x (:,2) ; % 重插入Chrom ObjV=re
27、ins (Chrom,SelCh,1,1,ObjV,ObjVSel); gen = gen+1; Y,I=min (ObjVSel); Y, bs2rv (Chrom (I,:),FieldD) ; % 输出最优解及其对应的自变量值trace (gen,1)=min (ObjV); trace (gen,2)=sum (ObjV)/length (ObjV); % 遗传算法性能跟踪if (gen=50) % 迭代数为 50 时画出目标函数图figure (2); plot (ObjV);hold on; plot (ObjV ,b*);grid; end end figure (3);clf;
28、 plot (trace (:,1);hold on; plot (trace (:,2),-.);grid; legend (解的变化 ,种群均值的变化) 遗传算法的显示结果如下:1初始种群的目标函数值分布如图7.15 所示。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 36 页106 图 7.15 初始种群的目标函数值2经过一次迭代后的目标函数值如图7.16 所示。此时1x,2x,)(minxf=。图 7.16 经过一次迭代后的结果3经过 10 次迭代后的目标函数值如图7.17 所示。此时1x,2x,)(minxf=。图 7.17
29、 经过 10 次迭代后的结果4经过 50 次迭代后的目标函数值如图7.18 所示。此时1x,2x,)(minxf=。图 7.18 经过 50 次迭代后的结果精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 36 页107 5经过 50 次迭代后,种群目标函数均值的变化和最优解的变化如图7.19 所示。图 7.19 经过 50 次迭代后种群目标函数均值的变化和最优解的变化7.4 收获系统最优控制收获系统 Harvest是一个一阶的离散方程,表达式为:(1)*( )( )1,2,.(0)()x ka x ku kkNstxx N这里)0(x
30、是一个初始的状态条件,a是一个刻度常量,RkuRkx)(,)(是状态和非常控制,N是解决问题使用的步骤数。目标函数为:Nkkuuf1)()(max这个问题的精确优化解答可由下式确定:)1()1)(0(max12aaaxNNGA 工具箱提供一个M 文件实现这个函数objharv。注意,这里是一个最大化问题,工具箱例程实现是最小化问题,这个目标函数objharv,)(uf乘 1即产生为最小化问题。这个最初条件 x(0)设为 100, a 取为。这个问题的控制步骤N=20, 因此使用的决策变量个数NVAR=20 , 作为每个控制输入Uk。决策变量被限制在RANG=0 ,200范围,限制最大的控制输入
31、在任意步为200,这个区域描述器 FieldD 描述决策变量可以使用矩阵复制函数rep 构造。这个 GA 的参数可用MATLAB 变量来指定。除了传统GA 参数例如代沟(GGAP) 和交叉概率(XOVR) 外,还有大量与多种群GAS 有关的其它参数被定义。这里, 说明每一代中只有90%产生个体被复制到种群中,SUBPOP = 8,说明 8 个子种群使用迁移概率为或20%,每 20 代MIGGEN= 20 在子种群与当前迁移之间。每个子种群包含20 个个体, NIND = 20 。脚本文件使用的函数使用MATLAB串指定。用串 SEL_F 、XOV_F 、MUT_F 、OBJ_F指定分别代表:选
32、择函数名、重组函数名、变异函数名、目标函数名。由于使用离散重组函数recdis 进行子代的培育,交叉概率没有使用,XOVR = 1 。初始种群的创建使用函数crtrp,代计数器gen设置为 0。在由 FieldD 指定的范围内使用一致性随机挑选个体决策变量组成SUBPOP *NIND个个精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 36 页108 体。矩阵Chrom 包含了所有子种群并且子种群中所有个体的目标函数值能使用MA TLAB 的feval 命令直接计算。ObjV = feval (OBJ_F, Chrom);Feval执行
33、函数计算获得第一个输入变量,这里是目标函数名objharv,包含在 OBJ_F 中,这个函数将被计算并用剩余的参数作为输入调用这个函数。这里函数调用是:ObjV = objharv (Chrom); 由于使用实值编码,不需要将染色体转换为表现型表示。GA 现在将进入代循环。下面为收获系统最优控制的MATLAB 代码。% 定义遗传算法参数NVAR = 20; % 变量维数RANGE = 0; 200; % 变量范围GGAP = 0.8; % 代沟 (Generation gap) XOVR = 1; % 交叉率MUTR = 1/NV AR; % 变异率MAXGEN = 500; % 最大遗传代数
34、(Maximum number of generations) INSR = 0.9; % 插入率SUBPOP =8; % 子种群数MIGR = 0.2; % 迁移率MIGGEN = 20; % 在子种群与迁移之间20 代NIND = 20; % 个体数目 (Number of individuals) SEL_F = sus; % 选择函数名XOV_F =recdis; % 重组函数名MUT_F =mutbga; % 变异函数名OBJ_F =objharv; % 目标函数名FieldDD = rep (RANGE,1,NVAR); % 译码矩阵gen=0; trace=zeros (MAXG
35、EN,2); % 遗传算法性能跟踪Chrom=crtrp (NIND,FieldDD); % 创建初始种群ObjV = objharv (Chrom); % 计算目标函数值while gen MAXGEN, % 代循环FitnV = ranking (ObjV ,2,1,SUBPOP); % 分配适应度值(Assign fitness values) SelCh = select (SEL_F, Chrom, FitnV , GGAP, SUBPOP); % 选择SelCh=recombin (XOV_F, SelCh, XOVR, SUBPOP); % 重组SelCh = mutate (M
36、UT_F,SelCh,FieldDD,MUTR,SUBPOP); % 变异ObjVOff = feval (OBJ_F,SelCh); % 计算目标函数值Chrom, ObjV = reins (Chrom, SelCh, SUBPOP,1 INSR, ObjV, ObjVOff); % 替代gen=gen+1; trace (gen,1),I=min (ObjV); trace (gen,2)=mean (ObjV); % 在子种群之间迁移个体if (rem (gen,MIGGEN) = 0) Chrom, ObjV = migrate (Chrom, SUBPOP, MIGR, 1, 1,
37、 ObjV); end end Y,I=min (ObjV); % 输出最优解及其序号,Y 为最优解, I 为种群的序号figure (1);plot (Chrom (I,:); hold on;grid; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 36 页109 plot (Chrom (I,:),bo) figure (2);plot (-trace (:,1); hold on; plot (-trace (:,2),-.); % 遗传算法性能跟踪分布图legend (解的变化 ,种群均值的变化);xlabel ( 迭代次
38、数 ) 由于使用多子种群,待评定要求指定必须的选择压位差,这里我们用选择压位差为2。指定子种群的个数为SUBPOP。每个子种群的个体的目标值ObjV 将独立排序, 适应度值结果集将由向量FitnV 返回。在每个子种群中,个体将由高级选择函数select 选择独立地培育子代:SelCh = select (SEL_F, Chrom, FitnV , GGAP, SUBPOP); Select 为每个子种群调用低级选择函数SEL_F =sus,并建立包含用于重组的所有个体对的矩阵 SelCh,代沟,意思就是* 20 = 16 ,GGAP*NIND个个体从每个子种群中选择,SelCh包含 GGAP*
39、NIND*SUBPOP = 128个个体。高级重组函数recombin 用于重组SelCh 中每个子种群中的每对个体。SelCh = recombin (XOV_F, SelCh, XOVR, SUBPOP); 重组函数XOV_F = recdis 对子种群中个体对执行离散重组。由于离散重组不需要指定常规的交叉概率,这里使用变量仅仅是为了兼容。子代现在将变异:SelCh = mutate (MUT_F,SelCh,FieldD,MUTR,SUBPOP); 这里 GA 育种器变异函数MUT_F =mutbga 使用高级变异例程mutate调用,使用变异概率。这个 GA 育种器变异函数需要域描述器
40、FieldD ,以使变异还会产生超出决策变量边界的结果。所有子代的目标值ObjVOff 现在可以再用feval 计算。ObjVOff = feval (OBJ_F, SelCh); 子代现在可以插入适当的子种群中。Chrom,ObjV=reins (Chrom, SelCh,SUBPOP,1,INSR,ObjV,ObjVOff); 使用基于适应度的插入,但对reins 的第四个自变量的附加扩展参数指定了插入概率。这里的意思是指每个子种群的最小适应度的10%子代不会被插入。多种群 GA 的个体在种群之间以相同间隔迁移。工具箱的迁移例程用于在子种群间根据相同的迁移策略交换个体,在这个例子中,每20
41、 代 MIGGEN = 20 ,在子种群间发生迁移。子种群间的迁移语句为:if (rem (gen, MIGGEN) = 0) Chrom, ObjV = migrate (Chrom, SUBPOP, MIGR, 1, 1, ObjV); end 在这里子种群中最适应的20%()个体被选择迁移。最邻近的子种群在它们之间交换个体,均匀地重插入移民个体。返回矩阵Chrom 和向量 ObjV 作为迁移结果反映子种群中个体的变化。GA 迭代循环直到gen = MAXGEN并随后终止。GA 搜索获得的结果被包含在矩阵ObjV 中。最正确个体的目标值和索引号可用函数min搜索。例如:Y, I = min
42、 (ObjV); 运行后得到:Y = -7 , I =50。注意:改变了目标函数的符号使形成最小化问题,这个结果相当于目标函数值为,给出的精确解答应为。因此这个GA 优化解与精确解之间的误差在10-5以内。染色体值显示使用如下命令:plot (Chrom (I,:); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 13 页,共 36 页110 遗传算法的显示结果如下:1图 7.20 为初始随机种群个体分布图。图 7.20 初始种群的分布图2经过 50 次迭代后,寻优结果如图7.21 所示。此时max( )f x。图 7.21 经过 50 次迭代后
43、的优化解3经过 200 次迭代后,寻优结果如图7.22 所示。此时max( )f x。图 7.22 经过 200 次迭代后的优化解4经过 1000 次迭代后,寻优结果如图7.23 所示。此时max( )f x。图 7.23 经过 1000 次迭代后的优化解精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 14 页,共 36 页111 7.5 装载系统的最优问题装载系统是一个二维的系统,表达式如下:122212(1)( )1,2,.1(1)2*( )( )( )x kx kkNx kxkx ku kN目标函数为:NkkuNNxuxf121)(*21)1
44、(),(理论最优解为:11232*21*61*331minNkkNNN一个实现本目标函数的M 文件 objpush 包含在 GA 工具箱软件中。下面为装载系统的最优问题的MATLAB代码。%定义遗传算法参数GGAP = 0.8; % 代沟 (Generation gap) XOVR = 1; % 交叉率NVAR = 20; % 变量维数MUTR = 1/NV AR; % 变异率MAXGEN = 200; % 最大遗传代数(Maximum number of generations) INSR = 0.9; % 插入率SUBPOP =12; % 子种群数MIGR = 0.2; % 迁移率MIGG
45、EN = 20; % 每 20 代迁移个体NIND =20; % 个体数目 (Number of individuals) RANGE=0;10; % 变量范围SEL_F = sus; % 选择函数名XOV_F =recdis; % 重组函数名MUT_F =mutbga; % 变异函数名OBJ_F =objpush; % 目标函数名FieldDD = rep (RANGE,1,NVAR); trace=zeros (MAXGEN,2); % 遗传算法性能跟踪Chrom=crtrp (SUBPOP*NIND,FieldDD); % 创建初始种群gen = 0; ObjV=feval (OBJ_F
46、,Chrom); while gen MAXGEN, % 代循环FitnV = ranking (ObjV ,2,0,SUBPOP); % 分配适应度值 (Assign fitness values) SelCh = select (SEL_F,Chrom,FitnV , GGAP,SUBPOP); % 选择SelCh=recombin (XOV_F, SelCh,XOVR,SUBPOP); % 重组SelCh = mutate (MUT_F,SelCh,FieldDD,MUTR,SUBPOP); % 变异ObjVOff=feval (OBJ_F,SelCh); % 计算子代目标函数值Chro
47、m, ObjV = reins (Chrom, SelCh, SUBPOP,1 INSR, ObjV, ObjVOff); % 替代精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 15 页,共 36 页112 gen=gen+1; trace (gen,1),I=min (ObjV); trace (gen,2)=mean (ObjV); end Y,I=min (ObjV); % 最优控制向量值及其序号subplot (211); % 最优控制向量分布图plot (Chrom (I,:);hold on; plot (Chrom (I,:),.)
48、;grid subplot (212); % 遗传算法性能跟踪分布图plot (trace (:,1);hold on; plot (trace (:,2),-);grid legend (解的变化 ,种群均值的变化) 遗传算法的显示结果如下:1经过 50 次迭代后的优化解的目标函数值及性能跟踪如图7.24 所示。此时minf。图 7.24 经过 50 次迭代后的优化解的目标函数值及性能跟踪2 经过 100 次迭代后的优化解的目标函数值及性能跟踪如图7.25 所示。 此时minf- 。图 7.25 经过 100 次迭代后的优化解的目标函数值及性能跟踪3 经过 200 次迭代后的优化解的目标函数
49、值及性能跟踪如图7.26 所示。此时minf- 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 16 页,共 36 页113 图 7.26 经过 200 次迭代后的优化解的目标函数值及性能跟踪为了比较,计算出理论最优解:20 12231132011min-0.15443620220kfk。经过 200 次迭代后的优化解与理论最优解44 的误差仅为0.0008。7.6 离散二次线性系统最优控制问题假设二阶线性系统是一维的,其表达式为:(1)*( )*( ),1,2,.x kax kb u kkN目标函数定义为:Nkkurkxsnxquxf1222)
50、(*)(*)1(*),(求),(minuxf参数设置为:参数名N)0(xsrqab参数值45 100 1 1 1 1 1 一个实现本目标函数的M 文件 objlinq 包含在 GA 工具箱软件中。下面为离散二次线性系统最优控制的MATLAB代码。% 定义遗传算法参数GGAP = 0.8; % 代沟 (Generation gap) XOVR = 1; % 交叉率NVAR = 45; % 变量维数MUTR = 1/NV AR; % 变异率MAXGEN = 2000; % 最大遗传代数(Maximum number of generations) INSR = 0.9; % 插入率SUBPOP =
51、12; % 子代数目精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 17 页,共 36 页114 MIGR = 0.2; % 迁移率MIGGEN = 20; % 每 20 代迁移个体NIND =20; % 个体数目 (Number of individuals) SEL_F = sus; % 选择函数名XOV_F =recdis; % 重组函数名MUT_F =mutbga; % 变异函数名OBJ_F =objlinq; % 目标函数名FieldDR=feval (OBJ_F, ,1); Chrom=crtrp (SUBPOP*NIND,FieldD
52、R); % 创建初始种群gen = 0; trace=zeros (MAXGEN,2); % 遗传算法性能跟踪ObjV=feval (OBJ_F,Chrom); % 计算目标函数值while gen MAXGEN, % 代循环trace (gen+1,1)=min (ObjV); trace (gen+1,2)=mean (ObjV); FitnV = ranking (ObjV ,2,0,SUBPOP); % 分配适应度值 (Assign fitness values) SelCh = select (SEL_F,Chrom,FitnV , GGAP,SUBPOP); % 选择SelCh=r
53、ecombin (XOV_F, SelCh,XOVR,SUBPOP); % 重组SelCh = mutate (MUT_F,SelCh,FieldDR,MUTR,SUBPOP) ; % 变异ObjVOff=feval (OBJ_F,SelCh); %计算目标函数值Chrom, ObjV = reins (Chrom, SelCh, SUBPOP,1 INSR, ObjV, ObjVOff); % 替代gen=gen+1; end Y,I=min (ObjV); subplot (211); plot (Chrom (I,:); hold on; plot (Chrom (I,:),.);gri
54、d % 最优控制向量分布图legend (最优控制向量) subplot (212); % 遗传算法性能跟踪分布图plot (trace (:,1); hold on;plot (trace (:,2),-.);grid legend (解的变化 ,种群均值的变化); xlabel ( 迭代次数 ) 遗传算法的显示结果如下: 1经过100 次迭代后的优化解的目标函数值及性能跟踪如图7.27 所示。此时minf26503。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 18 页,共 36 页115 图 7.27 经过 100 次迭代后的优化解的目标函
55、数值及性能跟踪2经过1000 次迭代后的优化解的目标函数值及性能跟踪如图7.28 所示。此时minf17259。图 7.28 经过 1000 次迭代后的优化解的目标函数值及性能跟踪3 经过示。此时min16337f。图 7.29 经过 2000 次迭代后的优化解的目标函数值及性能跟踪7.7 目标分配问题目标分配问题描述为:m个地空导弹火力单元对n批空袭目标进行目标分配。假设进行目标分配之前,各批目标的威胁程度与个火力单元对各批目标的射击有利程度已经经过评估和排序。第j批目标的威胁程度评估值为jw,第i个火力单元对第j批目标射击有利程度估计值为ijp,令各火力单元对各批目标进行拦击的效益值为ij
56、jijpwc,其中ijc表示对某批目标进行拦击我方获益大小程度。目标分配的目的是满足目标分配的基本原则,追求总体效益最正确,即求1max()nijjc。染色体采用十进制编码,染色体的长度由按目标批次编号顺序排列的火力单元分配编号组成,表示一种可能的分配方案。下面为目标分配的最优问题的MATLAB代码。function eval=targetalloc (chrom) % 目标函数精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 19 页,共 36 页116 m,n=size (chrom); % 射击有利程度估计值p= .87 .52 .11 .78
57、 .72 .69 .94 .72 .36 .28 .27 .74 .24 .78 .45;. .87 .52 .11 .78 .72 .69 .94 .72 .36 .28 .27 .74 .24 .78 .45;. .87 .52 .11 .78 .72 .69 .94 .72 .36 .28 .27 .74 .24 .78 .45;. .87 .52 .11 .78 .72 .69 .94 .72 .36 .28 .27 .74 .24 .78 .45;. .87 .52 .11 .78 .72 .69 .94 .72 .36 .28 .27 .74 .24 .78 .45;. .87 .
58、52 .11 .78 .72 .69 .94 .72 .36 .28 .27 .74 .24 .78 .45;. .62 .87 .70 .22 .80 .42 .43 .90 .13 .95 .18 .19 .12 .61 .35;. .48 .20 .42 .16 .43 .58 .69 .03 .34 .72 .15 .24 .29 .30 .75 ; w=.47 .97 .76 .62 .48 .77 .33 .74 .54 .65 .43 .35 .63 .66 .57; % 威胁程度评估值for i=1:m for j=1:15 chrom (i,j)=p(chrom (i,j),
59、j); end; end eval=chrom*w; % 定义遗传算法参数NIND = 40; % 个体数目 (Number of individuals) MAXGEN =50; % 最大遗传代数(Maximum number of generations) GGAP = 0.9; % 代沟 (Generation gap) trace=zeros (MAXGEN,2); % 遗传算法性能跟踪初始值BaseV= crtbase (15,8); Chrom=crtbp (NIND, BaseV)+ones (NIND,15); %初始种群gen = 0; ObjV = taretalloc (
60、Chrom); % 计算初始种群函数值while gen MAXGEN, FitnV = ranking (-ObjV); % 分配适应度值(Assign fitness values) SelCh = select (sus, Chrom,FitnV, GGAP); % 选择SelCh = recombin (xovsp,SelCh,0.7); % 重组f=rep (1; 8,1,15); SelCh = mutbga (SelCh,f);SelCh=fix (SelCh); % 变异ObjVSel = targetalloc (SelCh); % 计算子代目标函数值Chrom ObjV=r
61、eins (Chrom,SelCh,1,1,ObjV,ObjVSel); % 重插入gen = gen+1; trace (gen,1)=max (ObjV); % 遗传算法性能跟踪trace (gen,2)=sum (ObjV)/length (ObjV); end Y,I=max (ObjV);Chrom (I,:),Y % 最优解及其目标函数值plot (trace (:,1),-.); hold on; plot (trace (:,2); grid legend (解的变化 ,种群均值的变化) 目标函数设计为function eval=targetalloc (chrom)。其中,
62、chrom 为染色体, 在函数体中p为 8 个火力单元对15 批目标的射击有利程度评估值。w 为 15 批目标的威胁程度评估值。遗传算法中,个体的数量NIND 被设置为40,最大遗传代数MAXGEN=50 ,染色体长度为15,使用代沟,使用基于适应度的重插入最适应的个体总是被连续传播到下一代。区域描述器BaseV= 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 20 页,共 36 页117 crtbase (15,8)描述染色体的表示和解释,染色体采用十进制编码,一个初始种群被函数crtbp创建,随后产生一个矩阵Chrom, 它由 NIND 个长
63、度为15 的十进制串构成。 程序段 Chrom=crtbp (NIND, BaseV)+ones (NIND,15)中有 ones (NIND,15) 的目的是保证矩阵处理中的行、列序号不为零。经过 50 次遗传迭代后,目标分配方案见表7.2。表 7.2 目标分配方案目标编号1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 分配结果3 7 7 2 7 4 6 7 1 7 5 3 8 1 8 与此方案对应的总收益值为。图 7.30 为经过 50 次迭代后的优化解的目标函数值及性能跟踪。图 7.30 经过 50 次迭代后的优化解的目标函数值及性能跟踪7.8 双积分的优化问题双
64、积分的状态方程为:?21221xyxxxx时间范围为:10t。初始条件为:12(0)0;(0)1xx。终止条件为:12(0)0;(0)0xx。目标函数为:102)()(mindttuuf双积分问题的Simulink 模型为:Doppelintegrator 1 1/s 1/s InportIntegrator1Integrator2精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 21 页,共 36 页118 一个实现本目标函数的M 文件 objdopi 包含在 GA 工具箱软件中。下面为双积分的优化问题的MATLAB 代码。% 定义遗传算法参数Di
65、m=20; % 变量维数NIND =20; % 个体数目 (Number of individuals) Preci=20; % 变量的二进制位数(Precision of variables) MAXGEN = 100; % 最大遗传代数 (Maximum number of generations) GGAP = 0.8; % 代沟 (Generation gap) SEL_F = sus; % 选择函数名XOV_F =xovsp; % 重组函数名MUT_F =mut; % 变异函数名OBJ_F =objdopi; % 目标函数名FieldDR=feval (OBJ_F, ,1); % 计
66、算目标函数值% 建立区域描述器(Build field descriptor) FieldDD=rep (Preci,1,Dim);FieldDR;rep (1;0;1;1,1,Dim); Chrom=crtbp (NIND,Dim*Preci); % 创建初始种群gen = 0; Best=NaN*ones (MAXGEN,1); % 最优解初值while gen MAXGEN, % 最大循环次数ObjV=feval (OBJ_F,bs2rv (Chrom,FieldDD); % 计算目标函数值Best (gen+1)=min (ObjV); % 最优解plot (log10 (Best),
67、bo); FitnV = ranking (ObjV); % 分配适应度值 (Assign fitness values) SelCh = select (SEL_F,Chrom,FitnV , GGAP); % 选择SelCh=recombin (XOV_F, SelCh); % 重组SelCh = mutate (MUT_F,SelCh); % 变异Chrom = reins (Chrom, SelCh); % 重插入gen=gen+1; end grid; xlabel (迭代次数 );ylabel ( 目标函数值 (取对数 ) ; 1经过 50 次迭代后的运行结果如图7.31 所示。图
68、 7.31 经过 50 次迭代后的运行结果2经过 100 次迭代后的运行结果如图7.32 所示。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 22 页,共 36 页119 图 7.32 经过 100次迭代后的运行结果7.9 雷达目标识别问题复杂目标的高分辨雷达回波信号在时域上出现多个峰值,这些峰值对应目标径向上的多个强散射中心。但是,当空中目标的位置发生变化时,目标的强散射点相对于雷达视角发生变化,因此,从数据库中寻找与待识别目标模式相匹配的模式的工作量很大,传统的匹配方法已不能满足需要。本节利用遗传算法进行目标识别,具体步骤如下:1染色体编码与
69、解码:假设数据库中已知目标类型有m种,每种类型目标在雷达视角范围内的雷达回波信号n个序列。对于两参数目标类型im和雷达视角编码jn,设1k为参数i的二进制编码长度,2k为参数j的二进制编码长度,定义遗传算法的个体kI基因型kG为,211011010101011kkkG,则编码总长度为21kk。即个体kI基因型kG的前1k位的十进制解码为i,后2k位的十进制解码为j。2产生初始种群: 一个个体由串长为21kk的随机产生的二进制串组成染色体的基因码,可以产生一定数目的个体组成种群。设置群体大小。3个体适应度的检测评估:设),(jiX为第i种目标在第j个雷达视角的高分辨雷达目标回波信号序列,对应的个
70、体为kI。待识别目标的高分辨雷达目标回波信号序列为X。个体kI的适应度函数可定义为)(kIf:XXjiXjiXXjiXIfk),(),(),()(式中,YX为序列X和序列Y的相关系数。4遗传算子:选择运算使用比例选择算子;交叉运算使用单点交叉算子;变异运算使用基本位变异算子或均匀变异算子。每个个体选择概率为精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 23 页,共 36 页120 1)(/)(kkksIfIfp设置遗传算法的终止进化代数、交叉概率和变异概率,对群体进行操作。下面为雷达目标识别问题的MATLAB 代码function coef=co
71、rrcoef1(x,y) % 计算 x 和 y 的相关系数函数,x 为单序列 ,y 为复序列m,n=size(y); coef=zeros(m,1); for i=1:m coef(i)=sum(abs(conv(x,y(i,:)/sqrt( sum(abs(conv(x,x)*sum(abs(conv(y(i,:),y(i,:) ); end function class=recognite(signal,inform) ; % 目标识别函数% signal 为待识别目标的雷达信号;inform 为目标识别数据库中的模板信号NIND = 20; % 个体数目 (Number of indiv
72、iduals) MAXGEN =200; % 最大遗传代数 (Maximum number of generations) Type=10;Angle=20; % 目标类型10bit,雷达视角20bit PRECI = Type + Angle; % 变量的二进制位数(Precision of variables) GGAP = 0.9; % 代沟 (Generation gap) FieldD = PRECI;1;NIND;1;0;1;1; % 区域描述器 (Build field descriptor) Chrom = crtbp(NIND, PRECI); % 创建初始种群gen = 0
73、; v=bs2rv(Chrom,FieldD); % 种群十进制转换class=round(v); % 取整ObjV = corrcoef1(signal,inform(class,:); % 计算相关系数trace=zeros(MAXGEN); % 性能跟踪while gen MAXGEN, FitnV = ranking(-ObjV); % 分配适应度值(Assign fitness values) SelCh = select(sus, Chrom, FitnV , GGAP); % 选择SelCh = recombin(xovsp,SelCh,0.7); % 重组SelCh = mut
74、(SelCh); % 变异v=bs2rv(SelCh,FieldD); class=round(v); ObjVSel = corrcoef1(signal,inform(class,:); % 计算目标函数相关系数Chrom ObjV=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); % 重插入gen = gen+1; trace(gen)=max(ObjV); end % 输出最优解及其序号,并在目标函数图象中标出,Y 为最优解, I 为种群的序号Y,I=max(ObjV); Type=round(bs2rv(Chrom(I,1:Type),FieldD); % 目
75、标类型编号Angle=round(bs2rv(Chrom(I,Type+1:Angle),FieldD); % 雷达视角编号plot(trace);hold on; plot(trace,.); grid; 实例,实验数据选自毫米波步进频率信号,带宽1GHz,调频步长2MHz。识别目标为轰炸机、歼击机和直升机的缩比模型。对三类飞机鼻锥方向100方位角角度间隔为10遗传算法搜索最优解的过程。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 24 页,共 36 页121 图 7.33 遗传算法搜索最优解的过程7.10 图象分割问题利用遗传算法进行图象分割
76、的基本思想是:把图象中的像素按灰度值用阈值M分成两类图象,一类为目标图象1C,另一类为背景图象2C。图象1C由灰度值在M0之间的像素组成,图象2C由灰度值在11LML为图象的灰度级数之间的像素组成。本节处理图象为256 灰度级,将灰度分割阈值编码为一个8 位 0、1 二进制码串。适应度函数选为)(Mf:22121)()()()()(MUMUMWMWMf其中,)(1MW为目标图象1C中所包含的像素数;)(2MW为目标图象2C中所包含的像素数;)(1MU为1C所有像素数的平均灰度值;)(2MU为2C中所有像素数的平均灰度值。下面为雷达目标识别问题的MATLAB 代码:function f=targ
77、et(T,M) % 适应度函数,T 为待处理图象,M 为阈值序列U,V=size(T); W=length(M); f=zeros(W,1); for k=1:W I=0;s1=0; J=0; s2=0; % 统计目标图象和背景图象的象素数及象素之和for i=1:U for j=1:V if T(i,j)M(k) s2=s2+T(i,j);J=J+1; end end end 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 25 页,共 36 页122 p1=s1/I;p2=s2/J; % 计算目标图象与背景图象的象素平均值f(k)=I*J*(p
78、1-p2)*(p1-p2)/(256*256); % 计算适应度函数值end load woamn % 调用 MATLAB 中 Woman 图象灰度值figure(1); % 画图image(X);colormap(map); NIND = 40; % 个体数目 (Number of individuals) MAXGEN =50; % 最 大 遗 传 代 数 (Maximum number of generations) PRECI = 8; % 变量的二进制位数(Precision of variables) GGAP = 0.9; % 代沟 (Generation gap) FieldD
79、 = 8;1;256;1;0;1;1; % 建立区域描述器(Build field descriptor) Chrom = crtbp(NIND, PRECI); % 创建初始种群gen = 0; phen=bs2rv(Chrom,FieldD); % 初始种群十进制转换ObjV = target(X,phen); % 计算种群适应度值while gen M X(i,j)=256; % 灰度值为256 时是白色end end end figure(2) % 画出分割后目标图象image(X);colormap(map); 图 7.34 为 MATLAB中的 Woman 图象。 图 7.35 为
80、经过 50 次迭代后的分割图象阈值为 117 。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 26 页,共 36 页123 图 7.34 Woman 原始图象 256 256图 7.35 Woman 分割后的图象阈值为1177.11 一些测试函数对应的优化问题下面给出工具箱提供的一些测试函数的遗传算法的运行结果问题的MATLAB 代码可参考前面例子的代码 。7.11.1 轴并行超球体的最小值问题一个实现本目标函数的M 文件 objfunla 包含在 GA 工具箱软件中。变量维数为Dim=10 ,变量的范围为-512512。选取个体数目NIND =
81、 40,迭代次数MAXGEN取为 100、 200、500,代沟 GGAP 取为。迭代100 次、 200 次、 500 次的目标函数最小值分别为3141.2、5.7440、510*3113.1,最小值对应的10 个变量值见表7.3。目标函数的理论最小值为0。跟踪性能如图7.36、图 7.37 和图 7.38 所示。表 7.3 迭代 100 次、 200 次、500 次的目标函数最小值对应的10 个变量值迭代次数变量值备注100 200 500 10-3精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 27 页,共 36 页124 图 7.36 经过
82、 100 次迭代后的优化解的目标函数值及性能跟踪图 7.37 经过 200 次迭代后的优化解的目标函数值及性能跟踪图 7.38 经过 500 次迭代后的优化解的目标函数值及性能跟踪7.11.2 旋转超球体的最小值问题一个实现本目标函数的M 文件 objfunlb 包含在 GA 工具箱软件中。变量维数为Dim=10 ; 变量的范围为 -6565, 选取 NIND = 40 , MAXGEN =100 、 500、 1000; 。表 7.4 分别为迭代100 次、500 次、1000 次的目标函数最小值对应的变量值,对应的最小值分别为、 。理论值为0。跟踪性能如图7.397.41 所示。表 7.4
83、 迭代 100 次、 500 次、 1000 次的目标函数最小值对应的10 个变量值迭代次数变量值备注100 500 1000 10-3精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 28 页,共 36 页125 图 7.39 经过 100 次迭代后的优化解的目标函数值及性能跟踪图 7.40 经过 500 次迭代后的优化解的目标函数值及性能跟踪图 7.41 经过 1000 次迭代后的优化解的目标函数值及性能跟踪7.11.3 Rosenbrock s valley最小值问题一个实现本目标函数的M 文件 objfun2 包含在 GA 工具箱软件中。变量
84、维数为Dim=2 ;变量的范围为-22,选取 NIND = 40, 。表 7.5 为迭代的最优解及其对应的目标函数值。理论值为:变量为0,0,目标函数值为0。跟踪性能如图7.42 所示。表 7.5 迭代 50 次、 100 次、 200 次、 500 次和 1000 次的最优解及对应的目标函数值迭代次数50 100 200 500 1000 变量值0.8347 1.1193 0.8970 1.0836 1.0000 目标函数值10-9 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 29 页,共 36 页126 图 7.42 经过 100 次迭代后
85、的优化解的目标函数值及性能跟踪7.11.4 Rastrigin函数的最小值问题一个实现本目标函数的M 文件 objfun6 包含在 GA 工具箱软件中。变量维数为Dim=20 ,变量的范围为-5.125.12,选取 NIND = 40 , 。目标函数理论值为0。表 7.6 为迭代次数及对应的目标函数最小值。迭代次数为1000 时目标函数取最小值,对应的20 个变量的值见表7.7,也可见图7.43。跟踪性能见图7.44。表 7.6 迭代次数及对应的最小值迭代次数50 100 200 500 1000 最小值表 7.7 迭代次数为 1000 时 20个变量的值0.9950 0.0000 - 图 7
86、.43 经过 1000 次迭代后的最优解精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 30 页,共 36 页127 图 7.44 经过 500 次迭代后的优化解的目标函数值及性能跟踪7.11.5 Schwefel函数的最小值问题一个实现本目标函数的M 文件 objfun7 包含在 GA 工具箱软件中。变量维数为20,变量范围为 -500500,选取 NIND=40 ,GGAP=0.9 。表 7.8 为迭代次数及对应的最小值。 理论最小值为 -8379.7。 跟踪性能见图7.45, 迭代次数为1000 时最优解如图7.46所示。表 7.8 迭代次数
87、及对应的最小值迭代次数50 100 200 500 1000 最小值-6228.4 -6416.4 -7730.0 -7932.6 -8255.8 图 7.45 经过 500次迭代后的最优解及性能跟踪图 7.46 经过 1000 次迭代后的最优解7.11.6 Griewangk函数的最小值问题一个实现本目标函数的M 文件 objfun8 包含在 GA 工具箱软件中。变量维数为10,变量范围为 -600600,选取 NIND=40 ;GGAP=0.9 。表 7.9 为迭代次数及对应的最小值。理论值为0。跟踪性能如图7.47 所示。迭代200 次和 500 次后的最优解对应的变量值见表 7.10。
88、表 7.9 迭代次数及对应的最小值迭代次数50 100 200 500 最小值2. 9075 1. 2277 0. 3920 0. 0369 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 31 页,共 36 页128 图 7.47 经过 50 次迭代后的最优解及性能跟踪表 7.10 迭代次数为200 和 500后的最优解对应的变量值迭代次数变量值200 500 7.11.7 不同权的总和最小值问题一个实现本目标函数的M 文件 objfun9 包含在 GA 工具箱软件中。变量维数为10,变量取值范围为-11,选取 NIND=40 ,GGAP=0.9
89、 。表 7.11 为迭代次数及对应的最小值。理论值为0。跟踪性能如图7.48 所示,迭代次数为100 和 200 后的最优解见表 7.12。表 7.11 迭代次数及对应的最小值迭代次数50 100 200 最小值图 7.48 经过 50 次迭代后的最优解及性能跟踪表 7.12 100 次和 200 次迭代后的最优解对应的变量值迭代次数变量值100 -0.0001 200 -0.0000 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 32 页,共 36 页129 7.12 多目标优化问题下面为一个含有两个优化目标的多目标优化问题。221212121
90、2min44min(1)1014.12xxffxxxstx对于该问题,利用权重系数变换法很容易求出Pareto 最优解,当1f和2f的权重系数都为0.5 时,经过50 次迭代后结果为:12122.0034,2.0000,10.0001xxff。跟踪性能如图 7.49 所示。图 7.49 经过 50 次迭代后的最优解及性能跟踪下面为利用并列选择法求解多目标最优问题的MATLAB 代码。Function f1=f (x) % 第一目标函数f1=x (:,1).*x (:,1)/4+x (:,2).*x (:,2)/4; function f2=f (x) % 第二目标函数f2=x (:,1).*
91、(1-x (:,2)+10; NIND = 100; % 个体数目 (Number of individuals) MAXGEN =50; % 最大遗传代数 (Maximum number of generations) NVAR = 2; % 变量个数PRECI = 20; % 变量的二进制位数(Precision of variables) GGAP = 0.9; % 代沟 (Generation gap) trace1= ;trace2= ;trace3= ; % 性能跟踪% 建立区域描述器FieldD = rep (PRECI,1,NVAR);1,1;4,2; rep (1;0;1;1
92、,1,NVAR); Chrom = crtbp (NIND, NV AR*PRECI); % 初始种群v=bs2rv (Chrom,FieldD); % 初始种群十进制转换gen = 1; while gen MAXGEN, NIND,N=size (Chrom); M=fix (NIND/2); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 33 页,共 36 页130 ObjV1 = f1 (v (1:M,:); % 分组后第一目标函数值FitnV1 = ranking (ObjV1); % 分配适应度值(Assign fitness val
93、ues) SelCh1 = select (sus, Chrom (1:M,:), FitnV1, GGAP); % 选择ObjV2 = f2 (v (M+1:NIND,:); % 分组后第二目标函数值FitnV2 = ranking (ObjV2); SelCh2 = select (sus, Chrom ( (M+1):NIND,:), FitnV2, GGAP); % 选择SelCh=SelCh1;SelCh2; % 合并SelCh = recombin (xovsp,SelCh,0.7); % 重组Chrom = mut (SelCh); % 变异v=bs2rv (Chrom,Fiel
94、dD); trace1 (gen,1)=min (f1 (v); trace1 (gen,2)=sum (f1 (v)/length (f1 (v); trace2 (gen,1)=min (f2 (v); trace2 (gen,2)=sum (f2 (v)/length (f2 (v); trace3 (gen,1)=min (f1 (v)+f2 (v); trace3 (gen,2)=sum (f1 (v)/length (f1 (v)+sum (f2 (v)/length (f2 (v); gen = gen+1; end figure (1);clf; plot (trace1 (:
95、,1);hold on; plot (trace1 (:,2),-.); plot (trace1 (:,1),.); plot (trace1 (:,2),.);grid; legend (解的变化 ,种群均值的变化) ; xlabel (迭代次数 );ylabel ( 目标函数值 ); figure (2);clf; plot (trace2 (:,1);hold on; plot (trace2 (:,2),-.); plot (trace2 (:,1),.); plot (trace2 (:,2),.);grid; legend (解的变化 ,种群均值的变化); xlabel (迭代次
96、数 );ylabel ( 目标函数值 ); figure (3);clf; plot (trace3 (:,1);hold on; plot (trace3 (:,2),-.); plot (trace3 (:,1),.); plot (trace3 (:,2),.);grid; legend (解的变化 ,种群均值的变化); xlabel (迭代次数 );ylabel ( 目标函数值 ); figure (4);clf;plot (f1 (v);hold on; plot (f2 (v),r-.);grid; 经过 50 次遗传迭代后的结果如图7.50图 7.53 所示。精选学习资料 - -
97、 - - - - - - - 名师归纳总结 - - - - - - -第 34 页,共 36 页131 图 7.50 经过 50 次迭代后第一目标函数的最优解及性能跟踪图 7.51 经过 50 次迭代后第二目标函数的最优解及性能跟踪图 7.52 经过 50 次迭代后的两目标函数和的最优解及性能跟踪精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 35 页,共 36 页132 图 7.53 经过 50 次迭代后种群的第一目标函数值与第二目标函数值精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 36 页,共 36 页