设置产生的输出信息如图8.23所示。
图8.23 遗传算法运行时更改了参数设置
8.3.1.4 暂停和停止运算
遗传算法的暂停和停止运行,可以通过下面操作继续运行:
? 单击按钮“Pause(暂停)”,算法暂停运行。该按钮上的文字变为“Resume(恢复)”。单击这个“Resume” 按钮,即恢复遗传算法继续运行。
? 单击按钮“Stop”,算法停止运行。“Status and results”窗口显示停止运行时当前代最佳点的适应度函数值。
注意:如果单击按钮“Stop”,然后通过单击按钮“Start”再次运行时,遗传算法将以新的随机初始种群或在“Initial population(初始种群)”文本框中专门指定的种群运行。如果需要在算法停止后能再次恢复运行,则可以通过交替地单击按钮“Pause”和“Resume”来控制算法暂停或继续运行。
遗传算法的停止运行常常是通过设置算法停止准则来进行控制的。使用停止准则,设置停止准则参数,可以解决遗传算法在何时停止运行的控制问题。这样,也就不用通过单击“Stop” 按钮来人为地控制算法运行的停止。遗传算法有五个停止准则或条件,其中任何一个条件满足,算法即停止运行。这些停止准则是:
? 代数——算法运行到规定的代数。 ? 时限——算法运行到规定的时间。
? 适应度限——当前代的最佳适应度值小于或等于规定的值。 ? 停滞代数——适应度函数值在运行规定的代数后没有改进。 ? 停滞时限——适应度函数值在运行规定时间后没有改进。
如果想使算法一直运行到按下按钮“Pause”或“Stop”时才停下来,可以改变这些停止准则的参数值:
? 设置“Generations(代数)”为 Inf。 ? 设置“Time”为 Inf。
? 设置“Fitness limit”为 –Inf。 ? 设置“Stall generations”为 Inf。 ? 设置“Stall time limit”为 Inf。 图8.24显示了这些更改后的设置。
153
图8.24 改变停止准则参数
注意:在命令行中调用遗传算法函数ga时,并不使用这些参数设置,就好像是不按下 “Ctrl + C”键,函数就会永远运行而不会停止。其实相反,可以设置“Generations”或者“Time”做为限值来控制算法停止运行。 8.3.1.5 图形显示
图8.25为“Plots(绘图)”窗格,可以用来控制显示遗传算法运行结果变化的图形。
图8.25 在绘图窗格选择输出项
选择所要显示的图形参数的复选框。例如,如果选择“Best Fitness(最佳适应度)”和“Best individual(最佳个体)”,运行例子“Rastrigin 函数”,其显示输出如图8.26所示。
154
图8.26 Rastrigin函数最佳适应度与最佳个体
图8.28上部离散点为每一代的最佳适应度值和平均适应度值,下部柱型图表示当前代最佳适应度值对应的点的坐标。
注意:当要想显示两个以上参数项的图形时,可选择相应参数项的复选框,单独打开一个较大的图形窗口即可。
8.3.1.6 举例——创建用户绘图函数
如果工具箱中没有符合想要输出图形的绘图函数,用户可以编写自己的绘图函数。遗传算法在每次运行时调用这个函数,画出图形。这里举例说明怎样创建一个用户绘图函数来显示从前一代到当前代最佳适应度值的变化情形,内容包括:创建绘图函数,使用绘图函数,绘图函数如何作用。
(1)创建绘图函数
为了创建绘图函数,在MATLAB编辑器中复制、粘贴下列代码到一个新的M文件。
Function state = gaplotchange(options, state, flag)
% GAPLOTCHANGE Plots the change in the best score from the % previous generation.
persistent last_best % Best score in the previous generation if (strcmp(flag,'init')) % Set up the plot
set(gca,'xlim',[1, options.Generations],'Yscale','log'); hold on;
xlabel Generation
title('Change in Best Fitness Value') end
best = min(state.Score); % Best score in the current generation if state.Generation == 0 % Set last_best to best。
155
last_best = best; else
change = last_best - best;% Change in best score last_best = best;
plot(state.Generation,change,'.r'); title(['Change in Best Fitness Value'])
end
然后在MATLAB 路径下将其存为M文件gaplotchange.m。 (2)使用绘图函数
为了使用用户绘图函数,在”绘图(Plots)”窗格中选择“Custom function(定制函数)”,并且在其右边的文本框中输入函数名@gaplotchange。为了对用户绘图函数输出的最佳适应度值图形进行比较,在这里也选择“Best Fitness”。现在,如果运行例子函数Rastrigin,显示出来的图形如图8.27所示。
最佳值 0.0021904 平均值 0.49832 最佳适应度值的变化
图8.27 用户绘图函数输出的Rastrigin函数运行结果
注意:因为图中下半部的y-轴为对数刻度,所以图形中的离散点仅仅显示大于零的点。对数刻度能显示适应度函数的微小变化,而上面的图形则不能显示出微小变化。
(3)绘图函数如何作用
绘图函数使用包含在下面结构体中的信息,它们由遗传算法传递给绘图函数作为输入参数:
? options(参数)— 当前参数设置。 ? state(状态)— 关于当前代的信息。
? flag(曲线标志)— 曲线表示为对数等的当前状态。 绘图函数的主要作用可以描述如下:
persistent last_best
生成永久变量last_best ——即前一代的最佳值。永久变量保存着多种图形函数调用类型。
156