第七章遗传算法应用举例

上传人:仙*** 文档编号:65837064 上传时间:2022-03-25 格式:DOC 页数:37 大小:1.54MB
收藏 版权申诉 举报 下载
第七章遗传算法应用举例_第1页
第1页 / 共37页
第七章遗传算法应用举例_第2页
第2页 / 共37页
第七章遗传算法应用举例_第3页
第3页 / 共37页
资源描述:

《第七章遗传算法应用举例》由会员分享,可在线阅读,更多相关《第七章遗传算法应用举例(37页珍藏版)》请在装配图网上搜索。

1、第七章 遗传算法应用举例遗传算法提供了一种求解非线性、多模型、多目标等复杂系统优化问题的通用框架,它不依赖于问题具体的领域。随着对遗传算法技术的不断研究,人们对遗传算法的实际应用越来越重视,它已经广泛地应用于函数优化、组合优化、自动控制、机器人学、图象处理、人工生命、遗传编码、机器学习等科技领域。遗传算法已经在求解旅行商问题、背包问题、装箱问题、图形划分问题等多方面的应用取得了成功。本章通过一些例子,介绍如何利用第五章提供的遗传算法通用函数,编写MATLAB程序,解决实际问题。 7.1 简单一元函数优化实例利用遗传算法计算下面函数的最大值:选择二进制编码,种群中个体数目为40,每个种群的长度为

2、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; % 代沟(Generation gap)trace=zeros

3、(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); % 分配适应度值(Assign fitness values)S

4、elCh = 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); % 重插入子代的新种群gen = gen+1; % 代计数器增加% 输出最优解及其序号,并

5、在目标函数图象中标出,Y为最优解,I为种群的序号Y,I=max(ObjV),hold on;plot (variable (I),Y, bo);trace (1,gen)=max (ObjV); %遗传算法性能跟踪trace (2,gen)=sum (ObjV)/length (ObjV); endvariable=bs2rv (Chrom,FieldD); %最优个体的十进制转换hold on,grid; plot (variable,ObjV,b*); figure (2); plot (trace (1,:);hold on;plot (trace (2,:),-.);grid;lege

6、nd (解的变化,种群均值的变化)使用基于适应度的重插入确保四个最适应的个体总是被连续传播到下一代。这样在每一代中有36(NIND*GGAP)个新个体产生。区域描述器FieldD描述染色体的表示和解释,每个格雷码采用20位二进制,变量区间为-1,2。程序段Chrom = crtbp (NIND, PRECI)表示一个初始种群Chrom被函数crtbp创建,它是由NIND个均匀分布长度为PRECI的二进制串矩阵构成。基于排序的适应度分配计算由程序段FitnV = ranking (-ObjV)实现。对这个等级评定算法的缺省设置是选择等差为2和使用线性评估,给最适应个体的适应度值为2,最差个体的适

7、应度值为0,这里的评定算法假设目标函数是最小化的,所以ObjV乘了一个负号,使目标函数为最大化。适应度值结果被向量FitnV返回。选择层使用高级函数选择调用低级函数随机遍历抽样例程sus,SelCh包含来自原始染色体的GGAP *NIND个个体,这些个体将使用高级函数recombin进行重组,recombin使个体通过SelCh被选择再生产,并使用单点交叉例程xovsp,使用交叉概率Px =0.7执行并叉。交叉后产生的子代被同一个矩阵SelCh返回,实际使用的交叉例程通过支持使用不同函数名字串传递给recombin而改变。为了产生一组子代,变异使用变异函数mut。子代再次由矩阵SelCh返回,

8、变异概率缺省值PM=0.7/Lind= 0.0017,这里Lind是假定的个体长度。再次使用bs2rv,将个体的二进制编码转换为十进制编码,计算子代的目标函数值ObjVSel。由于使用了代沟,所以子代的数量比当前种群数量要小,因此需要使用恢复函数reins。这里Chrom 和 SelCh是矩阵,包含原始种群和子代结果。这两个事件的第一个被使用单个种群和采用基于适应度的恢复,基于适应度的恢复用SelCh中的个体代替Chrom中最不适应的个体。新种群中的个体是由原始种群中的优良个体和子代中新产生的个体组成。原始种群中个体的目标函数值ObjV随后又作为函数reins的输入参数,子代中个体的目标函数值

9、由ObjVSel提供。Reins返回具有插入子代的新种群Chrom和该种群中个体的目标函数值ObjV。每次迭代后的最优解和解的均值存放在trace中。这个遗传优化的结果包含在矩阵ObjV中。决策变量的值为variable (I)。画出迭代后个体的目标函数值分布图和遗传算法性能跟踪图。遗传算法的运行结果如下:(1)图7.1为目标函数的图象。图7.1 目标函数图像(2)图7.2为目标函数的图像和初始随机种群个体分布图。 图7.2 初始种群分布图(3)经过1次遗传迭代后,寻优结果如图7.3所示。x=1.6357,f(x)=3.4729。图7.3 一次遗传迭代后的结果(4)经过10次遗传迭代后,寻优结

10、果如图7.4所示。x= 1.8518,f(x)=3.8489。图7.4 经过10次遗传迭代后的结果(5)经过25次遗传迭代后,寻优结果如图7.5所示。x=1.8505,f(x)=3.8503。图7.5 经过25次遗传迭代后的结果(6)经过25次迭代后最优解的变化和种群均值的变化见图7.6。图7.6 经过25次迭代后最优解的变化和种群均值的变化7.2 多元单峰函数的优化实例目标函数是De Jong函数,是一个连续、凸起的单峰函数,它的M文件objfun1包含在GA工具箱软件中。De Jong函数的表达式为求解 这里n是定义问题维数的一个值。这个例子中选取n=20。由De Jong函数的表达式可以

11、看出,De Jong函数是一个简单的平方和函数,只有一个极小点(0,0,0),理论最小值为f(0,0,0)=0。程序的主要变量:个体的数量NIND为40,最大遗传代数为MAXGEN=300,变量维数为NVAR=20,每个变量使用20位表示,即PRECI = 20,使用代沟GGAP=0.9。下面为求解De Jong函数最小值的MATLAB代码。% 定义遗传算法参数NIND = 40; % 个体数目(Number of individuals)MAXGEN =500; % 最大遗传代数(Maximum number of generations)NVAR = 20; % 变量的维数PRECI =

12、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, NVAR*PRECI); % 创建初始种群gen = 0; % 代计数器ObjV = objfun1(bs2rv (Chrom,FieldD); % 计算初始种群个

13、体的目标函数值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); % 计算子代目标函数值Chrom ObjV=reins (Chrom,SelCh,1,1,ObjV,ObjVSel); %

14、重插入gen = gen+1; % 代计数器增加% 输出最优解及其对应的20个自变量的十进制值,Y为最优解,I为种群的序号trace (gen,1)=min (ObjV); % 遗传算法性能跟踪trace (gen,2)=sum (ObjV)/length (ObjV); endplot (trace (:,1);hold on;plot (trace (:,2),-.);grid;legend (种群均值的变化,解的变化)区域描述器的构建采用矩阵复制函数rep建立矩阵FieldD,描述染色体的表示和解释。一个初始种群被函数crtbp创建,随后产生一个矩阵Chrom,它由NIND个均匀分布长度

15、为NVAR*PRECI的二进制串构成。使用函数objfun1重新计算目标函数,初始种群中的所有个体的目标函数值由下面程序段计算:ObjV = objfun1(bs2rv (Chrom, FieldD);函数bs2rv根据域描述器FieldD转换矩阵Chrom的二进制串为实值,返回一实值表现型的矩阵。这个bs2rv返回值矩阵通过直接作为目标函数objfun1的输入变量,目标函数结果被返回在矩阵ObjV中。这个例子中基于排序的适应度分配计算由下面程序段实现:FitnV = ranking (ObjV);对这个等级评定算法的缺省设置是选择等差2,使用线性评估,给最适应个体的适应度值为2和最差个体的适

16、应度值为0。适应度值结果被向量FitnV返回。使用高级函数选择调用低级函数随机遍历抽样例程sus,程序段为:SelCh = select (sus, Chrom, FitnV, GGAP);后面的选择中,SelCh包含来自原始染色体的GGAP *NIND个个体,这些个体将使用高级函数recombin进行重组,程序段为:SelCh = recombin (xovsp, SelCh, 0.7);函数recombin使个体通过SelCh被选择再生产,并使用单点交叉例程函数xovsp,使用交叉概率Px =0.7执行并叉。个体作为矩阵SelCh的输入被排序,以便使奇数位置的个体与它相邻的个体进行交叉,如

17、果SelCh个体的数量是奇数个,则最后一个个体不进行交叉而返回。交叉后产生的子代被同一个矩阵SelCh返回,实际使用的交叉例程通过支持使用不同函数名字串传递给recombin而改变。为了产生一组子代,变异现在使用变异函数mut:SelCh = mut (SelCh);子代再次由矩阵SelCh返回,函数调用中变异概率没有被指定,这个缺省值PM=0.7/Lind= 0.0017,这里Lind是个体的长度。子代的目标函数值ObjVSel由程序段计算:ObjVSel = objfun1 (bs2rv (SelCh, FieldD);因为使用了代沟,子代的数量比当前种群数量要小,完成使用恢复函数rein

18、s:Chrom,ObjV=reins (Chrom, SelCh,1,1,ObjV,ObjVSel);这里,Chrom 和 SelCh是矩阵包含原始种群和子代结果。这两个事件的第一个被使用单个种群和采用基于适应度的恢复,基于适应度的恢复用SelCh中的个体代替Chrom 中最不适应的个体。原始种群目标函数值ObjV随后被要求作为reins的参数,另外新种群的目标函数值不用重新计算整个种群的目标函数而返回,子代的目标值ObjVSel被提供。Reins返回具有插入子代的新种群Chrom和这个种群的目标函数值ObjV。这个遗传优化的结果包含在矩阵ObjV中,决策变量的值可能被包含在下面程序段中:Ph

19、en = bs2rv (Chrom, FieldD); 遗传算法的运行结果如下:(1)图7.7为二维De Jong函数图形。图7.7 二维De Jong函数图形(2)初始种群中个体的目标函数值分布图如图7.8所示。 图7.8 初始种群中个体的目标函数值分布图(3)经过20次遗传迭代后的结果如图7.9所示。此时= 2.7412e+005。图7.9 经过20次遗传迭代后的结果(4)经过100次遗传迭代后的结果如图7.10所示。此时= 6.9666e+003。图7.10 经过100次遗传迭代后的结果(5) 经过250次遗传迭代后的结果如图7.11所示。此时= 409.4516。 图7.11 经过25

20、0次遗传迭代后的结果(6)经过500次遗传迭代后的结果如图7.12所示。此时= 4.2550。图7.12 经过500次遗传迭代后的结果(7) 经过250次迭代后种群目标函数均值的变化和最优解的变化如图7.13所示。= 4.2550时20个变量的值见表7.1。 图7.13 经过250次迭代后种群目标函数均值的变化和最优解的变化表7.1 目标函数取最优解时20个变量的值-2.00150.1362-0.0190-0.0171-0.0659-0.1382-0.0181-0.0610-0.01120.1274-0.01420.06400.04740.0122-0.09620.2524-0.07080.2

21、690-0.1411-0.09527.3 多元多峰函数的优化实例Shubert函数为:求。图7.14为Shubert函数图像。图7.14 Shubert函数图下面为 Shubert函数寻优的MATLAB代码。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*co

22、s ( (3+1)*y+3)+ (4*cos ( (4+1)*y+4)+ (5*cos ( (5+1)*y+5); x1,x2=meshgrid (-10:.1:10); Figure(1);mesh (x1,x2,Shubert (x1,x2); % 画出Shubert函数图像% 定义遗传算法参数NIND = 40; % 个体数目(Number of individuals) MAXGEN =50; % 最大遗传代数(Maximum number of generations)NVAR = 2; % 变量数目PRECI = 25; % 变量的二进制位数(Precision of variab

23、les)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, NVAR*PRECI); % 创建初始种群gen = 0;trace=zeros (MAXGEN,2); % 遗传算法性能跟踪初始值x=bs2rv (Chrom,FieldD); % 初始种群十进制转换ObjV =Shubert (x (:,1),x (:,2); % 计算初始种群的目

24、标函数值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=reins (Chrom,SelCh,1,1,ObjV

25、,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;endendfigure (3);clf;plot (trace (:,1);hold on;plot (tra

26、ce (:,2),-.);grid;legend (解的变化,种群均值的变化)遗传算法的显示结果如下:(1)初始种群的目标函数值分布如图7.15所示。图7.15 初始种群的目标函数值(2)经过一次迭代后的目标函数值如图7.16所示。此时-1.3900,-2.9601,=-44.5224。图7.16 经过一次迭代后的结果(3)经过10次迭代后的目标函数值如图7.17所示。此时-1.3811,0.8980,=-186.0739。 图7.17 经过 10次迭代后的结果(4)经过50次迭代后的目标函数值如图7.18所示。此时-1.4342,-0.8003,= -186.7309。图7.18 经过50次

27、迭代后的结果(5)经过50次迭代后,种群目标函数均值的变化和最优解的变化如图7.19所示。图7.19 经过50次迭代后种群目标函数均值的变化和最优解的变化7.4 收获系统最优控制收获系统(Harvest)是一个一阶的离散方程,表达式为:这里是一个初始的状态条件,是一个刻度常量, 是状态和非常控制,是解决问题使用的步骤数。目标函数为:这个问题的精确优化解答可由下式确定:GA工具箱提供一个M文件实现这个函数objharv。注意,这里是一个最大化问题,工具箱例程实现是最小化问题,这个目标函数objharv,乘 1即产生为最小化问题。这个最初条件x(0)设为100,取为1.1。这个问题的控制步骤=20

28、,因此使用的决策变量个数NVAR=20,作为每个控制输入Uk。决策变量被限制在RANG=0,200范围,限制最大的控制输入在任意步为200,这个区域描述器FieldD描述决策变量可以使用矩阵复制函数rep构造。这个GA的参数可用MATLAB变量来指定。除了传统GA参数例如代沟 (GGAP) 和交叉概率 (XOVR)外,还有大量与多种群GAS有关的其它参数被定义。这里INSR = 0.9,说明每一代中只有90%产生个体被复制到种群中,SUBPOP = 8,说明8个子种群使用迁移概率为MIGR =0.2或20%,每20代(MIGGEN= 20)在子种群与当前迁移之间。每个子种群包含20个个体,NI

29、ND = 20。脚本文件使用的函数使用MATLAB串指定。 用串SEL_F 、XOV_F、MUT_F、OBJ_F指定分别代表:选择函数名、重组函数名、变异函数名、目标函数名。由于使用离散重组函数recdis进行子代的培育,交叉概率没有使用,XOVR = 1。初始种群的创建使用函数crtrp,代计数器gen设置为0。在由FieldD指定的范围内使用一致性随机挑选个体决策变量组成SUBPOP *NIND个个体。矩阵Chrom包含了所有子种群并且子种群中所有个体的目标函数值能使用MATLAB的feval命令直接计算。ObjV = feval (OBJ_F, Chrom);Feval执行函数计算获得第

30、一个输入变量,这里是目标函数名objharv,包含在OBJ_F中,这个函数将被计算并用剩余的参数作为输入调用这个函数。这里函数调用是:ObjV = objharv (Chrom);由于使用实值编码,不需要将染色体转换为表现型表示。GA现在将进入代循环。下面为收获系统最优控制的MATLAB代码。 % 定义遗传算法参数NVAR = 20; % 变量维数 RANGE = 0; 200; % 变量范围 GGAP = 0.8; % 代沟(Generation gap) XOVR = 1; % 交叉率 MUTR = 1/NVAR; % 变异率 MAXGEN = 500; % 最大遗传代数(Maximum

31、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 (MAXGEN,2); %

32、 遗传算法性能跟踪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 (MUT_F,SelCh

33、,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, ObjV);endend

34、Y,I=min (ObjV); % 输出最优解及其序号,Y为最优解,I为种群的序号figure (1);plot (Chrom (I,:);hold on;grid;plot (Chrom (I,:),bo)figure (2);plot (-trace (:,1);hold on;plot (-trace (:,2),-.); % 遗传算法性能跟踪分布图legend (解的变化,种群均值的变化);xlabel (迭代次数)由于使用多子种群,待评定要求指定必须的选择压位差,这里我们用选择压位差为2。指定子种群的个数为SUBPOP。每个子种群的个体的目标值ObjV将独立排序,适应度值结果集将由向

35、量FitnV返回。在每个子种群中,个体将由高级选择函数select选择独立地培育子代:SelCh = select (SEL_F, Chrom, FitnV, GGAP, SUBPOP);Select为每个子种群调用低级选择函数SEL_F =sus,并建立包含用于重组的所有个体对的矩阵SelCh,代沟GGAP = 0.8,意思就是0.8* 20 = 16,GGAP*NIND个个体从每个子种群中选择,SelCh包含GGAP*NIND*SUBPOP = 128个个体。高级重组函数recombin用于重组SelCh中每个子种群中的每对个体。SelCh = recombin (XOV_F, SelCh

36、, XOVR, SUBPOP);重组函数XOV_F = recdis对子种群中个体对执行离散重组。由于离散重组不需要指定常规的交叉概率,这里使用变量XOVR = 1.0仅仅是为了兼容。子代现在将变异:SelCh = mutate (MUT_F,SelCh,FieldD,MUTR,SUBPOP);这里GA育种器变异函数MUT_F =mutbga使用高级变异例程mutate调用,使用变异概率MUTR = 1/NIND = 0.05。这个GA育种器变异函数需要域描述器FieldD,以使变异还会产生超出决策变量边界的结果。所有子代的目标值ObjVOff现在可以再用feval计算。ObjVOff = f

37、eval (OBJ_F, SelCh);子代现在可以插入适当的子种群中。Chrom,ObjV=reins (Chrom, SelCh,SUBPOP,1,INSR,ObjV,ObjVOff);使用基于适应度的插入,但对reins的第四个自变量的附加扩展参数指定了插入概率INSR = 0.9。这里的意思是指每个子种群的最小适应度的10%子代不会被插入。多种群GA的个体在种群之间以相同间隔迁移。工具箱的迁移例程用于在子种群间根据相同的迁移策略交换个体,在这个例子中,每20代(MIGGEN = 20),在子种群间发生迁移。子种群间的迁移语句为:if (rem (gen, MIGGEN) = 0)Chr

38、om, ObjV = migrate (Chrom, SUBPOP, MIGR, 1, 1, ObjV);end在这里子种群中最适应的20%(MIGR = 0.2)个体被选择迁移。最邻近的子种群在它们之间交换个体,均匀地重插入移民个体。返回矩阵Chrom和向量ObjV作为迁移结果反映子种群中个体的变化。GA迭代循环直到gen = MAXGEN并随后终止。GA搜索获得的结果被包含在矩阵ObjV中。最佳个体的目标值和索引号可用函数min搜索。例如:Y, I = min (ObjV); 运行后得到:Y = -73.2370, I =50。注意:改变了目标函数的符号使形成最小化问题,这个结果相当于目标

39、函数值为73.2370,给出的精确解答应为73.2376。因此这个GA优化解与精确解之间的误差在10-5以内。染色体值显示使用如下命令:plot (Chrom (I,:);遗传算法的显示结果如下:(1)图7.20为初始随机种群个体分布图。图7.20 初始种群的分布图(2)经过50次迭代后,寻优结果如图7.21所示。此时9.1760。图7.21 经过50次迭代后的优化解(3)经过200次迭代后,寻优结果如图7.22所示。此时58.8087。图7.22 经过200次迭代后的优化解(4)经过1000次迭代后,寻优结果如图7.23所示。此时68.0320。图7.23 经过1000次迭代后的优化解7.5

40、 装载系统的最优问题装载系统是一个二维的系统,表达式如下:目标函数为:理论最优解为:一个实现本目标函数的M文件objpush包含在GA工具箱软件中。下面为装载系统的最优问题的MATLAB代码。%定义遗传算法参数GGAP = 0.8; % 代沟(Generation gap) XOVR = 1; % 交叉率 NVAR = 20; % 变量维数 MUTR = 1/NVAR; % 变异率 MAXGEN = 200; % 最大遗传代数(Maximum number of generations) INSR = 0.9; % 插入率 SUBPOP =12; % 子种群数 MIGR = 0.2; % 迁移

41、率 MIGGEN = 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 (O

42、BJ_F,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); % 计算子代目标函数值Ch

43、rom, ObjV = reins (Chrom, SelCh, SUBPOP,1 INSR, ObjV, ObjVOff); % 替代gen=gen+1;trace (gen,1),I=min (ObjV);trace (gen,2)=mean (ObjV);endY,I=min (ObjV); % 最优控制向量值及其序号subplot (211); % 最优控制向量分布图plot (Chrom (I,:);hold on; plot (Chrom (I,:),.);grid subplot (212); % 遗传算法性能跟踪分布图plot (trace (:,1);hold on; plo

44、t (trace (:,2),-);grid legend (解的变化,种群均值的变化)遗传算法的显示结果如下:(1)经过50次迭代后的优化解的目标函数值及性能跟踪如图7.24所示。此时0.0369。图7.24 经过50次迭代后的优化解的目标函数值及性能跟踪(2) 经过100次迭代后的优化解的目标函数值及性能跟踪如图7.25所示。此时-0.1425。图7.25 经过100次迭代后的优化解的目标函数值及性能跟踪(3) 经过200次迭代后的优化解的目标函数值及性能跟踪如图7.26所示。此时-0.1536。图7.26 经过200次迭代后的优化解的目标函数值及性能跟踪为了比较,计算出理论最优解:。 经

45、过200次迭代后的优化解-0.1536与理论最优解-0.1544的误差仅为0.0008。7.6 离散二次线性系统最优控制问题假设二阶线性系统是一维的,其表达式为:目标函数定义为:求 参数设置为:参数名参数值4510011111一个实现本目标函数的M文件objlinq包含在GA工具箱软件中。下面为离散二次线性系统最优控制的MATLAB代码。% 定义遗传算法参数GGAP = 0.8; % 代沟(Generation gap)XOVR = 1; % 交叉率NVAR = 45; % 变量维数MUTR = 1/NVAR; % 变异率MAXGEN = 2000; % 最大遗传代数(Maximum numb

46、er of generations)INSR = 0.9; % 插入率SUBPOP =12; % 子代数目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,FieldDR); % 创建初始种群gen = 0; tra

47、ce=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=recombin (XOV_F, SelCh,XOVR,S

48、UBPOP); % 重组 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;endY,I=min (ObjV);subplot (211);plot (Chrom (I,:);hold on;plot (Chrom (I,:),.);grid % 最优控制向量分布图legend (最优控制向量)subp

49、lot (212); % 遗传算法性能跟踪分布图plot (trace (:,1);hold on;plot (trace (:,2),-.);grid legend (解的变化,种群均值的变化); xlabel (迭代次数)遗传算法的显示结果如下:(1)经过100次迭代后的优化解的目标函数值及性能跟踪如图7.27所示。此时26503。图7.27 经过100次迭代后的优化解的目标函数值及性能跟踪(2) 经过1000次迭代后的优化解的目标函数值及性能跟踪如图7.28所示。此时17259。图7.28 经过1000次迭代后的优化解的目标函数值及性能跟踪(3) 经过2000次迭代后的优化解的目标函数值

50、及性能跟踪如图7.29所示。此时。图7.29 经过2000次迭代后的优化解的目标函数值及性能跟踪7.7 目标分配问题目标分配问题描述为:个地空导弹火力单元对批空袭目标进行目标分配。假设进行目标分配之前,各批目标的威胁程度与个火力单元对各批目标的射击有利程度已经经过评估和排序。第批目标的威胁程度评估值为,第个火力单元对第批目标射击有利程度估计值为,令各火力单元对各批目标进行拦击的效益值为,其中表示对某批目标进行拦击我方获益大小程度。目标分配的目的是满足目标分配的基本原则,追求总体效益最佳,即求。染色体采用十进制编码,染色体的长度由按目标批次编号顺序排列的火力单元分配编号组成,表示一种可能的分配方

51、案。下面为目标分配的最优问题的MATLAB代码。function eval=targetalloc (chrom) % 目标函数 m,n=size (chrom);% 射击有利程度估计值p= .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 .7

52、2 .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;. .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

53、 .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),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); % 遗传算法性能跟

54、踪初始值BaseV= crtbase (15,8); Chrom=crtbp (NIND, BaseV)+ones (NIND,15); %初始种群gen = 0; ObjV = taretalloc (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); S

55、elCh = mutbga (SelCh,f);SelCh=fix (SelCh); % 变异ObjVSel = targetalloc (SelCh); % 计算子代目标函数值Chrom ObjV=reins (Chrom,SelCh,1,1,ObjV,ObjVSel); % 重插入gen = gen+1; trace (gen,1)=max (ObjV); % 遗传算法性能跟踪trace (gen,2)=sum (ObjV)/length (ObjV); endY,I=max (ObjV);Chrom (I,:),Y % 最优解及其目标函数值plot (trace (:,1),-.); h

56、old on;plot (trace (:,2); gridlegend (解的变化,种群均值的变化)目标函数设计为function eval=targetalloc (chrom)。其中,chrom为染色体,在函数体中p为8个火力单元对15批目标的射击有利程度评估值。w为15批目标的威胁程度评估值。遗传算法中,个体的数量NIND被设置为40,最大遗传代数MAXGEN=50,染色体长度为15,使用代沟GGAP=0.9,使用基于适应度的重插入最适应的个体总是被连续传播到下一代。区域描述器BaseV= crtbase (15,8)描述染色体的表示和解释,染色体采用十进制编码,一个初始种群被函数crtbp创建,随后产生一个矩阵Chrom,它由NIND个长度为15的十进制串构成。程序段Chrom=crtbp (NIND, BaseV)+ones (

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!