set(gca, 'xlim',[1,options.Generations], 'Yscale', 'log');
在遗传算法运行前建立图形。options.Generation为代数的最大值。
best = min(state.Score)
state.Score包含当前代中所有个体的得分值,变量best是其中最小的得分值。结构体状态文本框的完整描述可参见―8.4.1.1 图形参数‖一节。
change = last_best - best
变量change是前一代的最佳值减去当前代的最佳值。
plot(state.Generation,change,'.r')
画出当前代的变化曲线,变量维数包含在state.Generation中。
函数gaplotchange的代码包含了函数gaplotbestf代码中许多相同成分,函数gaplotbestf生成最佳适应度图形。 8.3.1.7 复现运行结果
为了复现遗传算法前一次的运行结果,选择“Use random states from previous run(使用前一次运行的随机状态)”复选框。这样就把遗传算法所用的随机数发生器的状态重新设置为前一次的值。如果没有改变遗传算法工具中的所有设置,那么遗传算法下一次运行时返回的结果与前一次运行的结果一致。
正常情况下,不要选择“Use random states from previous run”这个复选框,可以充分利用遗传算法随机搜索的优点。如果想要分析特定的运行结果或者显示相对个体的精确结果,可以选择“Use random states from previous run”复选框。 8.3.1.8 设置选项参数
设置遗传算法工具使用时的选项参数有两种方法:一种是在遗传算法工具GUI的“Options”窗格中直接进行设置,另一种是在MATLAB工作窗口中通过命令行方式进行设置。
在参数“Options”窗格中设置遗传算法的各种运行参数,如图8.28所示。每一类参数对应有一个窗格,单击该类参数时,对应窗格展开。例如,点击“Population”参数选项,种群窗格展开来,可以逐一设置其中的参数项,如Population type(种群类型)、Population size(种群尺度)、Creation function(创建函数)、Initial population、Initial score(初始得分)、Initial range(初始范围)等。
此外,其他选项参数类还有:Fitness scaling(适应度测量)、selection、Reproduction、Mutation、Crossover、Migration(迁移)、Hybrid function(混合函数)、Stopping criteria、Output function(输出函数)、Display to command window(显示到命令窗口)、Vectorize(向量化)等。这些参数类各自对应一个参数窗格,点击后相应窗格随即展开,可以进行参数项的设置。
所有变量参数的含义及详细描述可参见―8.4.1 遗传算法参数‖一节。
157
图8.28 选项参数窗口
在MATLAB工作窗口中,可以将遗传算法的运行参数设置为变量。
对于数值参数的设置,可以直接在相应编辑框中输入该参数的值,或者在包含该参数值的MATLAB工作窗口中输入相应变量的名字,就可以完成设置。例如,可以利用下面两种方法之一设置“Initial point(初始点)”为[2.1 1.7]:
? 在“Initial point”文本框输入[2.1 1.7]。
? 在MATLAB工作区输入变量x0 = [2.1 1.7],然后在“Initial point” 文本框输入变量
的名字x0。
因为选项参数是比较大的矩阵或向量,所以在MATLAB工作窗口中把参数的值定义为变量一般是比较方便的,也就是说,如果需要,很容易改变矩阵或向量的项。 8.3.1.9 输入输出参数及问题
参数和问题结构可以从遗传算法工具被输出到MATLAB的工作窗口,也可以在以后的某个时间再反过来把它们从MATLAB的工作窗口输入给遗传算法工具。这样就可以保存对问题的当前设置,并可以在以后恢复这些设置。参数结构也可以被输出到MATLAB工作窗口,并
158
且可以再把它们用于命令行方式的遗传算法函数ga。
输入和输出信息通常包含下列各项:
? 问题定义,包括“Fitness function”和“Number of variables(变量个数)”。 ? 当前指定的选项参数。 ? 算法运行的结果。
下面解释如何输入和输出这些信息。 (1)输出参数和问题
参数和问题可以被输出到MATLAB工作空间,以便以后在遗传算法工具中应用它们。也可以以命令行方式,在函数ga中应用这些参数和问题。
为了输出参数和问题,单击“Export to Workspace(输出到工作空间)”按钮或从File菜单中选择“Export to Workspace”菜单项,这将打开如图8.29所示的对话框。
图8.29 输出对话框
对话框提供下列参数:
① 为了保存问题的定义和当前参数的设置,选择“Export problem and options to a MATLAB structure named(输出问题与参数到已命名的MATLAB结构)”,并为这个结构体输入一个名字。单击OK按钮,即把这个信息保存到MATLAB工作空间的一个结构体。如果以后要把这个结构体输入到遗传算法工具,那么当输出这个结构时,所设置的“Fitness function”和“Number of variables”,以及所有的参数设置都被恢复到原来值。
注意:输出问题之前,如果在“Run solver(运行求解器)” 窗格选中“Use random states from previous run(使用前一次运行的随机状态)”选项,则遗传算法工具将保存上一次运行开始时随机数产生函数rand和randn的状态。然后,在选择了“Use random states from previous run”选项的情况下,输入问题且运行遗传算法,那么输出问题之前的运行结果就被准确地复现了。
② 如果想要遗传算法在输出问题之前从上一次运行的最后种群恢复运行,可选择“Include information needed to resume this run(包括所需信息以恢复本次运行)”。然后,当输入问题结构体并单击Start按钮,算法就从前次运行的最后种群继续运行。为了恢复遗传算法产生随机初始种群的缺省行为,可删除在“Initial population”字段所设置的种群,并用代之以空的中括号?[ ]‘。
注意:当选择了“Include information needed to resume this run”选项,则选择“Use random states from previous run”选项对于输入问题和运行遗传算法时创建的初始种群将不再有任何作用。后者的选项只是指定从新的一次运行开始时再一次复现结果,而不是为了恢复算法的继续运行。
③ 如果只是为了保存参数设置,可选择“Export options to a MATLAB structure named(输出参数到已命名的MATLAB结构)”,并为这个参数结构体输入一个名字。
④ 为了保存遗传算法最近一次运行的结果,可选择“Export results to a MATLAB structure named”,并为这个结果结构体输入一个名字。
159
(2)举例——用输出问题运行函数ga
输出一个问题可参见“8.2.3 举例:Rastrigin函数”一节,在命令行运行遗传算法函数ga,其步骤如下:
① 单击“Export to Workspace”按钮,打开相应对话框。
② 在“Export To Workspace”对话框中的“Export problem and options to a MATLAB structure named”右面的文本框,输入问题结构体的名称,假设为my_gaproblem。
③ 在MATLAB窗口,以my_gaproblem为参数调用函数ga:
[x fval] = ga(my_gaproblem)
则返回结果:
x =
0.0027 -0.0052 fval =
0.0068
调用函数ga可参见 ―8.3.2 从命令行使用遗传算法‖ 一节。 (3)输入参数
为了从MATLAB工作窗中输入一个参数结构体,可从“File”菜单选择“Import Options(输入参数)”菜单项。在MATLAB工作窗中打开一个对话框,列出遗传算法参数结构体的一系列选项。当选择参数结构体并单击“Import(输入)”按钮,在遗传算法工具中的参数域就被更新,且显示所输入参数的值。
创建参数结构体有两种方法:
? 调用函数gaoptimset,以参数结构options作为输出。
? 在遗传算法工具中,从“Export to Workspace(输出到工作空间)”对话框保存当前参数。
(4)输入问题
为了从遗传算法工具输入一个以前输出的问题,可从“File”菜单选择“Import Problem(输入问题)”菜单项。在MATLAB工作窗中,打开一个对话框,显示遗传算法问题结构体的一个列表。当选择了问题结构体并单击OK按钮,遗传算法工具中的下列文本框被更新:
? 适应度函数。 ? 变量个数。 ? 参数域。 8.3.1.10 举例——从最后种群中继续遗传算法
下面的例子显示如何输出一个问题,以便当输入问题并按下Start按钮时,遗传算法能从该输出问题所保存的最后种群继续运行。现在运行一个例子,在遗传算法工具中输入下面的信息:
? 设置适应度函数为@ackleyfcn,它是计算函数Ackley,是工具箱提供的一个测试函数。 ? 设置“Number of variables”为 10。 ? 在“Plots”窗格选择“Best fitness”。 ? 单击按钮“Start”。 显示的结果如图8.30所示。
160