第八章 使用MATLAB遗传算法工具

第八章 使用MATLAB遗传算法工具
第八章 使用MATLAB遗传算法工具

第八章使用MATLAB遗传算法工具

最新发布的MA TLAB 7.0 Release 14已经包含了一个专门设计的遗传算法与直接搜索工具箱(Genetic Algorithm and Direct Search Toolbox,GADS)。使用遗传算法与直接搜索工具箱,可以扩展MATLAB及其优化工具箱在处理优化问题方面的能力,可以处理传统的优化技术难以解决的问题,包括那些难以定义或不便于数学建模的问题,可以解决目标函数较复杂的问题,比如目标函数不连续、或具有高度非线性、随机性以及目标函数没有导数的情况。

本章8.1节首先介绍这个遗传算法与直接搜索工具箱,其余各节分别介绍该工具箱中的遗传算法工具及其使用方法。

8.1 遗传算法与直接搜索工具箱概述

本节介绍MATLAB的GADS(遗传算法与直接搜索)工具箱的特点、图形用户界面及运行要求,解释如何编写待优化函数的M文件,且通过举例加以阐明。

8.1.1 工具箱的特点

GADS工具箱是一系列函数的集合,它们扩展了优化工具箱和MA TLAB数值计算环境的性能。遗传算法与直接搜索工具箱包含了要使用遗传算法和直接搜索算法来求解优化问题的一些例程。这些算法使我们能够求解那些标准优化工具箱范围之外的各种优化问题。所有工具箱函数都是MATLAB的M文件,这些文件由实现特定优化算法的MATLAB语句所写成。

使用语句

type function_name

就可以看到这些函数的MATLAB代码。我们也可以通过编写自己的M文件来实现来扩展遗传算法和直接搜索工具箱的性能,也可以将该工具箱与MATLAB的其他工具箱或Simulink结合使用,来求解优化问题。

工具箱函数可以通过图形界面或MA TLAB命令行来访问,它们是用MATLAB语言编写的,对用户开放,因此可以查看算法、修改源代码或生成用户函数。

遗传算法与直接搜索工具箱可以帮助我们求解那些不易用传统方法解决的问题,譬如表查找问题等。

遗传算法与直接搜索工具箱有一个精心设计的图形用户界面,可以帮助我们直观、方便、快速地求解最优化问题。

8.1.1.1 功能特点

遗传算法与直接搜索工具箱的功能特点如下:

(1)图形用户界面和命令行函数可用来快速地描述问题、设置算法选项以及监控进程。

(2)具有多个选项的遗传算法工具可用于问题创建、适应度计算、选择、交叉和变异。

(3)直接搜索工具实现了一种模式搜索方法,其选项可用于定义网格尺寸、表决方法和搜索方法。

(4)遗传算法与直接搜索工具箱函数可与MATLAB的优化工具箱或其他的MATLAB程序结合使用。

(5)支持自动的M代码生成。

8.1.1.2 图形用户界面和命令行函数

133

遗传算法工具函数可以通过命令行和图形用户界面来使用遗传算法。直接搜索工具函数也可以通过命令行和图形用户界面来进行访问。图形用户界面可用来快速地定义问题、设置算法选项、对优化问题进行详细定义。

遗传算法与直接搜索工具箱还同时提供了用于优化管理、性能监控及终止准则定义的工具,同时还提供大量标准算法选项。

在优化运行的过程中,可以通过修改选项来细化最优解,更新性能结果。用户也可以提供自己的算法选项来定制工具箱。

8.1.1.3 使用其他函数和求解器

遗传算法与直接搜索工具箱与MATLAB及优化工具箱是紧密结合在一起的。用户可以用遗传算法或直接搜索算法来寻找最佳起始点,然后利用优化工具箱或用MA TLAB程序来进一步寻找最优解。通过结合不同的算法,可以充分地发挥MA TLAB 和工具箱的功能以提高求解的质量。对于某些特定问题,使用这种方法还可以得到全局(最优)解。

8.1.1.4 显示、监控和输出结果

遗传算法与直接搜索工具箱还包括一系列绘图函数用来可视化优化结果。这些可视化功能直观地显示了优化的过程,并且允许在执行过程中进行修改。

工具箱还包括一系列绘图函数用来可视化优化结果。这些可视化功能直观地显示了优化的过程,并且允许在执行过程中进行修改。该工具箱还提供了一些特殊绘图函数,它们不仅适用于遗传算法,还适用于直接搜索算法。适用于遗传算法的函数包括函数值、适应度值和函数估计。适用于直接搜索算法的函数包括函数值、分值直方图、系谱、适应度值、网格尺寸和函数估计。这些函数可以将多个绘图一并显示,可直观方便地选取最优曲线。另外,用户也可以添加自己的绘图函数。

使用输出函数可以将结果写入文件,产生用户自己的终止准则,也可以写入用户自己的图形界面来运行工具箱求解器。除此之外,还可以将问题的算法选项导出,以便日后再将它们导入到图形界面中去。

8.1.1.5 所需的产品支持

遗传算法与直接搜索工具箱作为其他优化方法的补充,可以用来寻找最佳起始点,然后可以再通过使用传统的优化技术来进一步寻找最优解。

工具箱需要如下产品支持:(1) MA TLAB。(2) 优化工具箱。

8.1.1.6 相关产品

与遗传算法与直接搜索工具箱相关的产品有:

(1)统计工具箱——应用统计算法和概率模式。

(2)神经网络工具箱——设计和仿真神经网络。

(3)模糊逻辑工具箱——设计和仿真基于模糊逻辑的系统。

(4)金融工具箱——分析金融数据和开发金融算法。

8.1.1.7 所需的系统及平台

遗传算法和直接搜索工具箱对于对于运行环境、支持平台和系统的需求,可随时通过访问网站https://www.360docs.net/doc/b21312065.html,/products/gads了解最新发布的信息。

这里介绍的MATLAB 7.0 Release 14所需的最低配置是:Windows系列操作系统,Pentium III 500 CPU、64MB RAM,空闲硬盘空间600MB以上。

8.1.2 编写待优化函数的M文件

134

135

为了使用遗传算法和直接搜索工具箱,首先必须编写一个M 文件,来确定想要优化的函数。这个M 文件应该接受一个行向量,并且返回一个标量。行向量的长度就是目标函数中独立变量的个数。本节将通过实例解释如何编写这种M 文件。

8.1.2.1 编写M 文件举例

下面的例子展示了如何为一个想要优化的函数编写M 文件。假定我们想要计算下面函数的最小值:

2212112122(,)266f x x x x x x x x =-++-

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 最大化与最小化

遗传算法和直接搜索工具箱中的优化函数总是使目标函数或适应度函数最小化。也就是说,它们求解如下形式的问题:

min imize ()x

f x 如果我们想要求出函数f (x )的最大值,可以转而求取函数

g (x )=-f (x )的最小值,因为函数g (x )最小值出现的地方与函数f (x )最大值出现的地方相同。

例如,假定想要求前面所描述的函数2212112122(,)266f x x x x x x x x =-++-的最大值,这时,

我们应当编写一个M 文件来计算,求函数

2212112122()(,)(266)g x f x x x x x x x x =-=--++-

的最小值。

8.1.2.3 自动代码生成

遗传算法与直接搜索工具箱提供了自动代码生成特性,可以自动生成求解优化问题所需要的M 文件。例如,图8.1所示的就是使用遗传算法工具的自动代码生成特性所产生的M 文件。

另外,图形用户界面所输出的优化结果可以作为对来自命令行调用代码的一种解释,这些代码还用于使例程和保护工作自动化。

136

图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所示。

137

138

图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 函数

139

具有两个独立变量的Rastrigin 函数定义为

221212()2010(cos 2cos 2)Ras x x x x x ππ=++-+

Rastrigin 函数的图形如图8.3所示。

工具箱包含一个M 文件,即rastriginsfcn.m ,是用来计算Rastrigin 函数值的。

图8.3 Rastrigin 函数图形

如图8.3所示,Rastrigin 函数有许多局部最小值——在图上显示为“谷底(valleys )”。然而,该函数只有一个全局最小值,出现在x-y 平面上的点[0,0]处,正如图中竖直线指示的那样,函数的值在那里是0。在任何不同于[0,0]的局部最小点处,Rastrigin 函数的值均大于0。局部最小处距原点越远,该点处Rastrigin 函数的值越大。

Rastrigin 函数之所以最常用来测试遗传算法,是因为它有许多局部最小点,使得用标准的、基于梯度的查找全局最小的方法十分困难。

图8.4所示是Rastrigin 函数的轮廓线,它显示出最大最小交替变化的情形。

全局最小点[0,0]

局部最小点

局部最小点

全局最小点[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)”按钮,可以使算法临时暂停一下。当这样做的时候,该按钮的名字变为

140

141

“Resume (恢复)”。为了从暂停处恢复算法的运行,可单击这个“Resume ”按钮。

当算法完成时,“Status and results ”窗格出现如图8.7所示的情形。

图8.7 状态与结果显示

“Status and results ”窗格显示下列信息: (1) 算法终止时适应度函数的最终值:

Fitness function value: 0.0067749206244585025

注意:所显示的值非常接近于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所示。

142

143

图8.10 绘图属性编辑器

(2) 点击Y 表项。

(3) 在“Scale (刻度)”窗格,选择“Log (对数)”。

绘制的图形如图8.11所示。 最佳值0.0067796 平均值0.014788

144

图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 个体

一个个体是可以施加适应度函数的任意一点。一个个体的适应度函数值就是它的得分或评价。例如,如果适应度函数是

222123123(,,)(21)(34)(2)f x x x x x x =++++-

则向量(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 算法的停止条件”一节。

145

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表示了这三个类型的子辈。

146

147

图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次时的种群的图形。

148

149

图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 打开遗传算法工具

在MA TLAB窗口中输入gatool,打开、进入遗传算法工具,初启时的界面显示如图8.18所示。

150

图8.18 遗传算法工具初启时的界面

8.3.1.2 在遗传算法工具中定义问题

在下列两个文本框中定义所要解决的问题:

(1) 适应度函数——求解的问题是求目标函数的最小值。输入一个计算适应度函数的M文件函数的句柄。

(2) 变量个数——适应度函数的独立变量个数。

注意:当运行遗传算法工具时不要用“Editor/Debugger(编辑/调试)”功能来调试目标函数的M文件,而要从命令行直接调用目标函数或把M文件输入到遗传算法函数ga。为了方便调试,可以在遗传算法工具中把问题输出到MATLAB工作窗中。

如图8.19所示,输入前面章节所介绍的Rastrigin函数或my_fun函数作为适配度函数,它们

的变量个数为2。

8.3.1.3 运行遗传算法

151

要运行遗传算法,在“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”。这样在遗传算法运行时更改了参数

152

遗传算法MATLAB完整代码(不用工具箱)

遗传算法解决简单问题 %主程序:用遗传算法求解y=200*exp(-0.05*x).*sin(x)在区间[-2,2]上的最大值clc; clear all; close all; global BitLength global boundsbegin global boundsend bounds=[-2,2]; precision=0.0001; boundsbegin=bounds(:,1); boundsend=bounds(:,2); %计算如果满足求解精度至少需要多长的染色体 BitLength=ceil(log2((boundsend-boundsbegin)'./precision)); popsize=50; %初始种群大小 Generationmax=12; %最大代数 pcrossover=0.90; %交配概率 pmutation=0.09; %变异概率 %产生初始种群 population=round(rand(popsize,BitLength)); %计算适应度,返回适应度Fitvalue和累计概率cumsump [Fitvalue,cumsump]=fitnessfun(population); Generation=1; while Generation

MATLAB课程遗传算法实验报告及源代码

硕士生考查课程考试试卷 考试科目: 考生姓名:考生学号: 学院:专业: 考生成绩: 任课老师(签名) 考试日期:年月日午时至时

《MATLAB 教程》试题: A 、利用MATLA B 设计遗传算法程序,寻找下图11个端点最短路径,其中没有连接端点表示没有路径。要求设计遗传算法对该问题求解。 a e h k B 、设计遗传算法求解f (x)极小值,具体表达式如下: 321231(,,)5.12 5.12,1,2,3i i i f x x x x x i =?=???-≤≤=? ∑ 要求必须使用m 函数方式设计程序。 C 、利用MATLAB 编程实现:三名商人各带一个随从乘船渡河,一只小船只能容纳二人,由他们自己划行,随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货,但是如何乘船渡河的大权掌握在商人手中,商人们怎样才能安全渡河? D 、结合自己的研究方向选择合适的问题,利用MATLAB 进行实验。 以上四题任选一题进行实验,并写出实验报告。

选择题目: B 、设计遗传算法求解f (x)极小值,具体表达式如下: 321231(,,)5.12 5.12,1,2,3i i i f x x x x x i =?=???-≤≤=? ∑ 要求必须使用m 函数方式设计程序。 一、问题分析(10分) 这是一个简单的三元函数求最小值的函数优化问题,可以利用遗传算法来指导性搜索最小值。实验要求必须以matlab 为工具,利用遗传算法对问题进行求解。 在本实验中,要求我们用M 函数自行设计遗传算法,通过遗传算法基本原理,选择、交叉、变异等操作进行指导性邻域搜索,得到最优解。 二、实验原理与数学模型(20分) (1)试验原理: 用遗传算法求解函数优化问题,遗传算法是模拟生物在自然环境下的遗传和进化过程而形成的一种自适应全局优化概率搜索方法。其采纳了自然进化模型,从代表问题可能潜在解集的一个种群开始,种群由经过基因编码的一定数目的个体组成。每个个体实际上是染色体带有特征的实体;初始种群产生后,按照适者生存和优胜劣汰的原理,逐代演化产生出越来越好的解:在每一代,概据问题域中个体的适应度大小挑选个体;并借助遗传算子进行组合交叉和主客观变异,产生出代表新的解集的种群。这一过程循环执行,直到满足优化准则为止。最后,末代个体经解码,生成近似最优解。基于种群进化机制的遗传算法如同自然界进化一样,后生代种群比前生代更加适应于环境,通过逐代进化,逼近最优解。 遗传算法是一种现代智能算法,实际上它的功能十分强大,能够用于求解一些难以用常规数学手段进行求解的问题,尤其适用于求解多目标、多约束,且目标函数形式非常复杂的优化问题。但是遗传算法也有一些缺点,最为关键的一点,即没有任何理论能够证明遗传算法一定能够找到最优解,算法主要是根据概率论的思想来寻找最优解。因此,遗传算法所得到的解只是一个近似解,而不一定是最优解。 (2)数学模型 对于求解该问题遗传算法的构造过程: (1)确定决策变量和约束条件;

基于遗传算法的matlab源代码

function youhuafun D=code; N=50;%Tunable maxgen=50;%Tunable crossrate=0.5;%Tunable muterate=0.08;%Tunable generation=1; num=length(D); fatherrand=randint(num,N,3); score=zeros(maxgen,N); while generation<=maxgen ind=randperm(N-2)+2;%随机配对交叉 A=fatherrand(:,ind(1:(N-2)/2)); B=fatherrand(:,ind((N-2)/2+1:end)); %多点交叉 rnd=rand(num,(N-2)/2); ind=rnd tmp=A(ind); A(ind)=B(ind); B(ind)=tmp; %%两点交叉 %for kk=1:(N-2)/2 %rndtmp=randint(1,1,num)+1; %tmp=A(1:rndtmp,kk); %A(1:rndtmp,kk)=B(1:rndtmp,kk); %B(1:rndtmp,kk)=tmp; %end fatherrand=[fatherrand(:,1:2),A,B]; %变异 rnd=rand(num,N); ind=rnd[m,n]=size(ind); tmp=randint(m,n,2)+1; tmp(:,1:2)=0; fatherrand=tmp+fatherrand; fatherrand=mod(fatherrand,3); %fatherrand(ind)=tmp; %评价、选择 scoreN=scorefun(fatherrand,D);%求得N个个体的评价函数 score(generation,:)=scoreN; [scoreSort,scoreind]=sort(scoreN); sumscore=cumsum(scoreSort); sumscore=sumscore./sumscore(end); childind(1:2)=scoreind(end-1:end); for k=3:N tmprnd=rand; tmpind=tmprnd difind=[0,diff(t mpind)]; if~any(difind) difind(1)=1; end childind(k)=scoreind(logical(difind)); end fatherrand=fatherrand(:,childind); generation=generation+1; end %score maxV=max(score,[],2); minV=11*300-maxV; plot(minV,'*');title('各代的目标函数值'); F4=D(:,4); FF4=F4-fatherrand(:,1); FF4=max(FF4,1); D(:,5)=FF4; save DData D function D=code load youhua.mat %properties F2and F3 F1=A(:,1); F2=A(:,2); F3=A(:,3); if(max(F2)>1450)||(min(F2)<=900) error('DATA property F2exceed it''s range (900,1450]') end %get group property F1of data,according to F2value F4=zeros(size(F1)); for ite=11:-1:1 index=find(F2<=900+ite*50); F4(index)=ite; end D=[F1,F2,F3,F4]; function ScoreN=scorefun(fatherrand,D) F3=D(:,3); F4=D(:,4); N=size(fatherrand,2); FF4=F4*ones(1,N); FF4rnd=FF4-fatherrand; FF4rnd=max(FF4rnd,1); ScoreN=ones(1,N)*300*11; %这里有待优化

遗传算法Matlab程序

% f(x)=11*sin(6x)+7*cos(5x),0<=x<=2*pi; %%初始化参数 L=16;%编码为16位二进制数 N=32;%初始种群规模 M=48;%M个中间体,运用算子选择出M/2对母体,进行交叉;对M个中间体进行变异 T=100;%进化代数 Pc=0.8;%交叉概率 Pm=0.03;%%变异概率 %%将十进制编码成16位的二进制,再将16位的二进制转成格雷码 for i=1:1:N x1(1,i)= rand()*2*pi; x2(1,i)= uint16(x1(1,i)/(2*pi)*65535); grayCode(i,:)=num2gray(x2(1,i),L); end %% 开始遗传算子操作 for t=1:1:T y1=11*sin(6*x1)+7*cos(5*x1); for i=1:1:M/2 [a,b]=min(y1);%找到y1中的最小值a,及其对应的编号b grayCodeNew(i,:)=grayCode(b,:);%将找到的最小数放到grayCodeNew中grayCodeNew(i+M/2,:)=grayCode(b,:);%与上面相同就可以有M/2对格雷码可以作为母体y1(1,b)=inf;%用来排除已找到的最小值 end for i=1:1:M/2 p=unidrnd(L);%生成一个大于零小于L的数,用于下面进行交叉的位置if rand()

遗传算法经典MATLAB代码资料讲解

遗传算法经典学习Matlab代码 遗传算法实例: 也是自己找来的,原代码有少许错误,本人都已更正了,调试运行都通过了的。 对于初学者,尤其是还没有编程经验的非常有用的一个文件 遗传算法实例 % 下面举例说明遗传算法% % 求下列函数的最大值% % f(x)=10*sin(5x)+7*cos(4x) x∈[0,10]% % 将x 的值用一个10位的二值形式表示为二值问题,一个10位的二值数提供的分辨率是每为(10-0)/(2^10-1)≈0.01。% % 将变量域[0,10] 离散化为二值域[0,1023], x=0+10*b/1023, 其 中 b 是[0,1023] 中的一个二值数。% % % %--------------------------------------------------------------------------------------------------------------% %--------------------------------------------------------------------------------------------------------------% % 编程 %----------------------------------------------- % 2.1初始化(编码) % initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二值数的长度),

% 长度大小取决于变量的二进制编码的长度(在本例中取10位)。 %遗传算法子程序 %Name: initpop.m %初始化 function pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength)); % rand随机产生每个单元 为{0,1} 行数为popsize,列数为chromlength的矩阵, % roud对矩阵的每个单元进行圆整。这样产生的初始种群。 % 2.2 计算目标函数值 % 2.2.1 将二进制数转化为十进制数(1) %遗传算法子程序 %Name: decodebinary.m %产生[2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制 function pop2=decodebinary(pop) [px,py]=size(pop); %求pop行和列数 for i=1:py pop1(:,i)=2.^(py-i).*pop(:,i); end pop2=sum(pop1,2); %求pop1的每行之和 % 2.2.2 将二进制编码转化为十进制数(2) % decodechrom.m函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制串的起始位置

MATLAB实验遗传算法与优化设计

实验六 遗传算法与优化设计 一、实验目的 1. 了解遗传算法的基本原理和基本操作(选择、交叉、变异); 2. 学习使用Matlab 中的遗传算法工具箱(gatool)来解决优化设计问题; 二、实验原理及遗传算法工具箱介绍 1. 一个优化设计例子 图1所示是用于传输微波信号的微带线(电极)的横截面结构示意图,上下两根黑条分别 代表上电极和下电极,一般下电极接地,上电极接输入信号,电极之间是介质(如空气,陶瓷等)。微带电极的结构参数如图所示,W 、t 分别是上电极的宽度和厚度,D 是上下电极间距。当微波信号在微带线中传输时,由于趋肤效应,微带线中的电流集中在电极的表面,会产生较大的欧姆损耗。根据微带传输线理论,高频工作状态下(假定信号频率1GHz ),电极的欧姆损耗可以写成(简单起见,不考虑电极厚度造成电极宽度的增加): 图1 微带线横截面结构以及场分布示意图 {} 28.6821ln 5020.942ln 20.942S W R W D D D t D W D D W W t D W W D e D D παπππ=+++-+++?????? ? ??? ??????????? ??????? (1) 其中πρμ0=S R 为金属的表面电阻率,为电阻率。可见电极的结构参数影响着电极损

耗,通过合理设计这些参数可以使电极的欧姆损耗做到最小,这就是所谓的最优化问题或者称为规划设计问题。此处设计变量有3个:W 、D 、t ,它们组成决策向量[W, D ,t ] T ,待优化函数(,,)W D t α称为目标函数。 上述优化设计问题可以抽象为数学描述: ()()min .. 0,1,2,...,j f X s t g X j p ????≤=? (2) 其中()T n x x x X ,...,,21=是决策向量,x 1,…,x n 为n 个设计变量。这是一个单目标的数学规划问题:在一组针对决策变量的约束条件()0,1,...,j g X j p ≤=下,使目标函数最小化(有时 也可能是最大化,此时在目标函数()X f 前添个负号即可)。满足约束条件的解X 称为可行解,所有满足条件的X 组成问题的可行解空间。 2. 遗传算法基本原理和基本操作 遗传算法(Genetic Algorithm, GA)是一种非常实用、高效、鲁棒性强的优化技术,广 泛应用于工程技术的各个领域(如函数优化、机器学习、图像处理、生产调度等)。遗传算法是模拟生物在自然环境中的遗传和进化过程而形成的一种自适应全局优化算法。按照达尔文的进化论,生物在进化过程中“物竞天择”,对自然环境适应度高的物种被保留下来,适应度差的物种而被淘汰。物种通过遗传将这些好的性状复制给下一代,同时也通过种间的交配(交叉)和变异不断产生新的物种以适应环境的变化。从总体水平上看,生物在进化过程中子代总要比其父代优良,因此生物的进化过程其实就是一个不断产生优良物种的过程,这和优化设计问题具有惊人的相似性,从而使得生物的遗传和进化能够被用于实际的优化设计问题。 按照生物学知识,遗传信息基因(Gene)的载体是染色体(Chromosome),染色体中 一定数量的基因按照一定的规律排列(即编码),遗传基因在染色体中的排列位置称为基因

matlab遗传算法工具箱函数及实例讲解

matlab遗传算法工具箱函数及实例讲解 最近研究了一下遗传算法,因为要用遗传算法来求解多元非线性模型。还好用遗传算法的工箱予以实现了,期间也遇到了许多问题。借此与大家分享一下。 首先,我们要熟悉遗传算法的基本原理与运算流程。 基本原理:遗传算法是一种典型的启发式算法,属于非数值算法范畴。它是模拟达尔文的自然选择学说和自然界的生物进化过程的一种计算模型。它是采用简单的编码技术来表示各种复杂的结构,并通过对一组编码表示进行简单的遗传操作和优胜劣汰的自然选择来指导学习和确定搜索的方向。遗传算法的操作对象是一群二进制串(称为染色体、个体),即种群,每一个染色体都对应问题的一个解。从初始种群出发,采用基于适应度函数的选择策略在当前种群中选择个体,使用杂交和变异来产生下一代种群。如此模仿生命的进化进行不断演化,直到满足期望的终止条件。 运算流程: Step 1:对遗传算法的运行参数进行赋值。参数包括种群规模、变量个数、交叉概率、变异概率以及遗传运算的终止进化代数。 Step 2:建立区域描述器。根据轨道交通与常规公交运营协调模型的求解变量的约束条件,设置变量的取值范围。 Step 3:在Step 2的变量取值范围内,随机产生初始群体,代入适应度函数计算其适应度值。 Step 4:执行比例选择算子进行选择操作。 Step 5:按交叉概率对交叉算子执行交叉操作。 Step 6:按变异概率执行离散变异操作。 Step 7:计算Step 6得到局部最优解中每个个体的适应值,并执行最优个体保存策略。 Step 8:判断是否满足遗传运算的终止进化代数,不满足则返回Step 4,满足则输出运算结果。 其次,运用遗传算法工具箱。 运用基于Matlab的遗传算法工具箱非常方便,遗传算法工具箱里包括了我们需要的各种函数库。目前,基于Matlab的遗传算法工具箱也很多,比较流行的有英国设菲尔德大学开发的遗传算法工具箱GATBX、GAOT以及Math Works公司推出的GADS。实际上,GADS 就是大家所看到的Matlab中自带的工具箱。我在网上看到有问为什么遗传算法函数不能调用的问题,其实,主要就是因为用的工具箱不同。因为,有些人用的是GATBX带有的函数,但MATLAB自带的遗传算法工具箱是GADS,GADS当然没有GATBX里的函数,因此运行程序时会报错,当你用MATLAB来编写遗传算法代码时,要根据你所安装的工具箱来编写代码。

遗传算法的MATLAB程序实例

遗传算法的程序实例 如求下列函数的最大值 f(x)=10*sin(5x)+7*cos(4x) x∈[0,10] 一、初始化(编码) initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二值数的长度), 长度大小取决于变量的二进制编码的长度(在本例中取10位)。 代码: %Name: initpop.m %初始化 function pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength)); % rand随机产生每个单元为 {0,1} 行数为popsize,列数为chromlength的矩阵, % roud对矩阵的每个单元进行圆整。这样产生的初始种群。 二、计算目标函数值 1、将二进制数转化为十进制数(1) 代码: %Name: decodebinary.m %产生 [2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制 function pop2=decodebinary(pop) [px,py]=size(pop); %求pop行和例数 for i=1:py pop1(:,i)=2.^(py-1).*pop(:,i); py=py-1; end pop2=sum(pop1,2); %求pop1的每行之和 2、将二进制编码转化为十进制数(2) decodechrom.m函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制串的起始位置。(对于多个变量而言,如有两个变量,采用20为表示,每个变量10为,则第一个变量从1开始,另一个变量从11开始。本例为1),参数1ength表示所截取的长度(本例为10)。 代码: %Name: decodechrom.m %将二进制编码转换成十进制 function pop2=decodechrom(pop,spoint,length) pop1=pop(:,spoint:spoint+length-1); pop2=decodebinary(pop1); 3、计算目标函数值 calobjvalue.m函数的功能是实现目标函数的计算,其公式采用本文示例仿真,可根据不同优化问题予以修改。

遗传算法的原理及MATLAB程序实现

1 遗传算法的原理 1.1 遗传算法的基本思想 遗传算法(genetic algorithms,GA)是一种基于自然选择和基因遗传学原理,借鉴了生物进化优胜劣汰的自然选择机理和生物界繁衍进化的基因重组、突变的遗传机制的全局自适应概率搜索算法。 遗传算法是从一组随机产生的初始解(种群)开始,这个种群由经过基因编码的一定数量的个体组成,每个个体实际上是染色体带有特征的实体。染色体作为遗传物质的主要载体,其内部表现(即基因型)是某种基因组合,它决定了个体的外部表现。因此,从一开始就需要实现从表现型到基因型的映射,即编码工作。初始种群产生后,按照优胜劣汰的原理,逐代演化产生出越来越好的近似解。在每一代,根据问题域中个体的适应度大小选择个体,并借助于自然遗传学的遗传算子进行组合交叉和变异,产生出代表新的解集的种群。这个过程将导致种群像自然进化一样,后代种群比前代更加适应环境,末代种群中的最优个体经过解码,可以作为问题近似最优解。 计算开始时,将实际问题的变量进行编码形成染色体,随机产生一定数目的个体,即种群,并计算每个个体的适应度值,然后通过终止条件判断该初始解是否是最优解,若是则停止计算输出结果,若不是则通过遗传算子操作产生新的一代种群,回到计算群体中每个个体的适应度值的部分,然后转到终止条件判断。这一过程循环执行,直到满足优化准则,最终产生问题的最优解。图1-1给出了遗传算法的基本过程。 1.2 遗传算法的特点 1.2.1 遗传算法的优点 遗传算法具有十分强的鲁棒性,比起传统优化方法,遗传算法有如下优点: 1. 遗传算法以控制变量的编码作为运算对象。传统的优化算法往往直接利用控制变量的实际值的本身来进行优化运算,但遗传算法不是直接以控制变量的值,而是以控制变量的特定形式的编码为运算对象。这种对控制变量的编码处理方式,可以模仿自然界中生物的遗传和进化等机理,也使得我们可以方便地处理各种变量和应用遗传操作算子。 2. 遗传算法具有内在的本质并行性。它的并行性表现在两个方面,一是遗传

基于遗传算法的BP神经网络MATLAB代码

用遗传算法优化BP神经网络的Matlab编程实例(转) 由于BP网络的权值优化是一个无约束优化问题,而且权值要采用实数编码,所以直接利用Matlab遗传算法工具箱。以下贴出的代码是为一个19输入变量,1个输出变量情况下的非线性回归而设计的,如果要应用于其它情况,只需改动编解码函数即可。 程序一:GA训练BP权值的主函数 function net=GABPNET(XX,YY) %-------------------------------------------------------------------------- % GABPNET.m % 使用遗传算法对BP网络权值阈值进行优化,再用BP算法训练网络 %-------------------------------------------------------------------------- %数据归一化预处理 nntwarn off XX=[1:19;2:20;3:21;4:22]'; YY=[1:4]; XX=premnmx(XX); YY=premnmx(YY); YY %创建网络 net=newff(minmax(XX),[19,25,1],{'tansig','tansig','purelin'},'tra inlm'); %下面使用遗传算法对网络进行优化 P=XX; T=YY; R=size(P,1); S2=size(T,1); S1=25;%隐含层节点数 S=R*S1+S1*S2+S1+S2;%遗传算法编码长度 aa=ones(S,1)*[-1,1]; popu=50;%种群规模 save data2 XX YY % 是将 xx,yy 二个变数的数值存入 data2 这个MAT-file,initPpp=initializega(popu,aa,'gabpEval');%初始化种群 gen=100;%遗传代数

matlab自带优化工具箱遗传算法中文解释

matlab自带优化工具箱遗传算法中文解释 problem setup and results设置与结果 problem fitness function适应度函数 number of variable变量数 constraints约束 linear inequalities线性不等式,A*x<=b形式,其中A是矩阵,b是向量 linear equalities线性等式,A*x=b形式,其中A是矩阵,b是向量 bounds定义域,lower下限,upper上限,列向量形式,每一个位置对应一个变量 nonlinear constraint function非线性约束,用户定义,非线性等式必须写成c=0形式,不等式必须写成c<=0形式 integer variable indices整型变量标记约束,使用该项时Aeq和beq必须为空,所有非线性约束函数必须返回一个空值,种群类型必须是实数编码 run solver and view results求解 use random states from previous run使用前次的状态运行,完全重复前次运行的过程和结果 population population type编码类型 double vector实数编码,采用双精度 bitstring二进制编码对于生成函数和变异函数,只能选用uniform和custom,对于杂交函数,只能使用 scattered singlepoint,twopoint或custom不能使用hybrid function和nonlinear constraint function custom 自定义 population size:种群大小 creation function:生成函数,产生初始种群 constraint dependent:约束相关,无约束时为uniform,有约束时为feasible population uniform:均匀分布 feasible population :自适应种群,生成能够满足约束的种群 initial population:初始种群,不指定则使用creation function生成,可以指定少于种群数量的种群,由creation function完成剩余的 initial scores:初始值,如果不指定,则有计算机计算适应度函数作为初始值,对于整型约束不可用,使用向量表示 initial range:初始范围,使用向量矩阵表示,第一行表示范围的下限,第二行表示上限 fitness scaling:适应度尺度 rank:等级。将适应度排序,然后编号 proportional:按比例 top:按比例选取种群中最高适应度的个体,这些个体有等比例的机会繁衍,其余的个体被淘汰 shift linear:线性转换

遗传算法的MATLAB程序实例讲解学习

遗传算法的M A T L A B 程序实例

遗传算法的程序实例 如求下列函数的最大值 f(x)=10*sin(5x)+7*cos(4x) x∈[0,10] 一、初始化(编码) initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二值数的长度), 长度大小取决于变量的二进制编码的长度(在本例中取10位)。 代码: %Name: initpop.m %初始化 function pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength)); % rand随机产生每个单元为 {0,1} 行数为popsize,列数为chromlength的矩阵, % roud对矩阵的每个单元进行圆整。这样产生的初始种群。 二、计算目标函数值 1、将二进制数转化为十进制数(1) 代码: %Name: decodebinary.m %产生 [2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制 function pop2=decodebinary(pop) [px,py]=size(pop); %求pop行和例数 for i=1:py pop1(:,i)=2.^(py-1).*pop(:,i); py=py-1; end pop2=sum(pop1,2); %求pop1的每行之和 2、将二进制编码转化为十进制数(2) decodechrom.m函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制串的起始位置。(对于多个变量而言,如有两个变量,采用20为表示,每个变量10为,则第一个变量从1开始,另一个变量从11开始。本例为1),参数1ength表示所截取的长度(本例为10)。 代码: %Name: decodechrom.m %将二进制编码转换成十进制 function pop2=decodechrom(pop,spoint,length) pop1=pop(:,spoint:spoint+length-1); pop2=decodebinary(pop1); 3、计算目标函数值 calobjvalue.m函数的功能是实现目标函数的计算,其公式采用本文示例仿真,可根据不同优化问题予以修改。

matlab工具箱遗传算法使用方法

简单的遗传算法可以使用Matlab自带的遗传算法工具箱,但是要从Matlab2010版本之后才会自带这个工具箱,且调用命令也有变化,分别是gatool和optimtool。GUI界面如下图所示: 1、problem setup and results设置与结果 (1)Solver:求解程序,选择要用的求解程序(遗传算法,遗传算法多目标等) (2)problem: 1)fitness function适应度函数,求最小,这里的使用度函数要自己编写,书写格式是“@函数名”。 2)number of variable变量数,必须是整数,即,使用这个GUI界面的适应度函数的变量必须是[1*n]的向量,而不能是[m*n]的矩阵。 3)constraints约束 4)linear inequalities线性不等式,A*x<=b形式,其中A是矩阵,b是向量 5)linear equalities线性等式,A*x=b形式,其中A是矩阵,b是向量 6)bounds定义域,lower下限,upper上限,列向量形式,每一个位置对应一个变量 7)nonlinear constraint function非线性约束,用户定义,非线性等式必须写成c=0形式,不等式必须写成c<=0形式 8)integer variable indices整型变量标记约束,使用该项时Aeq和beq必须为空,所有非线性约束函数必须返回一个空值,种群类型必须是实数编码 举例,若是想让第一个、第三个、第五个变量保持是整数的话,则直接在此处填写[1 3 5] 9)run solver and view results求解 use random states from previous run使用前次的状态运行,完全重复前次运行的过程和结果 2、population (1)population type编码类型 1)double vector实数编码,采用双精度。整数规划的种群类型必须是实数编码。 2)bitstring二进制编码。对于生成函数和变异函数,只能选用uniform和custom,对于杂交函数,只能使用scattered singlepoint,twopoint或custom不能使用hybrid function和

简单的遗传算法MATLAB实现

遗传算法是对达尔文生物进化理论的简单模拟,其遵循“适者生存”、“优胜略汰”的原理。遗传算法模拟一个人工种群的进化过程,并且通过选择、杂交以及变异等机制,种群经过若干代以后,总是达到最优(或近最优)的状态。 自从遗传算法被提出以来,其得到了广泛的应用,特别是在函数优化、生产调度、模式识别、神经网络、自适应控制等领域,遗传算法更是发挥了重大的作用,大大提高了问题求解的效率。遗传算法也是当前“软计算”领域的重要研究课题。 本文首先结合MATLAB对遗传算法实现过程进行详细的分析,然后通过1个实际的函数优化案例对其应用进行探讨。 1. 遗传算法实现过程 现实生活中很多问题都可以转换为函数优化问题,所以本文将以函数优化问题作为背景,对GA的实现过程进行探讨。大部分函数优化问题都可以写成求最大值或者最小值的形式,为了不是一般性,我们可以将所有求最优值的情况都转换成求最大值的形式,例如,求函数f(x)的最大值,

若是求函数f(x)的最小值,可以将其转换成 g(x)=-f(x),然后求g(x)的最大值, 这里x可以是一个变量,也可是是一个由k个变量组成的向量,x=(x1, x2, …, x k)。每个x i,i=1,2,…,k, 其定义域为D i,D i=[a i, b i]。 一般规定f(x)在其定义域内只取正值,若不满足,可以将其转换成以下形式, 其中C是一个正常数。 1.1 编码与解码 要实现遗传算法首先需要弄清楚如何对求解问题进行编码和解码。对于函数优化问题,一般来说,有两种编码方式,一是实数编码,一是二进制编码,两者各有优缺点,二进制编码具有稳定性高、种群多样性大等优点,但是需要的存储空间大,需要解码过程并且难以理解;而实数编码直接用实数表示基因,容易理解并且不要解码过程,但是容易过早收敛,从而陷入局部最优。本文以最常用的二进制编码为例,说明遗传编码的过程。

遗传算法求函数极大值(matlab实现)

遗传算法求函数最大值(matlab实现) 一、题目: 寻找f(x)=x2,,当x在0~31区间的最大值。 二、源程序: %遗传算法求解函数最大值 %本程序用到了英国谢菲尔德大学(Sheffield)开发的工具箱GATBX,该工具箱比matlab自带的GATOOL使用更加灵活,但在编写程序方面稍微复杂一些 Close all; Clear all; figure(1); fplot('variable*variable',[0,31]); %画出函数曲线 %以下定义遗传算法参数 GTSM=40; %定义个体数目 ZDYCDS=20; %定义最大遗传代数 EJZWS=5; %定义变量的二进制位数 DG=0.9; %定义代沟 trace=zeros(2, ZDYCDS); %最优结果的初始值

FieldD=[5;-1;2;1;0;1;1]; %定义区域描述器的各个参数%以下为遗传算法基本操作部分,包括创建初始种群、复制、交叉和变异 Chrom=crtbp(GTSM, EJZWS); %创建初始种群,即生成给定 规模的二进制种群和结构gen=0; %定义代数计数器初始值variable=bs2rv(Chrom, FieldD); %对生成的初始种群进行十进制转换 ObjV=variable*variable; %计算目标函数值f(x)=x2 while gen

使用MATLAB遗传算法工具实例(详细) (1)【精品毕业设计】(完整版)

最新发布的MA TLAB 7.0 Release 14已经包含了一个专门设计的遗传算法与直接搜索工具箱(Genetic Algorithm and Direct Search Toolbox,GADS)。使用遗传算法与直接搜索工具箱,可以扩展MATLAB及其优化工具箱在处理优化问题方面的能力,可以处理传统的优化技术难以解决的问题,包括那些难以定义或不便于数学建模的问题,可以解决目标函数较复杂的问题,比如目标函数不连续、或具有高度非线性、随机性以及目标函数没有导数的情况。 本章8.1节首先介绍这个遗传算法与直接搜索工具箱,其余各节分别介绍该工具箱中的遗传算法工具及其使用方法。 8.1 遗传算法与直接搜索工具箱概述 本节介绍MATLAB的GADS(遗传算法与直接搜索)工具箱的特点、图形用户界面及运行要求,解释如何编写待优化函数的M文件,且通过举例加以阐明。 8.1.1 工具箱的特点 GADS工具箱是一系列函数的集合,它们扩展了优化工具箱和MA TLAB数值计算环境的性能。遗传算法与直接搜索工具箱包含了要使用遗传算法和直接搜索算法来求解优化问题的一些例程。这些算法使我们能够求解那些标准优化工具箱范围之外的各种优化问题。所有工具箱函数都是MATLAB的M文件,这些文件由实现特定优化算法的MATLAB语句所写成。 使用语句 type function_name 就可以看到这些函数的MATLAB代码。我们也可以通过编写自己的M文件来实现来扩展遗传算法和直接搜索工具箱的性能,也可以将该工具箱与MATLAB的其他工具箱或Simulink结合使用,来求解优化问题。 工具箱函数可以通过图形界面或MA TLAB命令行来访问,它们是用MATLAB语言编写的,对用户开放,因此可以查看算法、修改源代码或生成用户函数。 遗传算法与直接搜索工具箱可以帮助我们求解那些不易用传统方法解决的问题,譬如表查找问题等。 遗传算法与直接搜索工具箱有一个精心设计的图形用户界面,可以帮助我们直观、方便、快速地求解最优化问题。 8.1.1.1 功能特点 遗传算法与直接搜索工具箱的功能特点如下: 图形用户界面和命令行函数可用来快速地描述问题、设置算法选项以及监控进程。 具有多个选项的遗传算法工具可用于问题创建、适应度计算、选择、交叉和变异。 直接搜索工具实现了一种模式搜索方法,其选项可用于定义网格尺寸、表决方法和搜索方法。 遗传算法与直接搜索工具箱函数可与MATLAB的优化工具箱或其他的MATLAB程序结合使用。 支持自动的M代码生成。 8.1.1.2 图形用户界面和命令行函数 遗传算法工具函数可以通过命令行和图形用户界面来使用遗传算法。直接搜索工具函数也可以通过命令行和图形用户界面来进行访问。图形用户界面可用来快速地定义问题、设置算法选项、对优化问题进行详细定义。 133

三个遗传算法matlab程序实例

遗传算法程序(一): 说明: fga.m 为遗传算法的主程序; 采用二进制Gray编码,采用基于轮盘赌法的非线性排名选择, 均匀交叉,变异操作,而且还引入了倒位操作! function [BestPop,Trace]=fga(FUN,LB,UB,eranum,popsize,pCross,pMutation,pInversion,options) % [BestPop,Trace]=fmaxga(FUN,LB,UB,eranum,popsize,pcross,pmutation) % Finds a maximum of a function of several variables. % fmaxga solves problems of the form: % max F(X) subject to: LB <= X <= UB % BestPop - 最优的群体即为最优的染色体群 % Trace - 最佳染色体所对应的目标函数值 % FUN - 目标函数 % LB - 自变量下限 % UB - 自变量上限 % eranum - 种群的代数,取100--1000(默认200) % popsize - 每一代种群的规模;此可取50--200(默认100) % pcross - 交叉概率,一般取0.5--0.85之间较好(默认0.8) % pmutation - 初始变异概率,一般取0.05-0.2之间较好(默认0.1) % pInversion - 倒位概率,一般取0.05-0.3之间较好(默认0.2) % options - 1*2矩阵,options(1)=0二进制编码(默认0),option(1)~=0十进制编 %码,option(2)设定求解精度(默认1e-4) % % ------------------------------------------------------------------------ T1=clock; if nargin<3, error('FMAXGA requires at least three input arguments'); end if nargin==3, eranum=200;popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==4, popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==5, pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==6, pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==7, pInversion=0.15;options=[0 1e-4];end if find((LB-UB)>0) error('数据输入错误,请重新输入(LB

相关文档
最新文档