遗传算法实验六教材
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Matlab遗传算法工具箱应用举例
§5.1 简单一元函数优化实例
例 1 利用遗传算法计算下面函数的最大值 f ( x ) x sin(10 * x ) 2.0 x [ 1, 2] 选择二进制编码,种群中个体数目为 40,每个 种群的长度为 20,使用代沟为 0.9,最大遗传代数 为 25
程序运行追踪结果
14 15 16 17 18 19 20 2.7739 2.6521 2.7844 2.5158 2.7768 2.7907 2.8080 3.8318 3.8274 3.8274 3.8274 3.8285 3.8277 3.8379
程序运行追踪结果
21 22 23 24 25 3.0947 3.1525 2.9147 2.9144 3.0259 3.8489 3.8496 3.8496 3.8493 3.8493
程序简化代码如下: NIND=40; %定义个体数目 MAXGEN=25; %定义最大遗传代数 PRECI=20; %编码长度 GGAP=0.9; %代沟 FieldD=[20;-1;2;1;0;1;1]; %区域描述器 Chrom=crtbp(NIND, PRECI); %产生初始种群 gen=0; %代计数器 variable=bs2rv(Chrom, FieldD); %初始种群的十进制转换 ObjV=variable.*sin(10*pi*variable)+2.0; %计算初始种群目标函数值 while gen<MAXGEN+1 FitnV=ranking(-ObjV); %分配适应度值 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); %重插入子代到种群 Y=max(ObjV) %当前种群最优解 gen=gen+1; %代计数器增加 end
简化程序代码如下: NIND=40; %个体数目 MAXGEN=500; %最大遗传代数 NVAR=20; %变量的维数 PRECI=20; %编码长度 GGAP=0.9; %代沟 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)); %计算初始种群个体的目标函数值 while gen<MAXGEN %迭代 FitnV=ranking(ObjV); %分配适应度值 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); %重插入 gen=gen+1; %代计数器增加 trace(gen, 1)=min(ObjV); %遗传算法性能跟踪 trace(gen, 2)=sum(ObjV)/length(ObjV); end [Y, I]=min(ObjV) X=bs2rv(Chrom, FieldD); X(I,:)
程序中的函数说明
例如: >> MatIn = [1 2 3] MatIn = 1 2 3 >> REPN = [1 2] REPN = 1 2 >> MatOut = rep(MatIn,REPN) MatOut = 1 2 3 1 2 3
程序中的函数说明
例如: >> MatIn = [1 2 3] MatIn = 1 2 3 >> REPN = [2 1] REPN = 2 1 >> MatOut = rep(MatIn,REPN) MatOut = 1 2 3 1 2 3
4、绘图函数——PLOT PLOT(X,Y) —绘制以向量X为横坐标,向量 Y为 纵坐标的线图. 如果 X或 Y是一个矩阵,则绘制多线 图;如果 X是一个标量,而 Y是一个向量,则绘声绘 色制的是 length(Y)个不连续点。 PLOT(Y)—以矩阵Y的行标为横坐标,每一列为纵 坐标绘制图形。如果Y是一个复矩阵 ,PLOT(Y) 相 当于PLOT(real(Y),imag(Y)). PLOT(X,Y,S)—指定线型绘图,S为一字符串,指 定绘图方式
%代计数器 gen=0; %计算初始种群的十进制转换 variable=bs2rv(Chrom, FieldD); %计算目标函数值 ObjV=variable.*sin(10*pi*variable)+2.0;
具有性能跟踪和图像输出功能的程序代码
while gen<MAXGEN %分配适应度值 FitnV=ranking(-ObjV); %选择 SelCh=select('sus', Chrom, FitnV, GGAP); %重组 SelCh=recombin('xovsp', SelCh, 0.7); %变异 SelCh=mut(SelCh);
TOL—可接受的相对误差,默认值为2e-3, 即 0.2% N —限定绘制的函数至少有N+1个点,默认值为1. 最大步长限定为 (1/N)*(XMAX-XMIN). LineSpec—指定线型 FUN—要绘制图像的函数 例如: fplot('variable.*sin(10*pi*variable)+2.0',[-1,2]);
2、定义零矩阵—ZEROS ZEROS(N)—产生N阶零矩阵 ZEROS(M,N) 或 ZEROS([M,N]) )—产生M×N阶 零矩阵; ZEROS(M,N,P,...) or ZEROS([M N P ...]) )—产 生M×N×P × ...阶零矩阵; ZEROS(SIZE(A)) )—产生与矩阵A一样大小的零 矩阵。 3、求最大值函数—MAX MAX(X)— X为向量时,返回向量X的最大元素; X为矩阵时,返回一个行向量,包含矩阵X的每列的 最大元素.
经过25次迭代后最优解及种群均值的变Fra Baidu bibliotek如下图:
例题中用到的一些绘图函数说明
1、绘制函数图像函数—fplot 调用格式: FPLOT(FUN,LIMS) FPLOT(FUN,LIMS,TOL) FPLOT(FUN,LIMS,N) FPLOT(FUN,LIMS,'LineSpec') 参数说明: LIMS = [XMIN XMAX]或 LIMS = [XMIN XMAX YMIN YMAX]——给出变量 范围
De Jong 函数是一个连续、凸起的单峰函数,它 的 M 文件 objfun1 包含在 GA 工具箱软件中, De Jong 函数的表达式为:
f ( x ) xi2 , 512 xi 512
i 1 n
这里 n 是定义问题维数的一个值,本例中选取 n=20, 求解 min f ( x ) 。
具有性能跟踪和图像输出功能的程序代码
figure(1); %画出函数曲线 fplot('variable.*sin(10*pi*variable)+2.0',[-1,2]); %定义遗传算法参数 NIND=40; %群体中个体数目 MAXGEN=25; %最大遗传代数 PRECI=20; %变量的二进制位数
程序运行追踪结果:
代序
自变量 1 2 3 4 5 2.0292 2.2104 2.3577 2.4881 2.6401
寻优结果
函数值 3.8423 3.7819 3.8063 3.815 3.8072
程序运行追踪结果
6 7 8 9 10 11 12 13 2.6133 2.8658 2.9400 2.9120 2.8677 2.6973 2.7963 2.7317 3.7555 3.8073 3.8043 3.8321 3.8321 3.8320 3.8326 3.8318
具有性能跟踪和图像输出功能的程序代码
%代计数器增加 gen=gen+1; %输出最优解及其序号,并在目标函数图像 %中标出,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); end
5、建立图形窗口函数—FIGURE FIGURE(H) —使句柄为 H的图形窗口为当前图 形;如果图形窗口不存在,则建立一个句柄为 H 的图形窗口。 GCF—返回当前图形窗口的句柄。 6、设置网格线—GRID GRID ON —给坐标系添加网格线 GRID OFF —去除坐标系中的网格线
§5.2 多元单峰函数优化实例
前5个语句进行的初始化工作,包括确定群 体中个体数目,最大进化代数,编码长度,代 沟,建立区域描述器等。
程序中的函数说明
1、矩阵复制函数REP 功能 用来复制一个矩阵 调用格式: MatOut = rep(MatIn,REPN); 参数说明 MatIn—输入矩阵 MatOut—输出矩阵 REPN —一个二维向量,其中REPN(1)指定垂 直方向复制次数;REPN(2)指定水平方向复制 次数
例如: >> MatIn = [1 2 3] MatIn = 1 2 3 >> REPN = [3 2] REPN = 3 2 >> MatOut = rep(MatIn,REPN) MatOut = 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
具有性能跟踪和图像输出功能的程序代码
%代沟 GGAP=0.9; %寻优结果的初始值 trace=zeros(2, MAXGEN); %建立区域描述器 FieldD=[20;-1;2;1;0;1;1]; %生成初始种群 Chrom=crtbp(NIND, PRECI);
具有性能跟踪和图像输出功能的程序代码
具有性能跟踪和图像输出功能的程序代码
%最优个体的十进制转换 variable=bs2rv(Chrom, FieldD); hold on, grid on; plot(variable,ObjV,'b*'); figure(2); plot(trace(1,:)); hold on; plot(trace(2,:),'-.');grid off legend('解的变化','种群均值的变化')
具有性能跟踪和图像输出功能的程序代码
%子代个体的十进制转换 variable=bs2rv(SelCh, FieldD); %计算子代的目标函数值 ObjVSel=variable.*sin(10*pi*variable)+2.0; %重插入子代的新种群 [Chrom ObjV]=reins(Chrom, SelCh, 1, 1, ObjV, ObjVSel); variable=bs2rv(Chrom, FieldD);
线型和颜色
代表字符 C M Y R G B W k 颜色 青色 洋红 黄色 红色 绿色 兰色 白色 黑色 代表符号 -: -. none 线型 实线 虚线 点连线 点划线 无线
数据点标记字符
标记符 绘图方式 标记符 绘图方式 + ^ 十字号 反勾号 o v 小圆圈 勾号 * > 星号 大于号 . < 小黑点 小于号 X pentagram 五角星 叉号 Square 小正方形 Hexagram 六角星 diamond 菱形符号 none 无标记
§5.1 简单一元函数优化实例
例 1 利用遗传算法计算下面函数的最大值 f ( x ) x sin(10 * x ) 2.0 x [ 1, 2] 选择二进制编码,种群中个体数目为 40,每个 种群的长度为 20,使用代沟为 0.9,最大遗传代数 为 25
程序运行追踪结果
14 15 16 17 18 19 20 2.7739 2.6521 2.7844 2.5158 2.7768 2.7907 2.8080 3.8318 3.8274 3.8274 3.8274 3.8285 3.8277 3.8379
程序运行追踪结果
21 22 23 24 25 3.0947 3.1525 2.9147 2.9144 3.0259 3.8489 3.8496 3.8496 3.8493 3.8493
程序简化代码如下: NIND=40; %定义个体数目 MAXGEN=25; %定义最大遗传代数 PRECI=20; %编码长度 GGAP=0.9; %代沟 FieldD=[20;-1;2;1;0;1;1]; %区域描述器 Chrom=crtbp(NIND, PRECI); %产生初始种群 gen=0; %代计数器 variable=bs2rv(Chrom, FieldD); %初始种群的十进制转换 ObjV=variable.*sin(10*pi*variable)+2.0; %计算初始种群目标函数值 while gen<MAXGEN+1 FitnV=ranking(-ObjV); %分配适应度值 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); %重插入子代到种群 Y=max(ObjV) %当前种群最优解 gen=gen+1; %代计数器增加 end
简化程序代码如下: NIND=40; %个体数目 MAXGEN=500; %最大遗传代数 NVAR=20; %变量的维数 PRECI=20; %编码长度 GGAP=0.9; %代沟 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)); %计算初始种群个体的目标函数值 while gen<MAXGEN %迭代 FitnV=ranking(ObjV); %分配适应度值 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); %重插入 gen=gen+1; %代计数器增加 trace(gen, 1)=min(ObjV); %遗传算法性能跟踪 trace(gen, 2)=sum(ObjV)/length(ObjV); end [Y, I]=min(ObjV) X=bs2rv(Chrom, FieldD); X(I,:)
程序中的函数说明
例如: >> MatIn = [1 2 3] MatIn = 1 2 3 >> REPN = [1 2] REPN = 1 2 >> MatOut = rep(MatIn,REPN) MatOut = 1 2 3 1 2 3
程序中的函数说明
例如: >> MatIn = [1 2 3] MatIn = 1 2 3 >> REPN = [2 1] REPN = 2 1 >> MatOut = rep(MatIn,REPN) MatOut = 1 2 3 1 2 3
4、绘图函数——PLOT PLOT(X,Y) —绘制以向量X为横坐标,向量 Y为 纵坐标的线图. 如果 X或 Y是一个矩阵,则绘制多线 图;如果 X是一个标量,而 Y是一个向量,则绘声绘 色制的是 length(Y)个不连续点。 PLOT(Y)—以矩阵Y的行标为横坐标,每一列为纵 坐标绘制图形。如果Y是一个复矩阵 ,PLOT(Y) 相 当于PLOT(real(Y),imag(Y)). PLOT(X,Y,S)—指定线型绘图,S为一字符串,指 定绘图方式
%代计数器 gen=0; %计算初始种群的十进制转换 variable=bs2rv(Chrom, FieldD); %计算目标函数值 ObjV=variable.*sin(10*pi*variable)+2.0;
具有性能跟踪和图像输出功能的程序代码
while gen<MAXGEN %分配适应度值 FitnV=ranking(-ObjV); %选择 SelCh=select('sus', Chrom, FitnV, GGAP); %重组 SelCh=recombin('xovsp', SelCh, 0.7); %变异 SelCh=mut(SelCh);
TOL—可接受的相对误差,默认值为2e-3, 即 0.2% N —限定绘制的函数至少有N+1个点,默认值为1. 最大步长限定为 (1/N)*(XMAX-XMIN). LineSpec—指定线型 FUN—要绘制图像的函数 例如: fplot('variable.*sin(10*pi*variable)+2.0',[-1,2]);
2、定义零矩阵—ZEROS ZEROS(N)—产生N阶零矩阵 ZEROS(M,N) 或 ZEROS([M,N]) )—产生M×N阶 零矩阵; ZEROS(M,N,P,...) or ZEROS([M N P ...]) )—产 生M×N×P × ...阶零矩阵; ZEROS(SIZE(A)) )—产生与矩阵A一样大小的零 矩阵。 3、求最大值函数—MAX MAX(X)— X为向量时,返回向量X的最大元素; X为矩阵时,返回一个行向量,包含矩阵X的每列的 最大元素.
经过25次迭代后最优解及种群均值的变Fra Baidu bibliotek如下图:
例题中用到的一些绘图函数说明
1、绘制函数图像函数—fplot 调用格式: FPLOT(FUN,LIMS) FPLOT(FUN,LIMS,TOL) FPLOT(FUN,LIMS,N) FPLOT(FUN,LIMS,'LineSpec') 参数说明: LIMS = [XMIN XMAX]或 LIMS = [XMIN XMAX YMIN YMAX]——给出变量 范围
De Jong 函数是一个连续、凸起的单峰函数,它 的 M 文件 objfun1 包含在 GA 工具箱软件中, De Jong 函数的表达式为:
f ( x ) xi2 , 512 xi 512
i 1 n
这里 n 是定义问题维数的一个值,本例中选取 n=20, 求解 min f ( x ) 。
具有性能跟踪和图像输出功能的程序代码
figure(1); %画出函数曲线 fplot('variable.*sin(10*pi*variable)+2.0',[-1,2]); %定义遗传算法参数 NIND=40; %群体中个体数目 MAXGEN=25; %最大遗传代数 PRECI=20; %变量的二进制位数
程序运行追踪结果:
代序
自变量 1 2 3 4 5 2.0292 2.2104 2.3577 2.4881 2.6401
寻优结果
函数值 3.8423 3.7819 3.8063 3.815 3.8072
程序运行追踪结果
6 7 8 9 10 11 12 13 2.6133 2.8658 2.9400 2.9120 2.8677 2.6973 2.7963 2.7317 3.7555 3.8073 3.8043 3.8321 3.8321 3.8320 3.8326 3.8318
具有性能跟踪和图像输出功能的程序代码
%代计数器增加 gen=gen+1; %输出最优解及其序号,并在目标函数图像 %中标出,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); end
5、建立图形窗口函数—FIGURE FIGURE(H) —使句柄为 H的图形窗口为当前图 形;如果图形窗口不存在,则建立一个句柄为 H 的图形窗口。 GCF—返回当前图形窗口的句柄。 6、设置网格线—GRID GRID ON —给坐标系添加网格线 GRID OFF —去除坐标系中的网格线
§5.2 多元单峰函数优化实例
前5个语句进行的初始化工作,包括确定群 体中个体数目,最大进化代数,编码长度,代 沟,建立区域描述器等。
程序中的函数说明
1、矩阵复制函数REP 功能 用来复制一个矩阵 调用格式: MatOut = rep(MatIn,REPN); 参数说明 MatIn—输入矩阵 MatOut—输出矩阵 REPN —一个二维向量,其中REPN(1)指定垂 直方向复制次数;REPN(2)指定水平方向复制 次数
例如: >> MatIn = [1 2 3] MatIn = 1 2 3 >> REPN = [3 2] REPN = 3 2 >> MatOut = rep(MatIn,REPN) MatOut = 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
具有性能跟踪和图像输出功能的程序代码
%代沟 GGAP=0.9; %寻优结果的初始值 trace=zeros(2, MAXGEN); %建立区域描述器 FieldD=[20;-1;2;1;0;1;1]; %生成初始种群 Chrom=crtbp(NIND, PRECI);
具有性能跟踪和图像输出功能的程序代码
具有性能跟踪和图像输出功能的程序代码
%最优个体的十进制转换 variable=bs2rv(Chrom, FieldD); hold on, grid on; plot(variable,ObjV,'b*'); figure(2); plot(trace(1,:)); hold on; plot(trace(2,:),'-.');grid off legend('解的变化','种群均值的变化')
具有性能跟踪和图像输出功能的程序代码
%子代个体的十进制转换 variable=bs2rv(SelCh, FieldD); %计算子代的目标函数值 ObjVSel=variable.*sin(10*pi*variable)+2.0; %重插入子代的新种群 [Chrom ObjV]=reins(Chrom, SelCh, 1, 1, ObjV, ObjVSel); variable=bs2rv(Chrom, FieldD);
线型和颜色
代表字符 C M Y R G B W k 颜色 青色 洋红 黄色 红色 绿色 兰色 白色 黑色 代表符号 -: -. none 线型 实线 虚线 点连线 点划线 无线
数据点标记字符
标记符 绘图方式 标记符 绘图方式 + ^ 十字号 反勾号 o v 小圆圈 勾号 * > 星号 大于号 . < 小黑点 小于号 X pentagram 五角星 叉号 Square 小正方形 Hexagram 六角星 diamond 菱形符号 none 无标记