资源描述
最新发布得MATLAB 7、0 Release 14已经包含了一个专门设计得遗传算法与直接搜索工具箱(Genetic Algorithm and Direct Search Toolbox,GADS)。使用遗传算法与直接搜索工具箱,可以扩展MATLAB及其优化工具箱在处理优化问题方面得能力,可以处理传统得优化技术难以解决得问题,包括那些难以定义或不便于数学建模得问题,可以解决目标函数较复杂得问题,比如目标函数不连续、或具有高度非线性、随机性以及目标函数没有导数得情况。
本章8、1节首先介绍这个遗传算法与直接搜索工具箱,其余各节分别介绍该工具箱中得遗传算法工具及其使用方法。
8、1 遗传算法与直接搜索工具箱概述
本节介绍MATLAB得GADS(遗传算法与直接搜索)工具箱得特点、图形用户界面及运行要求,解释如何编写待优化函数得M文件,且通过举例加以阐明。
8.1.1 工具箱得特点
GADS工具箱就是一系列函数得集合,它们扩展了优化工具箱与MATLAB数值计算环境得性能。遗传算法与直接搜索工具箱包含了要使用遗传算法与直接搜索算法来求解优化问题得一些例程。这些算法使我们能够求解那些标准优化工具箱范围之外得各种优化问题。所有工具箱函数都就是MATLAB得M文件,这些文件由实现特定优化算法得MATLAB语句所写成。
使用语句
type function_name
就可以瞧到这些函数得MATLAB代码。我们也可以通过编写自己得M文件来实现来扩展遗传算法与直接搜索工具箱得性能,也可以将该工具箱与MATLAB得其她工具箱或Simulink结合使用,来求解优化问题。
工具箱函数可以通过图形界面或MATLAB命令行来访问,它们就是用MATLAB语言编写得,对用户开放,因此可以查瞧算法、修改源代码或生成用户函数。
遗传算法与直接搜索工具箱可以帮助我们求解那些不易用传统方法解决得问题,譬如表查找问题等。
遗传算法与直接搜索工具箱有一个精心设计得图形用户界面,可以帮助我们直观、方便、快速地求解最优化问题。
8.1.1、1 功能特点
遗传算法与直接搜索工具箱得功能特点如下:
(1) 图形用户界面与命令行函数可用来快速地描述问题、设置算法选项以及监控进程。
(2) 具有多个选项得遗传算法工具可用于问题创建、适应度计算、选择、交叉与变异。
(3) 直接搜索工具实现了一种模式搜索方法,其选项可用于定义网格尺寸、表决方法与搜索方法。
(4) 遗传算法与直接搜索工具箱函数可与MATLAB得优化工具箱或其她得MATLAB程序结合使用。
(5) 支持自动得M代码生成。
8.1.1、2 图形用户界面与命令行函数
遗传算法工具函数可以通过命令行与图形用户界面来使用遗传算法。直接搜索工具函数也可以通过命令行与图形用户界面来进行访问。图形用户界面可用来快速地定义问题、设置算法选项、对优化问题进行详细定义。
遗传算法与直接搜索工具箱还同时提供了用于优化管理、性能监控及终止准则定义得工具,同时还提供大量标准算法选项。
在优化运行得过程中,可以通过修改选项来细化最优解,更新性能结果。用户也可以提供自己得算法选项来定制工具箱。
8.1.1、3 使用其她函数与求解器
遗传算法与直接搜索工具箱与MATLAB及优化工具箱就是紧密结合在一起得。用户可以用遗传算法或直接搜索算法来寻找最佳起始点,然后利用优化工具箱或用MATLAB程序来进一步寻找最优解。通过结合不同得算法,可以充分地发挥 MATLAB 与工具箱得功能以提高求解得质量。对于某些特定问题,使用这种方法还可以得到全局(最优)解。
8.1.1、4 显示、监控与输出结果
遗传算法与直接搜索工具箱还包括一系列绘图函数用来可视化优化结果。这些可视化功能直观地显示了优化得过程,并且允许在执行过程中进行修改。
工具箱还包括一系列绘图函数用来可视化优化结果。这些可视化功能直观地显示了优化得过程,并且允许在执行过程中进行修改。该工具箱还提供了一些特殊绘图函数,它们不仅适用于遗传算法,还适用于直接搜索算法。适用于遗传算法得函数包括函数值、适应度值与函数估计。适用于直接搜索算法得函数包括函数值、分值直方图、系谱、适应度值、网格尺寸与函数估计。这些函数可以将多个绘图一并显示,可直观方便地选取最优曲线。另外,用户也可以添加自己得绘图函数。
使用输出函数可以将结果写入文件,产生用户自己得终止准则,也可以写入用户自己得图形界面来运行工具箱求解器。除此之外,还可以将问题得算法选项导出,以便日后再将它们导入到图形界面中去。
8.1.1、5 所需得产品支持
遗传算法与直接搜索工具箱作为其她优化方法得补充,可以用来寻找最佳起始点,然后可以再通过使用传统得优化技术来进一步寻找最优解。
工具箱需要如下产品支持:(1) MATLAB。(2) 优化工具箱。
8.1.1、6 相关产品
与遗传算法与直接搜索工具箱相关得产品有:
(1) 统计工具箱——应用统计算法与概率模式。
(2) 神经网络工具箱——设计与仿真神经网络。
(3) 模糊逻辑工具箱——设计与仿真基于模糊逻辑得系统。
(4) 金融工具箱——分析金融数据与开发金融算法。
8.1.1、7 所需得系统及平台
遗传算法与直接搜索工具箱对于对于运行环境、支持平台与系统得需求,可随时通过访问网站://了解最新发布得信息。
这里介绍得MATLAB 7、0 Release 14所需得最低配置就是:Windows系列操作系统,Pentium III 500 CPU、64MB RAM,空闲硬盘空间600MB以上。
8.1.2 编写待优化函数得M文件
为了使用遗传算法与直接搜索工具箱,首先必须编写一个M文件,来确定想要优化得函数。这个M文件应该接受一个行向量,并且返回一个标量。行向量得长度就就是目标函数中独立变量得个数。本节将通过实例解释如何编写这种M文件。
8.1.2、1 编写M文件举例
下面得例子展示了如何为一个想要优化得函数编写M文件。假定我们想要计算下面函数得最小值:
M文件确定这个函数必须接受一个长度为2得行向量X,分别与变量x1与x2相对应,并且返回一个标量X,其值等于该函数得值。为了编写这个M文件,执行如下步骤:
(1) 在MATLAB得File菜单中选择New菜单项。
(2) 选择M-File,将在编辑器中打开一个新得M文件。
(3) 在该M文件中,输入下面两行代码:
function z = my_fun(x)
z = x(1)^2 - 2*x(1)*x(2) + 6*x(1) + x(2)^2 - 6*x(2);
(4) 在MATLAB路径指定得目录中保存该M文件。
为了查瞧该M文件就是否返回正确得值,可键入
my_fun([2 3])
ans =
-5
注意:在运行遗传算法工具或模式搜索工具时,不要使用编辑器或调试器来调试目标函数得M文件,否则会导致在命令窗口出现Java异常消息,并且使调试更加困难。
8.1.2、2 最大化与最小化
遗传算法与直接搜索工具箱中得优化函数总就是使目标函数或适应度函数最小化。也就就是说,它们求解如下形式得问题:
如果我们想要求出函数f(x)得最大值,可以转而求取函数g(x)=-f(x)得最小值,因为函数g(x)最小值出现得地方与函数f(x)最大值出现得地方相同。
例如,假定想要求前面所描述得函数得最大值,这时,我们应当编写一个M文件来计算,求函数
得最小值。
8.1.2、3 自动代码生成
遗传算法与直接搜索工具箱提供了自动代码生成特性,可以自动生成求解优化问题所需要得M文件。例如,图8、1所示得就就是使用遗传算法工具得自动代码生成特性所产生得M文件。
另外,图形用户界面所输出得优化结果可以作为对来自命令行调用代码得一种解释,这些代码还用于使例程与保护工作自动化。
图8、1 遗传算法M文件代码得自动生成
8、2 使用遗传算法工具初步
遗传算法与直接搜索工具箱包含遗传算法工具与直接搜索工具。从本节至章末,将主要介绍其中得遗传算法工具及其使用方法。
本节主要介绍遗传算法工具使用得初步知识,内容包括:遗传算法使用规则,遗传算法工具得使用方式,举例说明如何使用遗传算法来求解一个优化问题,解释遗传算法得一些基本术语,最后阐述遗传算法得工作原理与工作过程。
8.2.1 遗传算法使用规则
遗传算法就是一种基于自然选择、生物进化过程来求解问题得方法。遗传算法反复修改对于个体解决方案得种群。在每一步,遗传算法随机地从当前种群中选择若干个体作为父辈,并且使用它们产生下一代得子种群。在连续若干代之后,种群朝着优化解得方向进化。我们可以用遗传算法来求解各种不适宜于用标准优化算法求解得优化问题,包括目标函数不连续、不可微、随机或高度非线性得问题。
遗传算法在每一步使用下列三类规则从当前种群来创建下一代:
(1) 选择规则(Selection rules),选择对下一代种群有贡献得个体,称为父辈。
(2) 交叉规则(Crossover rules),将两个父辈结合起来构成下一代得子辈种群。
(3) 变异规则(Mutation rules),施加随机变化给父辈个体来构成子辈。
遗传算法与标准优化算法主要在两个方面有所不同,它们得比较情况归纳于表8、1中。
表8、1 遗传算法与标准优化算法比较
标准算法
遗传算法
每次迭代产生一个单点,点得序列逼近一个优化解
每次迭代产生一个种群,种群逼近一个优化解
通过确定性得计算在该序列中选择下一个点
通过随机进化选择计算来选择下一代种群
8.2.2 遗传算法使用方式
遗传算法工具有两种使用方式:
(1) 以命令行方式调用遗传算法函数ga。
(2) 使用遗传算法工具,从图形用户界面到遗传算法。
本节对这些方式做一个简要得介绍。
8.2.2、1 在命令行调用函数ga
对于在命令行使用遗传算法,可以用下列语法调用遗传算法函数ga:
[x fval] = ga(fitnessfun, nvars, options)
其中:fitnessfun 就是适应度函数句柄;nvars 就是适应度函数得独立变量得个数;options 就是一个包含遗传算法选项参数得结构。如果不传递选项参数,则ga使用它本身得缺省选项值。
函数所给出得结果:fval——适应度函数得最终值;x——最终值到达得点。
我们可以十分方便地把遗传算法工具输出得结果直接返回到MATLAB得workspace(工作空间),或以不同得选项从M文件多次调用函数ga来运行遗传算法。
调用函数ga时,需要提供一个选项结构options。后面得有关章节对于在命令行使用函数ga与创建选项结构options提供了详细得描述。
8.2.2、2 通过GUI使用遗传算法
遗传算法工具有一个图形用户界面GUI,它使我们可以使用遗传算法而不用工作在命令行方式。为了打开遗传算法工具,可键入
gatool
打开得遗传算法工具图形用户界面如图8、2所示。
输入适应度函数
输入适应度函数
得变量数目
开始遗传算法
显示结果
显示参数描述
图8、2 遗传算法工具
为了使用遗传算法工具,首先必须输入下列信息:
(1) Fitness function(适应度函数)——欲求最小值得目标函数。输入适应度函数得形式为fitnessfun,其中fitnessfun、m就是计算适应度函数得M文件。在前面“编写待优化函数得M文件”一节里已经解释了如何编写这种M文件。符号产生一个对于函数fitnessfun得函数句柄。
(2) Number of variables(变量个数)——适应度函数输入向量得长度。对于“编写待优化函数得M文件”一节所描述得函数My_fun,这个参数就是2。
点击Start按钮,运行遗传算法,将在Status and Results(状态与结果)窗格中显示出相应得运行结果。
在Options窗格中可以改变遗传算法得选项。为了查瞧窗格中所列出得各类选项,可单击与之相连得符号“+”。
8.2.3 举例:Rastrigin函数
本节介绍一个例子,讲述如何寻找Rastrigin函数得最小值与显示绘制得图形。Rastrigin函数就是最常用来测试遗传算法得一个典型函数。Rastrigin函数得可视化图形显示,它具有多个局部最小值与一个全局最小值,遗传算法可以帮助我们确定这种具有多个局部最小值函数得最优解。
8.2.3、1 Rastrigin函数
具有两个独立变量得Rastrigin函数定义为
Rastrigin函数得图形如图8、3所示。
工具箱包含一个M文件,即rastriginsfcn、m,就是用来计算Rastrigin函数值得。
全局最小点[0,0]
图8、3 Rastrigin函数图形
如图8、3所示,Rastrigin函数有许多局部最小值——在图上显示为“谷底(valleys)”。然而,该函数只有一个全局最小值,出现在x-y 平面上得点[0,0]处,正如图中竖直线指示得那样,函数得值在那里就是0。在任何不同于[0,0]得局部最小点处,Rastrigin函数得值均大于0。局部最小处距原点越远,该点处Rastrigin函数得值越大。
Rastrigin函数之所以最常用来测试遗传算法,就是因为它有许多局部最小点,使得用标准得、基于梯度得查找全局最小得方法十分困难。
图8、4所示就是Rastrigin函数得轮廓线,它显示出最大最小交替变化得情形。
全局最小点[0,0]
局部最小点
局部最小点
图8、4 Rastrigin函数得轮廓线
8.2.3、2 寻找Rastrigin函数得最小值
本节解释如何使用遗传算法来寻找Rastrigin函数得最小值。
注意:因为遗传算法使用随机数据来进行它得搜索,所以该算法每一次运行时所返回得结果会稍微有些不同。
为了查找最小值,进行下列步骤:
(1) 在命令行键入gatool,打开遗传算法工具。
(2) 在遗传算法工具得相应栏目,输入适应度函数与变量个数。在“Fitness function(适应度函数)”文本框中,输入rastriginsfcn;在“Number of variables(变量个数)”文本框中,输入2,这就就是Rastrigin函数独立变量得个数。这一步操作如图8、5所示。
图8、5 输入适应度函数与变量个数
(3) 在“Run solver(运行求解器)”窗格中,单击Start按钮,如图8、6所示。
图8、6 单击运行求解器Start按钮
在算法运行得同时,“Current generation(当前代数)”文本框中显示出当前得代数。通过点击“暂停(Pause)”按钮,可以使算法临时暂停一下。当这样做得时候,该按钮得名字变为“Resume(恢复)”。为了从暂停处恢复算法得运行,可单击这个“Resume”按钮。
当算法完成时,“Status and results”窗格出现如图8、7所示得情形。
最终点得适应度函数值
最终点
图8、7 状态与结果显示
“Status and results”窗格显示下列信息:
(1) 算法终止时适应度函数得最终值:
Fitness function value: 0、44585025
注意:所显示得值非常接近于Rastrigin函数得实际最小值0。“遗传算法举例”一节描述了一些方法,可以用来得到更接近实际最小值得结果。
(2) 算法终止得原因:
Optimization terminated:
maximum number of generations exceeded、
即退出得原因就是:超过最大代数而导致优化终止。
在本例中,算法在100代后结束,这就是 “Generations(代数)” 选项得缺省值,此选项规定了算法计算得最大代数。
(3) 最终点,在本例中就是[0、00274 -0、00516]。
8.2.3、3 从命令行查找最小值
为了从命令行查找Rastrigin函数得最小值,可键入
[x fval reason] = ga(rastriginsfcn, 2)
这将返回
x =
0、0027 -0、0052
fval =
0、0068
reason =
Optimization terminated:
maximum number of generations exceeded、
其中:x就是算法返回得最终点;fval就是该最终点处适应度函数得值;reason就是算法结束得原因。
8.2.3、4 显示绘制图形
“Plots(绘图)”窗格可以显示遗传算法运行时所提供得有关信息得各种图形。这些信息可以帮助我们改变算法得选项,改进算法得性能。例如,为了绘制每一代适应度函数得最佳值与平均值,选中复选框“Best fitness(最佳适应度)”,如图8、8所示。
图8、8 绘图对话框
当点击Start按钮时,遗传算法工具显示每一代适应度函数得最佳值与平均值得绘制图形。当算法停止时,所出现得图形如图8、9所示。
最佳值 0、0067796 平均值 0、014788
图8、9 各代适应度函数得最佳值与平均值
在每一代中,图得底部得点表示最佳适应度值,而其上得点表示平均适应度值。图得顶部还显示出当前一代得最佳值0、0067796与平均值0、014788。
为了得到最佳适应度值减少到多少为更好得直观图形,我们可以将图中y轴得刻度改变为对数刻度。为此,需进行如下操作:
(1) 从绘图窗格得Edit(编辑)菜单中选择“Axes Properties(坐标轴属性)”,打开属性编辑器,如图8、10所示。
选择对数刻度
单击Y表项
图8、10 绘图属性编辑器
(2) 点击Y表项。
(3) 在“Scale(刻度)”窗格,选择“Log (对数)”。
绘制得图形如图8、11所示。
最佳值0、0067796 平均值0、014788
图8、11 每一代适应度函数最佳值与平均值得对数图形
典型情况下,在早期各代中,当个体离理想值较远时,最佳值会迅速得到改进。在后来各代中,种群越接近最佳点,最佳值改进得越慢。
8.2.4 遗传算法得一些术语
本节解释遗传算法得一些基本术语,主要包括:
(1) 适应度函数(Fitness Functions)。
(2) 个体(Individuals)。
(3) 种群(Populations)与代(Generations)。
(4) 适应度值(Fitness Values)与最佳适应度值(Best Fitness Values);
(5) 父辈与子辈(Parents and Children)。
8.2.4、1 适应度函数
所谓适应度函数就就是想要优化得函数。对于标准优化算法而言,这个函数称为目标函数。该工具箱总就是试图寻找适应度函数得最小值。
我们可以将适应度函数编写为一个M文件,作为输入参数传递给遗传算法函数。
8.2.4、2 个体
一个个体就是可以施加适应度函数得任意一点。一个个体得适应度函数值就就是它得得分或评价。例如,如果适应度函数就是
则向量(2, -3, 1)就就是一个个体,向量得长度就就是问题中变量得个数。个体(2, -3, 1)得得分就是f(2, -3, 1) = 51。
个体有时又称为基因组或染色体组(genome),个体得向量项称为基因(genes)。
8.2.4、3 种群与代
所谓种群就是指由个体组成得一个数组或矩阵。例如,如果个体得长度就是100,适应度函数中变量得个数为3,我们就可以将这个种群表示为一个100×3得矩阵。相同得个体在种群中可以出现不止一次。例如,个体(2, -3, 1)就可以在数组得行中出现多次。
每一次迭代,遗传算法都对当前种群执行一系列得计算,产生一个新得种群。每一个后继得种群称为新得一代。
8.2.4、4 多样性
多样性或差异(Diversity)涉及一个种群得各个个体之间得平均距离。若平均距离大,则种群具有高得多样性;否则,其多样性低。在图8、12中,左面得种群具有高得多样性,亦即差异大;而右面得种群多样性低,亦即差异小。
图8、12 种群多样性比较
多样性就是遗传算法必不可少得本质属性,这就是因为它能使遗传算法搜索一个比较大得解得空间区域。
8.2.4、5 适应度值与最佳适应度值
个体得适应度值就就是该个体得适应度函数得值。由于该工具箱总就是查找适应度函数得最小值,所以一个种群得最佳适应度值就就是该种群中任何个体得最小适应度值。
8.2.4、6 父辈与子辈
为了生成下一代,遗传算法在当前种群中选择某些个体,称为父辈,并且使用它们来生成下一代中得个体,称为子辈。典型情况下,该算法更可能选择那些具有较佳适应度值得父辈。
8.2.5 遗传算法如何工作
本节简要介绍遗传算法得工作原理或工作过程,内容包括:算法要点;初始种群;生成下一代;后一代得绘图;算法得停止条件。
8.2.5、1 算法要点
下面得要点总结了遗传算法就是如何工作得:
(1) 首先,算法创建一个随机种群。
(2) 接着,算法生成一个新得种群序列,即新得一代。在每一步,该算法都使用当前一代中得个体来生成下一代。为了生成新一代,算法执行下列步骤:
(a) 通过计算其适应度值,给当前种群得每一个成员打分。
(b) 确定原来得适应度值得比例尺度,将其转换为更便于使用得范围内得值。
(c) 根据它们得适应度选择父辈。
(d) 由父辈产生子辈。子辈得产生可以通过随机改变一个单个父辈,亦即变异(mutation)来进行,也可以通过组合一对父辈得向量项,亦即交叉(crossover)来进行。
(e) 用子辈替换当前种群,形成下一代。
(3) 最后,若停止准则之一得到满足,则该算法停止。关于停止准则,可参见“8.2.5、7 算法得停止条件”一节。
8.2.5、2 初始种群
遗传算法总就是以产生一个随机得初始种群开始,如图8、13所示。
图8、13 初始种群
在本例中,初始种群包含20个个体,这恰好就是“Population(种群)”选项中得“Population size(种群尺度)”得缺省值。
注意:初始种群中得所有个体均处于图上右上角得那个象限,也就就是说,它们得坐标处于0与1之间,这就是因为“Population”选项中得“Initial range(初始范围)”得缺省值就是[0; 1]。
如果已知函数得最小点大约位于何处,就可以设置一个适当得“Initial range”,以便使该点处于那个范围得中间附近。例如,如果确信Rastrigin函数得最小值在点[0,0]附近,那么就可以直接设置“Initial range”为[-1;1]。然而,正如本例所显示得那样,即使没有给“Initial range”设置一个理想得值,遗传算法也还就是能够找到那个最小值。
8.2.5、3 产生下一代
在每一步,遗传算法使用当前种群来产生子辈,即获得下一代。算法在当前种群中选择一组个体,称为父辈,这些个父辈将其genes——亦即其向量中得项——贡献给它们得子辈。遗传算法通常选择那些具有较好适应度值得个体作为父辈。我们可以在“Selection(选择)”选项得“Selection function(选择函数)”文本框中指定遗传算法用来选择父辈得函数。
遗传算法对于下一代产生三类子辈:
(1) 优良子辈(Elite children),就是在当前代中具有最佳适应度值得那些个体。这些个体子辈存活到下一代。
(2) 交叉子辈(Crossover children),就是由一对父辈向量组合产生得。
(3) 变异子辈(Mutation children),就是对一个单个父辈引入随机改变即变异产生得。
图8、14表示了这三个类型得子辈。
优良子辈
交叉子辈
变异子辈
图8、14 三类子辈
在“8.3.3、5变异与交叉”一节解释如何指定遗传算法产生得每一类子辈得数目,以及用来执行完成交叉与变异得函数。
8.2.5、4 交叉子辈
算法通过组合当前种群中得父辈对(Pair)来产生交叉子辈。在子辈向量得每一个相同位置处,缺省得交叉函数在两个父辈之一得相同位置处随机选择一项,即基因,并将它指派给其子辈。
8.2.5、5 变异子辈
算法通过随机改变个体父辈中得基因而产生变异子辈。按照缺省,算法给父辈增加一个高斯分布得随机向量。
图8、15表示出初始种群得子辈,也即第二代种群,并且指出它们就是否为优良子辈、交叉子辈或变异子辈。
图8、15 初始种群得子辈
8.2.5、6 后代图形绘制
图8、16展示出在迭代60次, 80次, 95次, 100次时得种群得图形。
图8、16 在迭代60, 80, 95, 100次时得种群
随着代数得增加,种群中得个体靠近在一起,且逼近最小值点[0,0]。
8.2.5、7 算法得停止条件
遗传算法使用下列5个条件来确定何时停止:
(1) Generations(代数)——当产生得代得数目达到规定得代数得值时,算法停止。
(2) Time limit(时限)——在运行时间得秒数等于时限时,算法停止。
(3) Fitness limit(适应度限)——当适应度函数得值对于当前种群得最佳点小于或等于适应度限时,算法停止。
(4) Stall generations(停滞代数)——在连续繁殖得时间序列中,若长时间不繁殖新代,亦即目标函数无改进,到达停滞代数规定得代数时,则算法停止。
(5) Stall time limit(停滞时限)——在秒数等于停滞时限得时间间隔期间,若目标函数无改进,则算法停止。
若这5个条件中任何一个条件一旦满足,则该算法停止。我们可以在遗传算法工具得“Stopping criteria(停止标准)”选项中指定这些标准得值。它们得缺省值如图8、17所示。
图8、17 停止标准得缺省值
当运行遗传算法时,“Status(状态)”面板显示这些导致算法停止得标准。
“Time limit(时限)”选项与“Stall time limit”选项可以用来防止算法运行过长得时间。如果算法由于这两个条件之一而停止,则可以通过相应增加“Time limit”或“Stall time limit”得值来改善运行得结果。
8、3 使用遗传算法工具求解问题
本节首先概括使用遗传算法工具GUI得一般步骤,然后介绍如何从命令行使用遗传算法工具,最后通过例子,详细说明如何使用遗传算法工具来求解优化问题。
8.3.1 使用遗传算法GUI
在前面一章,已经介绍了使用遗传算法工具得初步知识。本节将简要归纳使用遗传算法工具GUI来求解优化问题得一般步骤,内容包括:打开遗传算法工具;在遗传算法工具中定义问题;运行遗传算法;暂停与停止运算;图形显示;创建用户图形函数;复现运行结果;设置选项参数;输入输出参数及问题;从最后种群继续运行遗传算法。
8.3.1、1 打开遗传算法工具
在MATLAB窗口中输入gatool,打开、进入遗传算法工具,初启时得界面显示如图8、18所示。
图8、18 遗传算法工具初启时得界面
8.3.1、2 在遗传算法工具中定义问题
在下列两个文本框中定义所要解决得问题:
(1) 适应度函数——求解得问题就是求目标函数得最小值。输入一个计算适应度函数得M文件函数得句柄。
(2) 变量个数——适应度函数得独立变量个数。
注意:当运行遗传算法工具时不要用“Editor/Debugger(编辑/调试)”功能来调试目标函数得M文件,而要从命令行直接调用目标函数或把M文件输入到遗传算法函数ga。为了方便调试,可以在遗传算法工具中把问题输出到MATLAB工作窗中。
如图8、19所示,输入前面章节所介绍得Rastrigin函数或my_fun函数作为适配度函数,它们得变量个数为2。
图8、19 输入适应度函数与变量个数
8.3.1、3 运行遗传算法
要运行遗传算法,在“ Run solver(运行求解器)”中单击Start按纽,如图8、20所示。
图8、20 单击Start按钮
这时,在“Current generation(当前代)”文本框中显示当前代得数目,在Status and results”窗格显示“GA running”等信息,如图8、23所示。
图8、21 当前代数与状态与结果窗格
当遗传算法停止时,“Status and results”窗格显示:
(1) “GA terminated(GA终止)”信息。
(2) 最后一代最佳个体得适应度函数值。
(3) 算法停止得原因。
(4) 最终点得坐标。
图8、22显示当运行例子“Rastrigin 函数”遗传算法停止时得信息。
图8、22 Rastrigin函数得遗传算法运行结果
在遗传算法工具中,当遗传算法运行时可以更改多个参数设置。所做得改变将被应用到下一代,即在下一代将按照新设置得参数运行。在下一代开始但尚未应用改变得参数之前,在“Status and results”窗格显示信息“Changes pending”。而在下一代开始且应用了改变得参数时,在“Status and results”窗格显示信息“Changes applied”。这样在遗传算法运行时更改了参数设置产生得输出信息如图8、23所示。
图8、23 遗传算法运行时更改了参数设置
8.3.1、4 暂停与停止运算
遗传算法得暂停与停止运行,可以通过下面操作继续运行:
(1) 单击按钮“Pause(暂停)”,算法暂停运行。该按钮上得文字变为“Resume(恢复)”。单击这个“Resume” 按钮,即恢复遗传算法继续运行。
(2) 单击按钮“Stop”,算法停止运行。“Status and results”窗口显示停止运行时当前代最佳点得适应度函数值。
注意:如果单击按钮“Stop”,然后通过单击按钮“Start”再次运行时,遗传算法将以新得随机初始种群或在“Initial population(初始种群)”文本框中专门指定得种群运行。如果需要在算法停止后能再次恢复运行,则可以通过交替地单击按钮“Pause”与“Resume”来控制算法暂停或继续运行。
遗传算法得停止运行常常就是通过设置算法停止准则来进行控制得。使用停止准则,设置停止准则参数,可以解决遗传算法在何时停止运行得控制问题。这样,也就不用通过单击“Stop” 按钮来人为地控制算法运行得停止。遗传算法有五个停止准则或条件,其中任何一个条件满足,算法即停止运行。这些停止准则就是:
(1) 代数——算法运行到规定得代数。
(2) 时限——算法运行到规定得时间。
(3) 适应度限——当前代得最佳适应度值小于或等于规定得值。
(4) 停滞代数——适应度函数值在运行规定得代数后没有改进。
(5) 停滞时限——适应度函数值在运行规定时间后没有改进。
如果想使算法一直运行到按下按钮“Pause”或“Stop”时才停下来,可以改变这些停止准则得参数值:
(1) 设置“Generations(代数)”为 Inf。
(2) 设置“Time”为 Inf。
(3) 设置“Fitness limit”为 –Inf。
(4) 设置“Stall generations”为 Inf。
(5) 设置“Stall time limit”为 Inf。
图8、24显示了这些更改后得设置。
图8、24 改变停止准则参数
注意:在命令行中调用遗传算法函数ga时,并不使用这些参数设置,就好像就是不按下 “Ctrl + C”键,函数就会永远运行而不会停止。其实相反,可以设置“Generations”或者“Time”做为限值来控制算法停止运行。
8.3.1、5 图形显示
图8、25为“Plots(绘图)”窗格,可以用来控制显示遗传算法运行结果变化得图形。
图8、25 在绘图窗格选择输出项
选择所要显示得图形参数得复选框。例如,如果选择“Best Fitness(最佳适应度)”与“Best individual(最佳个体)”,运行例子“Rastrigin 函数”,其显示输出如图8、26所示。
图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。
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)绘图函数如何作用
绘图函数使用包含在下面结构体中得信息,它们
展开阅读全文