使用MATLAB遗传算法工具实例(详细) 联系客服

发布时间 : 星期五 文章使用MATLAB遗传算法工具实例(详细)更新完毕开始阅读f27384d6ec3a87c24028c4d7

图8.30 函数ackleyfcn的最佳适应度

假定想要实验利用其它的参数运行遗传算法,接着利用当前参数设置,此后再从最后种群重新运行算法。为此,进行以下步骤:

① 单击“Export to Workspace”按钮。 ② 在出现的对话框中:

- 选择“Export problem and options to a MATLAB structure named”。 - 在文本框中输入问题和参数的名称,例如ackley_uniform。

- 选择“Include information needed to resume this run(包括所需信息以恢复本次运行)”。

做了这些选择后的对话框如图8.31所示。

图8.31 在输出窗口对话框中做适当选择

③ 单击OK按钮。

问题和参数被输出到MATLAB工作空间的一个结构体中。在MATLAB命令窗口输入下面的信息就可以观察这个结构体:

161

ackley_uniform ackley_uniform =

fitnessfcn: @ackleyfcn genomelength: 10 options: [1x1 struct]

利用不同的参数设置,甚至是不同的适应度函数,在运行遗传算法之后,都能够按照如下步骤来恢复问题:

① 从“File”菜单,选择“Import Problem ”菜单项。打开的对话框如图8.32所示。

图8.32 GA问题输入窗口

② 选择ackley_uniform。 ③ 单击按钮“Import”。

这样就把“Population”选项中的“Initial population”字段设置成输出问题之前运行的最后种群。在运行期间,所有其它参数恢复它们的设置。当单击Start按钮时,遗传算法从被保存的最后种群重新运行。图8.33所示为初始运行和重新运行的最佳适应度图形。

第一次运行 从这里继续运行

图8.33 初始运行和重新运行的最佳适应度

162

注意:如果在利用所导入问题运行遗传算法之后,想要恢复遗传算法生成一个随机初始种群的缺省行为,可删除“Initial population”字段中设置的种群,而代之以空的中括号‘[ ]’。 8.3.1.11 生成M文件

在遗传算法工具中,要利用特定的适应度函数和参数生成运行遗传算法的M文件,可从“File”菜单选择“Generate M-File(生成M文件)”菜单项,并把生成的M文件保存到MATLAB路径的一个目录。

在命令行调用这个M文件时,返回的结果与利用在遗传算法工具中生成M文件时的适应度函数和参数所得到的结果一致。

8.3.2 从命令行使用遗传算法

使用遗传算法,也可以从命令行运行遗传算法函数ga。这方面的内容主要包括:利用缺省参数运行ga;在命令行设置ga的参数;使用遗传算法工具的参数和问题结构;复现运行结果;以前一次运行的最后种群重新调用函数ga;从M文件运行ga。 8.3.2.1 利用缺省参数运行ga

利用缺省参数运行遗传算法,以下面语句调用ga

[x fval] = ga(@fitnessfun,nvars)

其中:

? @fitnessfun — 计算适应度函数值的M文件的函数句柄。 ? nvars —适应度函数中独立变量的个数。 ? x — 返回的最终点。

? fval — 返回的适应度函数在x点的值。 例如,运行例子Rastrigin函数,从命令行输入

[x fval] = ga(@rastriginsfcn,2)

这将返回

x =

0.0027 -0.0052 fval =

0.0068

为了得到遗传算法更多的输出结果,可以用下面语句调用ga

[x fval reason output population scores] = ga(@fitnessfcn, nvars) 除了输出变量x和fval之外,增加了以下输出变量 ? “reason(原因)”— 算法停止的原因。

? “output(输出)”— 包含关于算法在每一代性能的结构体。 ? “population(种群)”— 最后种群。 ? “scores(得分)”— 最终得分值。 8.3.2.2 在命令行设置ga的参数

遗传算法工具中的参数可以指定为任何有效的参数值,设置参数使用下面语句:

[x fval] = ga(@fitnessfun,nvars,options) 使用函数gaoptimset生成一个参数结构体。

options = gaoptimset

返回带有缺省值的参数结构体:

options =

163

PopulationType: 'doubleVector' PopInitRange: [2x1 double] PopulationSize: 20 EliteCount: 2

CrossoverFraction: 0.8000 MigrationDirection: 'forward' MigrationInterval: 20 MigrationFraction: 0.2000

Generations: 100 TimeLimit: Inf fitnessLimit: -Inf StallLimitG: 50 StallLimitS: 20 InitialPopulation: [ ] InitialScores: [ ] PlotInterval: 1

CreationFcn: @gacreationuniform fitnessScalingFcn: @fitscalingrank

SelectionFcn: @selectionstochunif CrossoverFcn: @crossoverscattered MutationFcn: @mutationgaussian HybridFcn: [ ] Display: 'final' PlotFcns: [ ] OutputFcns: [ ] Vectorized: 'off'

如果没有给某一参数项输入新的值,则函数ga使用其缺省值。

每一个参数的值都存放在参数结构体中,例如options.PopulationSize。可以通过输入参数的名称显示参数的值。例如,显示遗传算法种群的大小,可输入

options.PopulationSize ans =

20

改变参数结构体中成员值,例如,设置PopulationSize值等于100,代替它的缺省值20,可输入

options = gaoptimset('PopulationSize',100)

参数结构体中,PopulationSize为100,其它值都为缺省值或当前值。

这时,再输入

ga(@fitnessfun,nvars,options)

函数ga将以种群中个体为100运行遗传算法。

如果想接着改变参数结构体其它成员的值,例如设置PlotFcns为@gaplotbestf,画出每一代最佳适应度函数值图形,则可用下面语句调用函数gaoptimset

options = gaoptimset(options,'PlotFcns',@plotbestf)

这里保持了参数的所有当前值,除PlotFcns之外,它改变为@plotbestf。注意,如果省略输入自变量参数options,那么函数gaoptimset重新置PopulationSize为它的缺省值20。

也可以利用一个语句来同时设置两个参数PopulationSize和PlotFcns:

options = gaoptimset('PopulationSize',100,'PlotFcns',@plotbestf)

164