1
模式识别与智能计算的MATLAB实现
1.11.5.1 9.5.1 遗传算法的MATLAB实现
9.5.1 遗传算法的MATLAB实现

遗传算法的MATLAB实现,除了自己编写程序外,还可以采用MATLAB中的遗传算法和直接搜索工具箱(Genetic Algorithm and Direct Search Toolbox)。使用此工具箱,可以扩展MATLAB及其优化工具箱在处理优化问题方面的能力,处理传统的优化技术难以解决的问题,如难以定义或不便于进行数学建模;也可以解决目标函数较复杂的问题,如目标函数不连续或具有高度非线性、随机性以及目标函数不可微等。

在MATLAB中,遗传算法工具箱中的函数可以通过命令行和图形用户界面(GUI)两种方式来调用。在使用图形用户界面时,通过相应窗格进行遗传算法中各参数的设置及计算。在用命令行实现遗传算法时,则通过调用相应的遗传算法函数进行算法设置并完成计算。

需要注意的是,遗传算法和直接搜索工具箱中的优化函数总是使目标函数最小化,如果要想求出函数的最大值,则可以转化求取函数的负函数的最小值。

1.命令行方式

遗传算法工具箱函数如表9.1所列。

表9.1 遗传算法工具箱函数

alt

各函数使用方法如下。

(1)gaoptimset

调用格式:

alt

参数说明:options是输出的选项结构,为结构体数据;param1和param2表示属性的名称;value1和value2为对应属性值。表9.2中给出了各属性参数,其中花括号表示默认值。

表9.2 函数gaoptimset的属性参数

alt

alt

(2)gaoptimget

调用格式:

alt

参数说明:value表示获取的name属性对应的属性值;options是遗传算法选项结构;name是属性名。

(3)ga

调用格式:

alt

参数说明:x是适应度(目标)函数取最小值时的参数取值。Fitnessfcn为适应度函数的句柄,nvars为适应度函数的维数,也即变量数,A和b分别是矩阵和向量,它们是约束不等式Ax≤b的系数矩阵。Aeqbeq分别是约束等式Aeq*x=beq中的系数矩阵和向量。Lb和ub分别是变量的下界和上界。nonlcon是描述非线性约束的函数句柄。options是遗传算法的选项结构。fval是适应度函数的最小值。Exitflag表示遗传算法退出时的情况,其可能取值及其含义是:1表示适应度函数的平均变化在StallGenLimit属性值小于TolFcn属性值并且约束违反小于TolCon范围外;3表示适应度函数在属性限值范围内不变;4表示步长小于机器精度同时约束违反小于TolCon范围;5表示适应度极限达到同时约束违反小于TolCon;0表示超过代的最大值;-1表示输出或者plot函数终止优化;-2表示找不到合适的点;-4表示界限时间极限超出;-5表示超出时间极限。Output表示输出的结构,它包含以下信息:randstate表示随机函数rand的状态值;randnstate表示随机函数randn的状态值;generations表示总的代数,不包括混合迭代;funccount表示函数计算总次数;maxconstraitn表示最大迭代违反;message给出遗传算法终止信息。Population是结束时的最终人口数目。Scores表示最后人口数目的评价。

其中,A、b、Aeq、beq、Lb、ub、nonlcon、options和fval、exitflag、output、population、scores等都是可选项,省略时选用系统默认值。设置时要按格式的顺序进行,缺省用[]代替。

(4)gamultiobj

函数gamultiobj的用法与ga函数相似,只不过它可以计算多个函数的最小值。

当用不同的参数选项运行遗传算法时,可将遗传算法的各种命令编写成M文件,然后通过运行M文件即可。例如,下列M文件设置了不同交叉概率来多次运行遗传算法,从而可观察、比较每次运行的结果。

alt

2.GUI形式

在MATLAB工作窗口输入命令gatool,可打开如图9.2所示的遗传算法GUI界面。此时只要在相应窗格中选择相应各参数的选项或缺省值,便可进行遗传算法的计算。

alt

图9.2 遗传算法GUI界面

各选项如下:

(1)fitnessfun(适应度函数)

其形式为@fitnessfun。fitnessfun是用户编写的计算适应度函数(优化目标函数)的M文件的名字。

(2)Number of variable(变量个数)

适应度函数输入向量列的长度。

如果其他参数选项选缺省值,单击star,便可运行遗传算法,并将在Status and results(状态与结果)的窗口中显示出相应的运行结果。在运行过程中,通过单击Pause,可以使算法暂停,此时按钮的名字变为Resume,为了从暂停处恢复算法的运行,可单击此键。

由于遗传算法是一种随机性算法,所以为了复现遗传算法前一次的运行结果,选择Use random states from previous run(使用前一次运行的随机状态)复选框,此时遗传算法的下一次运行时返回的结果与前一次运行的结果相同,但在正常情况下,不要选择此复选框,这样可充分利用遗传算法随机搜索的优点。

Plot窗口可以显示遗传算法运行时所提供的有关信息的各种图形。这些信息可以帮助我们改变算法的选项,改进算法的性能。可以显示的图形见图形参数。

如果工具箱没有符合自己想要输出图形的绘图函数,可通过在Plot窗口选择Custom function,并且在其右边的文本框中输入自己编写的绘图函数名,就可以按照自己的要求绘制图形。

(3)参数项的设置

如果要改变相应参数的缺省值,可在Options窗口中改变遗传算法的选项,为了查看窗口中的各类选项,可单击与之相连的符号“+”,便出现各类参数的窗口。在窗口中可以逐一设置其中的参数项,各参数项的意义及缺省值见表9.2。

对于数值参数的设置,可以直接在相应编辑框中输入该参数的值或者在包含该参数值的MATLAB工作窗口输入相应变量的名称,就可以完成设置。例如,可以利用下列两种方法之一设置Initial range为[1;100]:

·在Initial range文本框中输入数值;

·在MATLAB工作区中输入变量x0=[1;100],然后在Initial point文本框中输入变量的名字x0。

(4)输入/输出参数及问题

①输出参数和问题

选用的参数和问题可以输出到MATLAB的工作空间,以便以后在遗传算法工具中应用,也可以以命令行方法,在函数ga中调用这些参数和问题。

为了输出参数和问题,单击GUI中的Export to workspace或从File菜单中选择此菜单项,打开对话项,对话项提供下列参数:

(a)为了保存问题的定义和当前参数的设置,选择Export problem and options to a matlab structure named(输出问题与参数到已命名的MATLAB结构),并为这个结构体命名。单击OK按钮,即把这个信息保存到工作空间的一个结构体,如果以后要把这个结构体输入到遗传算法工具,那么当输出这个结构时,所设置的Fitness function和Number of variable以及所有的参数设置都被恢复到原来值。

如果想要遗传算法在输出问题之前从上一次运行的最后种群恢复运行,可选择Export to workspace下的Include information needed to resume this run,然后当输入问题结构体并单击Start按钮时,算法就从前次运行的最后种群继续运行。为了恢复遗传算法产生随机初始种群的缺省行为,可删除在Initial population字段所设置的种群,并代之以空的中括号。

(b)如果只是为了保存参数设置,可选择Export options to a MATLAB structure named,并为这个参数结构体输入一个名字。

(c)为了保存遗传算法最近一次运行的结果,可选择Export results to a MATLAB structure named,并为这个结构体命名。

②输入参数

为了从MATLAB工作窗口输入一个参数结构体,可从File菜单中选Import options菜单项。在MATLAB工作窗口中打开一个对话框,列出遗传算法参数结构体的一系列选项。当选择参数项结构体并单击Import按钮时,在遗传算法工具中的参数域就被更新,且显示所输入参数的值。

③输入问题

为了从遗传算法工具输入一个以前输出的问题,可从File菜单选择Import problem参数项,在MATLAB工作窗口中,打开一个对话框,显示遗传算法问题结构体的一个列表。当选择了问题结构体并单击OK按钮时,遗传算法工具箱中的适应度函数、变量个数和参数域等文本框就被更新。