第五章 遗传算法工具箱函数

第五章 遗传算法工具箱函数
第五章 遗传算法工具箱函数

第五章遗传算法工具箱函数

本章介绍英国设菲尔德大学开发的遗传算法工具箱函数。

由于MATLAB高级语言的通用性,对问题用M文件编码,与此配对的是MA TLAB先进的数据分析、可视化工具、特殊目的的应用领域工具箱和展现给使用者具有研究遗传算法可能性的一致环境。MATLAB遗传算法工具箱为遗传算法从业者和第一次实验遗传算法的人提供了广泛多样的有用函数。

遗传算法工具箱使用MA TLAB矩阵函数为实现广泛领域的遗传算法建立一套通用工具,这个遗传算法工具是用M文件写成的,是命令行形式的函数,能完成遗传算法大部分重要功能的程序的集合。用户可通过这些命令行函数,根据实际分析的需要,编写出功能强大的MATLAB程序。

5.1 工具箱结构

本节给出GA工具箱的主要程序。表5.1为遗传算法工具箱中的各种函数分类表。

表5.1 遗传算法工具箱中函数分类表

5.1.1 种群表示和初始化

种群表示和初始化函数有:crtbase,crtbp,crtrp。

GA工具箱支持二进制、整数和浮点数的基因表示。二进制和整数种群可以使用工具箱中的crtbp建立二进制种群。crtbase是附加的功能,它提供向量描述整数表示。种群的实值可用crtrp进行初始化。在二进制代码和实值之间的变换可使用函数bs2rv,它支持格雷码和对数编码。

5.1.2 适应度计算

适应度函数有:ranking,scaling。

适应度函数用于转换目标函数值,给每一个个体一个非负的价值数。这个工具箱支持Goldberg的偏移法(offsetting)和比率法以及贝克的线性评估算法。另外,ranking函数支持非线性评估。

5.1.3 选择函数

选择函数有:reins,rws,select,sus。

这些函数根据个体的适应度大小在已知种群中选择一定数量的个体,对它的索引返回一个列向量。现在最合适的是轮盘赌选择(即rws函数)和随机遍历抽样(即sus函数)。高级入口函数select为选择程序,特别为多种群的使用提供了一个方便的接口界面。在这种情况下,代沟是必须的,这就是整个种群在每一代中没有被完全复制,reins能使用均匀的随机数或基于适应度的重新插入。

5.1.4 交叉算子

交叉算子函数有:recdis,recint,reclin,recmut,recombin,xovdp,xovdprs,xovmp,xovsh,xovshrs,xovsp,xovsprs。

交叉是通过给定的概率重组一对个体产生后代。单点交叉、两点交叉和洗牌交叉是由xovsp、xovdp、xovsh函数分别完成的。缩小代理交叉函数分别是:xovdprs、xovshrs和xovsprs。通用的多点交叉函数是xovmp,它提供均匀交换的支持。为支持染色体实值表示,离散的、中间的和线性重组分别由函数recdis、recint、reclin完成。函数recmut提供具有突变特征的线性重组。函数recombin是一高级入口函数,对所有交叉操作提供多子群支持入口。

5.1.5 变异算子

变异算子函数有:mut,mutate,mutbga。

二进制和整数变异操作由mut 完成。实值的变异使用育种机函数mutbga 是有效的。Mutate 对变异操作提供一个高级接口。

5.1.6 多子群支持

多子群支持函数:migrate 。

遗传算法工具箱通过高层遗传操作函数migrate 对多子群提供支持,它的一个功能是在子群中交换个体。一个单一种群通过使用工具箱中函数修改数据结构,使其分为许多子种群,这些子种群被保存在连续的数据单元块中。高层函数如select 和reins 可独立地操作子种群,包含在一个数据结构中的每一子种群允许独自向前衍化。基于孤岛或回迁模式,migrate 允许个体在子种群中迁移。

5.2 遗传算法中的通用函数

在这一节,将详细介绍在MATLAB 中用于遗传算法的各种工具箱函数,对每个函数从功能、语法格式、使用说明以及用法举例等方面进行阐述。关于每个函数的适用信息由在线帮助工具提供。

5.2.1 函数 bs2rv

功能:二进制串到实值的转换 格式:Phen = bs2rv(Chrom,FieldD)

详细说明:Phen = bs2rv (Chrom, FieldD),根据译码矩阵FieldD 将二进制串矩阵Chrom 转换为实值向量。返回矩阵Phen 包含对应的种群表现型。

使用格雷编码的二进制染色体表示被推荐作为量化间隔的规则海明距离,可使遗传搜索减少欺骗,设置量化点间刻度的可选方案是选择线性或对数编码从二进制变换到实值。对数刻度用于决策变量的范围不知道,作为大范围参数的边界时,搜索可用较少的位数,以减少GA 的内存需求和计算量。

矩阵FieldD 有如下结构:

??????????

????????????ubin lbin scale code ub lb len 这里矩阵的行组成如下:

len 是包含在Chrom 中每个子串长度,注意sum(len )等于length(Chrom)。 lb 和ub 是行向量,分别指明每个变量使用的下界和上界。 code 是二进制行向量,指明子串是怎样编码的,code (i)=1为标准的二进制编码,code (i)=0则为格雷编码。

scale 是二进制行向量,指明每个子串是否使用对数或算术刻度,scale (i) = 0则为算术,scale (i) = 1则为对数。

lbin 和 ubin 是二进制行向量,指明表示范围中是否包含每个边界。选择lbin =0或ubin =

0则从表示范围中去掉边界,lbin =1或ubin = 1则在表示范围中包含边界。

例5.1 函数bs2rv 应用举例。下面的二进制种群Chrom ,由函数crtbp 创建,表示在[-1,10]之间的一组简单变量,程序代码表示如何使用函数bs2rv 将算术表示的格雷码或二进制串表示转换为实值表现型。

Chrom = crtbp(4,8) % 创建任意染色体,如为二进制串

00001111

0001001chrom 001010001

101101

1?????

?=??????

FieldD = [8; -1; 10; 1; 0; 1; 1]; % 包括边界

Phen = bs2rv(Chrom,FieldD) % 转换二进制到实值,使用算术刻度

0.78439.3961phen 1.07065.2980-?? ?

?= ? ???

FieldD = [8; 1; 10; 1; 1; 0; 0];

% 不包括边界

Phen = bs2rv(Chrom,FieldD)

% 转换二进制到实值,使用对数刻度

6.62235.0615phen 2.72771.5236?? ? ?=

? ???

算法说明:bs2rv 作为GA 工具箱的一个M 文件执行,如果使用对数刻度,其范围必须不

能包含零。

5.2.2 函数 crtbase

功能:创建基向量

格式:BaseVec = crtbase(Lind, Base)

详细说明:crtbase 产生向量的元素对应染色体结构的基因座,使用不同的基本字符表示建立种群时这个函数可与函数crtbp 联合使用。

BaseV ec = crtbase(Lind, Base)创建长度为Lind 长的向量,它的每个元素由基本字符决定,如果Lind 是向量,BaseVec 的长度为Lind 的总长,如果Base 也是一个长为Lind 长的向量,则BaseVec 是一组由Lind 和基本字符Base 的元素决定长度的基本字符组组成。当描述染色体结构的基因位基本字符时,最后一选项是有用的。

例5.2 函数BaseV ec 应用举例。下面的程序代码为种群创建一有4个基数为8的基本字符{0,1,2,3,4,5,6,7}和6个基数为5的基本字符{0,1,2,3,4}的基本字符向量。

BaseV= crtbase ([4 6], [8 5]) BaseV =

[8 8 8 8 5 5 5 5 5 5]

参见:crtbp ,bs2rv

5.2.3 函数 crtbp

功能:创建初始种群 格式:① [Chrom,Lind,BaseV] = crtbp(Nind,Lind)

② [Chrom,Lind,BaseV] = crtbp(Nind,BaseV) ③ [Chrom,Lind,BaseV] = crtbp(Nind,Lind,Base)

详细说明:遗传算法的第一步是创建由任意染色体组成的原始种群。crtbp 创建一元素为随机数的矩阵Chrom 。

格式①创建一大小为Nind× Lind 的随机二元矩阵,这里Nind 指定种群中个体的数量,Lind 指定个体的长度。此格式习惯于指定染色体的尺寸(维度)。

格式②返回长度为Lind 的染色体结构,染色体基因位的基本字符由向量BaseV 决定。 格式③用于产生基本字符为Base 的染色体矩阵。如果Base 是向量,Base 的元素值指定了染色体的基因位的基本字符。在这种情况下,右边的第二个变元可省略,即为格式②。

例5.3 使用函数crtbp 创建初始种群的应用举例。 ① 创建一个长度为9、有6个个体的随机种群。 [Chrom,Lind,BaseV] = crtbp (6,9) 或

[Chrom,Lind,BaseV] = crtbp(6,9,BaseV) 运行后得

0 1 1 0 0 1 0 0 0 0 0 1 1 0 1 1 1 0 0 0 0 1 1 0 1 1 1Chrom 1 0 0 0 0 0 0 0 1 1 1 1 1 1 0 1 =

1 0 0 1 1 0 1 1 0 1 1?? ? ? ?

? ? ? ? ???

Lind = 9;

BaseV = [ 2 2 2 2 2 2 2 2 2 ]; ② 创建一长度为9有6个个体的随机种群,这里前四个基因位是基本字符{0,1,2,3,4,5,6,7},后五个基因位是基本字符{0,1,2,3}。

BaseV = crtbase([4 5], [8 4]);

[Chrom,Lind,BaseV] = crtbp(6,BaseV); 或

[Chrom,Lind,BaseV] = crtbp([6,9],[8 8 8 8 4 4 4 4 4]); 运行后得

4311202031475211101

30100002Chrom 15572023145770130342

4

3

3

1

1

0?? ? ? ?=

? ? ? ? ??

?

Lind = 9;

BaseV = [8 8 8 8 4 4 4 4 4];

算法说明:crtbp 是GA 工具箱中的一个M 文件,它使用了MA TLAB 随机函数rand 。 参见:crtbase ,crtrp

5.2.4 函数 crtrp

功能:创建实值原始种群。遗传算法的第一步是创建由任意个体组成的原始种群。crtrp 创建元素为均匀分布随机数的矩阵。

格式:Chrom = crtrp(Nind,FieldDR)

详细说明:Chrom = crtrp(Nind,FieldDR)创建一大小为Nind× Nvar 的随机实值矩阵,这里Nind 指定了种群中个体的数量,Nvar 指定每个个体的变量个数。Nvar 来自FieldDR ,Nvar = size(FieldDR,2)。

FieldDR (FieldDescriptionRealvalue)是一大小为2× Nvar 的矩阵,并包含每个个体变量的边界,第一行包含下界,第二行包含上界。

FieldDR 被用在另一些函数中(变异)。

例5.4 使用函数crtrp 创建一具有6个个体,每个个体有4个变量的随机种群。 定义边界变量:

100

503020%FieldDR 100

5030

20%----??=?

???

下界

上界

创建初始种群:

Chrom = crtrp(6,FieldDR)

40.23-17.1728.9515.3882.0613.2613.35-9.0952.43

25.6415.20-2.54Chrom -47.5049.109.0910.65-90.50-13.46-25.63-0.8947.21-25.29

7.89

-10.48??

?

? ?=

?

? ?

?

??

?

参见:mutbga ,recdis ,recint ,reclin

5.2.5 函数 migrate

功能:在子种群间迁移个体。

格式:① Chrom = migrate(Chrom,SUBPOP)

② Chrom = migrate(Chrom,SUBPOP,MigOpt) ③ Chrom = migrate(Chrom,SUBPOP,MigOpt,ObjV) ④ [Chrom,ObjV] = migrate(Chrom,SUBPOP,MigOpt,ObjV)

详细说明:migrate 完成在当前种群Chrom 的子种群间迁移个体,并返回迁移后的种群Chrom 。Chrom 的一行对应一个个体。子种群的数量由SUBPOP 指定。在Chrom 中的子种群按照下列方案进行有序排列。

112111222212Chrom N N SUBPOP SUBPOP N SUBPOP IND SubPop IND SubPop IND SubPop IND SubPop IND SubPop IND SubPop IND SubPop IND SubPop IND SubPop ????

??

??????????????

?

?=?????????????????????

?

所有子种群必须有相同数量的个体。

MigOpt 是一最大具有三个参数的可选向量。 MigOpt(1):是个体在子种群间的迁移概率。如果省略或为NaN ,则假定MigOpt(1) = 0.2 (即20 %)。如果迁移概率不为0,则在每个子种群至少有一个个体迁移。

MigOpt(2):是指定迁移选择方式的标量。0为均匀迁移,1为基于适应度的迁移。如果省略或为NaN ,则假设MigOpt(2) = 0。

MigOpt(3):是指定迁移种群结构的标量。0为完全网状结构,1为近邻结构,2为环状结构。如果省略或为NaN ,则假设MigOpt(3) = 0。

如果省略MigOpt 或为NaN ,则假设为缺省值。

ObjV 是具有与Chrom 同样行数的任选列向量,并包含Chrom 所有个体对应的目标函数值。对于基于适应度的迁移(MigOpt(2) =1),则ObjV 为必选项。如果ObjV 是一输入输出参数,则目标函数值将按照迁移个体进行拷贝,并保存重新计算的整个种群的目标函数值。

例5.5 下面列举函数migrate 各种调用的情形。

Chrom = (Chrom ,SUBPOP)在一子种群中选择20%的个体,并用均匀选择方式与从其它所有子种群中选择的个体进行替换。这个过程将对所有子种群做一遍。其中

MigOpt = [0.2,0,0]

Chrom = migrate(Chrom,SUBPOP,[NaN 1 NaN],ObjV))在一子种群中选择20%的个体并用从其它所有子种群中选择最适应(较小的ObjV)的个体替换。(网状结构)这个过程将对所有子种群重复。

[Chrom,ObjV] = migrate(Chrom,SUBPOP,[0.3 1 2],ObjV)) ])在一子种群中选择30%的个体并用从单向环状结构的邻近子种群中选择最适应(较小的ObjV)的个体替换。这个过程将对所有子种群重复。第一个子种群从最后一个子种群接收它的新的个体(SUBPOP)。ObjV 按照迁移个体进行返回。

这个迁移方案如下:

subpop1-->subpop2-->subpop3-->...-->subpopSUBPOP--> subpop1

[Chrom ,ObjV] = migrate(Chrom ,SUBPOP ,[NaN NaN 1],ObjV))在一子种群中选择20%的个体并用均匀选择方式与从两个相邻子种群中选择的个体替换。这个过程将对所有子种群重复一遍。第一个子种群从第二个子种群和最后一个子种群中接收新的个体。最后一个子种群从第一个子种群和第SUBPOP -1个子种群接收新的个体。ObjV 按照迁移个体进行返回。

这个迁移方案如下:

subpopSUBPOP-->subpop1<-->subpop2<-->…<-->subpopSUBPOP<--subpop1

参见:select ,recombin ,mutate ,reins

5.2.6 函数 mut

功能:离散变异算子。 格式:① NewChrom = mut(OldChrom,Pm)

② NewChrom = mut(OldChrom,Pm,BaseV)

详细说明:mut 取当前种群的表示,并用特定概率对每个元素变异。如果染色体和种群结构中允许不同的基本字符,则mut 允许用一个附加的变量BaseV 来指定染色体中每一个元素的基本字符。

假定种群为二进制编码,NewChrom = mut(OldChrom,Pm),取当前种群OldChrom ,每一行对应一个体并用概率Pm 变异每一个元素。如果省略,则假设Pm=0.7/Lind ,这里Lind 是染色体结构的长度。这个值的选择将使染色体中的每一个元素的变异概率近似为0.5。

NewChrom = mut (OldChrom,Pm,BaseV)使用第三个变量指明染色体个体元素的变异的基本字符。在这里,length(BaseV) = Lind ,Lind 是染色结构的长度。

mut 是一低级变异函数,通常被mutate 调用。

例5.6 下面的程序代码为使用函数mut 将当前种群变异为新种群。 ① 调用变异函数。

000001111

0001001OldChrom=001010001

101101

1?????

???????

变异OldChrom 使用缺省的概率,通过调用变异函数:

NewChrom = mut(OldChrom)

这时,OldChrom 将变成NewChrom :

NewChrom=001001111

1000001000000001

101101

1?????

???????

② 创建一长度为8有6个个体的随机种群。 BaseV =[ 8 8 8 4 4 4 4 4]; [Chrom,Lind,BaseV] = crtbp(6,BaseV);

6 1 0 3 2 2 2 20 4 0 2 1 1 3 16 0 2 0 2 1 1 3Chrom= 5 4

7 3 1 1 1 31 3 7 3 3 2 3 14 1 4 0 0 0 3 3????????

??????????

NewChrom = mut (Chrom,0.0778,BaseV)

因此Chrom 将变成

6 1 0 3 2 2 2 20 4 0 2 1 1 3 16 0 2 0 2 2 1 3NewChrom= 5 4

7 3 1 1 1 31 3 7 3 0 2 3 14 1 4 0 0 0 3 3??????????

????????

需要补充说明的是,如果二进制串使用变异概率1,则调用过程及获得的结果如下:

mut ([1 0 1 0 1 1 1 0],1); 运行后得

ans = [0 1 0 1 0 0 0 1] 参见:mutate ,mutbga

5.2.7 函数 mutate

功能:个体的变异(高级函数)。 格式: ① NewChrom = mutate (MUT_F,OldChrom,FieldDR)

② NewChrom = mutate (MUT_F,OldChrom,FieldDR,MutOpt) ③ NewChrom = mutate (MUT_F,OldChrom,FieldDR,MutOpt,SUBPOP)

详细说明:mutate 执行种群OldChrom 中个体的变异,并在新种群NewChrom 中返回变异后的个体,OldChrom 和NewChrom 中每一行对应一个个体。

MUT_F 是一字符串,包含低级变异函数的名字例如mutbga 或mut 。 对实值变量,FieldDR 是一大小为2 ×Nvar 的矩阵,指定每个变量的边界;对离散值变量,FieldDR 是一大小为1× Nvar 的矩阵,指定每个变量的基本字符。如果FieldDR 省略、空或为NaN ,则指定变量为二进制表示。

MutOpt 是一任选参数项,包含变异概率,个体变量的突变可能性。如果MutOpt 省略,一缺省突变概率被假设。对实值变异,MutOpt 可能包含第二个参数说明压缩变异的范围的标量(参见mutbga)。

SUBPOP 是一任选参数项,决定OldChrom 中子种群的数量。如果SUBPOP 省略或NaN ,则假设SUBPOP=1。OldChrom 中的所有子种群必须有相同的大小。

例5.7 变异函数mutate 的应用举例。下面的程序代码为一个二进制种群和一个十进制种群的变异。

对于二进制种群,选取MUT_F='mut'

0 0 1 1 1 0 1 00 1 0 0 1 0 1 1OldChrom= 1 0 0 1 1 0 0 00 0 0 0 0 0 1 0????

?

???????

NewChrom = mutate ('mut',Chrom); 运行后得

0 0 1 1 1 0 1 00 1 0 0 1 0 1 1NewChrom= 1 0 0 1 1 0 0 10 0 0 0 0 0 1 0????

?

???????

对于十进制种群,选取MUT_F='mutbga'。

Chrom = crtbp(6,BaseV); % 6个个体的种群,BaseV 同上 运行后得

2 0 0 2

3 1 2 15

4 4 3 0 1 3 36 6

5 2 2 1 3 2Chrom= 3 2 0 2 3 1 3 33 3 7 3 3 3 1 12 0 3 0 2 2 2 3????????

??????????

边界定义如下:

FieldDR= 0 0 0 0 0 0 0 0 8 8 8 4 4 4 4 4??

?

?

??

NewChrom = mutate ('mutbga',Chrom,FieldDR); % 将Chrom 变异为NewChrom 运行后得

2 0 0 2

3 1 2 15

4 4 3 0 1 3 36 6

5 2 2 1 3 2NewChrom= 3 2 0 2 3 1 3 33 3 7 3 3 3 1 12 0 3 0 2 2 2 3????????

??????????

算法说明:mutate 检测输入参数的一致性和调用低级变异函数,如果mutate 被调用于多

子群,则每个子群分别调用低级变异函数。

参见:mutbga ,mut ,recombin ,select

5.2.8 函数 mutbga

功能:实值种群的变异(遗传算法育种器的变异算子)。 格式:① NewChrom = mutbga(OldChrom,FieldDR)

② NewChrom = mutbga(OldChrom,FieldDR,MutOpt)

详细说明:mutbga 对实值种群OldChrom ,使用给定的概率,变异每一个变量,返回变异后的种群NewChrom 。

FieldDR 是一矩阵,包含每个变量的边界。(参看crtrp) MutOpt 是一可选向量,具有两个参数的最大值。

MutOpt(1)是变异概率。如果缺省或为NaN ,则MutOpt(1) = 1/Nvar ,这里Nvar 是由size(FieldDR ,2)定义的每个个体的变量数。这个值被选定,则表示每个个体的变异数近似为1。

MutOpt(2)是[0,1]之间的一个量,压缩变异的范围。如果省略或为NaN ,则假设MutOpt(2) = 1(不压缩)。

格式②利用保存在矩阵OldChrom 中的当前种群,使用概率MutOpt(1)附加的一个小随机值(变异步长大小)变异每个变量,变异步长可由MutOpt(2)限定。

mutbga 是低级变异函数,通常调用mutate 。

例5.8 使用函数mutbga 变异实值种群应用举例。 考虑下面具有三个实值个体的种群:

40.2381-17.176628.953015.3883OldChrom 82.064213.263913.3596-9.091652.439625.641015.2014-2.5435??

??=??

????

边界定义如下:

?

??

???=20305010020-30-50-100-FieldDR

变异OldChrom 的变异概率为1/4,不压缩变异范围。 NewChrom = mutbga(OldChrom,FieldDR,[1/4 1.0]); mutbga 产生一中间任务表MutMx ,决定变异的变量,并为加入的delta 所表识(参看算法)。例如:

00

1MutMx 0

100

11????=-????--??

第二个中间表 delta 标识正常的变异步长大小。例如: ??

???

?????=0.25050.25050.25050.25050.00010.00010.00010.00010.25000.25000.25000.2500delta

在变异后,NewChrom 成为

??

??

?

?????=7.5539-7.6858-25.641052.43969.0916-13.355913.263982.064220.000028.953017.1766-40.2381NewChrom NewChrom-OldChrom 显示变异的步长。

00 4.6117NewChrom OldChrom 0

-0.003700

-7.5156

-5.0104??

??-=??

????

算法说明:一个变量的变异是由以下计算得到的:

mutated variable = variable +MutMx ×range× MutOpt (2)×delta

具有概率MutOpt(1),则MutMx =1,否则为0 (+或-具有相等概率)。 range = 0.5 *变量的域(范围)。 如果m =20,概率为1/m ,则i a =1,否则为0。

使用m =20,变异算子能定位最优值到精度为Range* MutOpt(2)*2 -19 。

变异算子mutbga 能在个体变量和变异范围定义的立方体中产生最多的点。这个测试经常接近变量,即小步长概率大于大步长概率。

参见:mutate ,recdis ,recint ,reclin

5.2.9 函数 ranking

功能:基于排序的适应度分配。 格式:① FitnV = ranking(ObjV)

② FitnV = ranking(ObjV ,RFun) ③ FitnV = ranking(ObjV ,RFun,SUBPOP)

详细说明:ranking 按照个体的目标值ObjV 由小到大的顺序对它们进行排序,并返回一包含对应个体适应度值FitnV 的列向量。这个函数是从最小化方向对个体进行排序的。

RFun 是一任选向量,有1、2或length(ObjV)个参数。

如果RFun 是一在[1,2]内的标量,则是线性排序,这个标量指定选择的压差。 如果RFun 是一具有两个参数的向量,则

RFun(1):对线性排序,标量指定的选择压差RFun(1)必须在[1,2]之间;对非线性排序,RFun(1)必须在[1,length(ObjV)-2]之间。如果为NaN ,则RFun(1)假设为2。

RFun(2):指定排序方法。0为线性排序,1为非线性排序。

如果RFun 为长为length(ObjV)的向量,则它包含对每一行的适应度值计算。 如果省略RFun 或为NaN ,则采用线性排序,选择压差假设为2。

SUBPOP 是一任选参数,指明在ObjV 中子种群的数量。如果省略SUBPOP 或为NaN ,则假设SUBPOP=1。在ObjV 中的所有子种群大小必须相同。

如果ranking 被调用于多子种群,则ranking 独立地对每个子种群执行。 例5.9 函数ranking 应用举例。下面为取不同参数时使用函数ranking 对10个个体的种群进行排序。

考虑具有10个个体的种群,其当前目标值如下:

[]T

ObjV=12345109876

(1) 使用线性排序和选择压差为2估算适应度。 FitnV = ranking(ObjV)

2.0000 1.7778 1.5556 1.3333 1.1111FitnV 0 0.2222 0.4444 0.6667 0.8889??????????????

=??????????????????

(2) 使用非线性排序和选择压差为2估算适应度。

FitnV = ranking(ObjV ,[2 1])

2.0000 1.6633 1.3833 1.1504 0.9568FitnV= 0.3807 0.4577 0.5504 0.6618 0.7957??????????????

??????????????????

(3) 使用Rfun 中的值估算适应度。

[]50403025181410753RFun = FitnV = ranking(ObjV , RFun)

50 40 30 25 18FitnV= 3 5 7 10 14??????????????

??????????????????

(4) 使用非线性排序,选择压差为2,在ObjV 中有两个子种群估算适应度。

FitnV = ranking(ObjV ,[2 1],2)

2.0000 1.2889 0.8307 0.5354 0.3450FitnV= 0.3450 0.5354 0.8307 1.2889 2.0000??

??

??

??

????

??

????

??

??

??

??

??

????

或 2.001.280.830.530.34FitnV=0.340.530.831.282.00???????????????

????????????????? 算法说明:这个算法对线性和非线性的排序首先对目标函数值进行降序排序。最小适应

度个体被放置在排序的目标函数值列表的第一个位置,最适应个体放置在位置Nind 上。这里Nind 是种群中个体的数量。每个个体的适应度值根据它在排序种群中的位置Pos 计算出来。

对线性排序,其适应度值由下式计算:

(1)

()22(1)(1)

Pos FitnV Pos sp sp Nind -=-+?-?

-

对非线性排序:

∑=-?=

Nind i Pos i X X Nind Pos FitnV 1

1

)

()(

这里X 是多项式方程的方根:

sp X sp X sp X sp Nind Nind +?++?+?-=-- 21)1(0

向量FitnV 是没有排序的,反映原始输入向量ObjV 的顺序。 参见:select ,rws ,sus

5.2.10 函数 recdis

功能:离散重组

格式:NewChrom = recdis(OldChrom)

详细说明:recdis 完成当前种群OldChrom 中一对个体的离散重组,在交配后返回新的种群NewChrom 。OldChrom 中每一行对应一个个体。交配的一对是有序的,奇数行与它下一个偶数行配对。如果矩阵OldChrom 的行数是奇数,最后一个奇数行不交配并添加到NewChrom 的末端。因此种群被组织成需要交配的连续对。通过使用函数ranking 达到计算每个个体的适应度水平和使用选择函数(例如select)在当前种群中按适应度相关的概率选择个体。

recdis 是一个低级重组函数,通常被函数recombin 调用。

例5.10 离散重组函数recdis 应用举例。下面的程序代码为5个实值个体种群的离散重组。 考虑如下具有5个实值个体的种群:

40.23-17.1728.9515.3882.0613.2613.35-9.09OldChrom=52.4325.6415.20

-2.54-47.5049.10

9.0910.65-90.50-13.46-25.63

-0.89??

???

???

?

???????

完成离散重组:

NewChrom = recdis(OldChrom)

函数recdis 提供一中间掩码表决定哪些父个体为子代贡献哪些变量。例如:

12122

211Mask=21211

12

2?????

???????

重组后NewChrom 成为如下:

40.2313.2628.95-9.09%(1),1&282.06

13.2628.9515.38%(2),1&2NewChrom=-47.5025.649.09-2.54%(3),3&452.4325.649.0910.65%(4),3&4mask row mask row

mask row mask row

?????

???

?

?

??

由于在父种群OldChrom 的个体数量是奇数,最后一个个体不参加重组而附加到NewChrom 并且后代返回到用户空间,因此

40.2313.2628.95-9.0982.0613.2628.9515.38NewChrom=-47.5025.649.09-2.5452.4325.649.0910.65-90.50-13.46-25.63-0.89??????

??????????

算法说明:离散重组是在个体间交换变量值,对每个变量,贡献给子代变量值的父亲是

用随机的相同的概率挑选的。离散重组产生父母定义的个体的所有可能。

参见:recombin ,recint ,reclin ,ranking ,sus ,rws

5.2.11 函数 recint

功能:中间重组

格式:NewChrom = recint(OldChrom)

详细说明:recint 完成当前种群OldChrom 成对个体的中间重组,返回交配后的新种群NewChrom 。OldChrom 中每一行对应一个个体。

recint 是一个只能应用于实值(非二进制、非整数)变量种群的函数。

交配的对是有序的,奇行与它下一个偶行配对。如果OldChrom 的行数是奇数,最后一个奇数行不参与交配,直接加到NewChrom 的末尾。因此种群根据交配要求组织成连续的对。通过使用ranking 计算每个个体的适应度水平和使用一个选择函数(例如select)和与适应度相关的概率在recint 是一低级重组函数,通常被recombin 调用。

例5.11 中间重组函数recint 应用举例。下面的程序代码为具有3个实值个体种群的中间重组。

考虑下面具有3个实值个体的种群。

40.23-17.1728.9515.38%1OldChrom=82.0613.2613.35-9.09%2

52.4325.6415.20-2.54%3

??

????

????

父代父代父代

执行中间重组:

NewChrom = recint(OldChrom);

通过向最先的父个体增加不同微量产生新值,中间比率因子表Alpha 被产生,例如:

-0.130.500.320.16%1Alpha 1.120.540.44 1.16%2??

=??

??

子代子代

因此,重组后的NewChrom 成为:

34.40-1.9223.8611.33%(1,;),12

NewChrom=87.11-0.5921.98-13.04%(2,;),12

Alpha Alpha ??

??

??

父和父和

由于父种群OldChrom 的个体数是奇数,最后一个个体不参加重组直接加入NewChrom ,因此返回用户空间的后代如下:

34.40

-1.9223.86

11.33NewChrom=87.11

-0.5921.98

-13.0452.43

25.6415.20

-2.54??

????

????

算法说明:中间重组重组双亲值使用如下公式:

offspring = parent1 + Alpha(parent2 - parent1)

这里Alpha 是在区间[-0.25,1.25]内随机一致性选择产生的标量因子。Recint 对重组的每一对值产生一新的Alpha 。

中间重组能产生略大于双亲定义的立体空间中的任意点。

中间重组与线性重组reclin 相似。然而recint 对每对值使用了一新的Alpha 值一起重组,而reclin 对每对双亲使用一Alpha 因子。

参见:recombin ,recdis ,reclin ,ranking ,sus ,rws

5.2.12 函数 reclin

功能:线性重组

格式:NewChrom = reclin(OldChrom)

详细说明:reclin 完成当前种群OldChrom 成对个体的线性重组,返回交配后的新种群

NewChrom 。OldChrom 中每一行对应一个个体。

reclin 是一个只能应用于实值(非二进制、非整数)变量种群的函数。

交配的对是有序的,奇行与它下一个偶行配对。如果OldChrom 的行数是奇数,最后一个奇数行不参与交配,直接加到NewChrom 的末尾。因此种群根据交配要求组织成连续的对。通过使用ranking 计算每个个体的适应度水平和使用一个选择函数(例如select)用与适应度相关的概率在当前种群中选择个体完成这个重组工作。

reclin 是一低级重组函数,通常被recombin 调用。

例5.12 函数reclin 的应用举例。下面的程序代码为具有3个实值个体种群的线性重组。

40.23-17.1728.9515.38%1OldChrom=82.0613.2613.35-9.09%2

52.4325.6415.20-2.54%3

??

????

????

父代父代父代

执行线性重组:

NewChrom = reclin (OldChrom)

通过向最先的父个体增加不同微量产生新值,中间比率因子表Alpha 被产生,例如:

0.78%1Alpha 1.05%2??

=??

??

子代子代

因此,重组后的NewChrom 成为如下:

72.97 6.6416.74-3.77%(1,;),12NewChrom=84.2514.8512.54-10.37%(2,;),12

Alpha Alpha ??

??

??

父和父和

由于父种群OldChrom ,的个体数是奇数,最后一个个体不参加重组直接加入NewChrom 后,因此返回用户空间的后代如下:

72.97 6.6416.74

-3.77NewChrom=84.2514.8512.54

-10.3752.4325.6415.20-2.54??

????

????

算法说明:线性重组重组父值使用如下公式:

offspring = parent1 +Alpha * parent2 - parent1)

这里Alpha 是在区间[-0.25,1.25]内随机一致性选择产生的标量因子。reclin 对重组的每一对双亲产生一新的Alpha 。

线性重组能产生略大于双亲定义的线段中的任意点。

线性重组reclin 与中间重组recint 相似。然而reclin 对每对双亲使用一Alpha 因子一起重组,而recint 对每对值使用了一新的Alpha 值。

参见: recombin ,recdis ,recint ,ranking ,sus ,rws

5.2.13 函数 recmut

功能:具有突变特征的线性重组。 格式:① NewChrom = recmut(OldChrom,FieldDR)

② NewChrom = recmut(OldChrom,FieldDR,MutOpt)

详细说明:recmut 完成当前种群OldChrom 成对个体的具有突变特征的线性重组,返回交配后的新种群NewChrom 。OldChrom 中每一行对应一个个体。

FieldDR 是一矩阵,包含一个个体的每个变量的边界(参看crtrp)。 MutOpt 是一最多有两个参数的任选向量。

MutOpt(1):包含在[0,1]范围内的重组概率的标量。如果省略或为NaN ,则MutOpt(1)假设为1。

MutOpt(2):包含在[0,1]范围内用于压缩重组范围的标量值。如果省略或为NaN ,则MutOpt(2)假设为1(不压缩)。

recmut 是一个只能应用于实值(非二进制、非整数)变量种群的函数。

交配的对是有序的,奇数行与它下一个偶数行配对。如果OldChrom 的行数是奇数,最后一个奇数行不参与交配,直接加到NewChrom 的末尾。因此种群根据交配要求组织成连续的对。通过使用ranking 计算每个个体的适应度水平和使用一个选择函数(例如select)用与适应度相关的概率在当前种群中选择个体完成这个重组工作。

Recmut 是一使用突变特征因子的遗传算法育种器(参看mutbga)。这个重组函数的调用语法是与突变函数mutbga 的语法相同。

Recmut 是一低级重组函数,通常被mutate 调用。

例5.13 函数recmut 的应用举例。下面为具有4个实值个体种群的线性重组示例。

40.2381-17.176628.953015.3883%182.064213.263913.3596-9.0916%2OldChrom=52.439625.641015.2014-2.5435%3-47.538149.19639.095410.6521%4

????

?

???????

p p p p 边界定义如下:

100503020FieldDR=100503020----??

?

???

执行下列具有突变特征的线性重组:

NewChrom = recmut(OldChrom,FieldDR)

recmut 产生一中间任务表RecMx ,决定哪些对双亲参加重组(这里全部参加)并记下重组的步长。例如:

1111%1&p2RecMx 1111%p3&p4

p ---??

=??

----??

两个更进一步的表delta 和Diff 指出正常的重组步长:

0.12500.12500.12500.1250%p1&p2

delta=0.00050.00050.00050.0005%p3&p4????

??

1.3937 1.0143-0.5196-0.8157%p1&p2Diff=-10.5712

2.4906-0.6456 1.3952%p3&p4

????

??

重组后NewChrom 成为:

57.6637-23.517730.000017.428164.638619.605011.4106-11.1314NewChrom=52.971925.578315.2112-2.5576-48.070449.25909.085610.6662????

?

???????

算法说明:一对双亲的后代按如下方法计算:

offspring1=parent1 + RecMx ╳range ╳MutOpt(2)╳delta ╳Diff offspring2=parent2 + RecMx ╳range ╳MutOpt(2)╳delta ╳(-Diff)

∑-=-=1

2m i i i a delta

RecMx =±1,具有概率MutOpt(1)(在这里为0.9),否则为0。 range = 0.5,为变量的域 (参看FieldDR 的定义)。 a i =1,具有概率1/m ,否则为0,其中m =20。

parent1-parent2

parent1-parent2

Diff =

这个重组算子产生其双亲(线性重组)定义方向的子代。它经常超出双亲定义的范围或一个父亲定义的方向。子代的这点是由突变算子的特征定义的,小步长情况产生的概率要比大步长产生的概率来得大(参看mutbga)。

参见:mutate ,mutbga ,reclin

5.2.14 函数 recombin

功能:重组个体(高级函数)。 格式: ① NewChrom = recombin(REC_F,Chrom)

② NewChrom = recombin(REC_F,Chrom,RecOpt) ③ NewChrom = recombin(REC_F,Chrom,RecOpt,SUBPOP)

详细说明:recombin 完成种群Chrom 中个体的重组,在新种群NewChrom 中返回重组后的个体。Chrom 和 NewChrom 中的一行对应一个体。

REC_F 是一包含低级重组函数名的字符串,例如recdis 或xovsp 。

RecOpt 是一指明交叉概率的任选参数,如省略RecOpt 或为NaN ,将设为缺省值。

SUBPOP 是一决定Chrom 中子种群个数的可选参数,如果省略SUBPOP 或为NaN ,则假设SUBPOP=1。Chrom 中的所有子种群必须有相同的大小。

例5.14 函数recombin 的应用举例。下面的程序代码为:首先产生5个个体的种群,然后利用函数recombin ,对该种群进行重组。

-100 -50 -30 -20BaseV= 100 50 30 20??

??

??

Chrom = crtrp(5,BaseV); % 产生5个个体的种群

13.3546 -44.1138 -27.0433 9.5997 64.6017 -13.9689 4.2634 -2.7251Chrom 34.7897 4.8513 12.0514 5.3706 99.8895 -23.8230 27.7373 12.1211 92.3273 9.7345 15.0311 -16.6448?=??????

?????????

NewChrom=recombin('recdis',Chrom); % 参数选取离散重组

64.6017 -13.9689 4.2634 -2.7251 64.6017 -13.9689 4.2634 -2.7251NewChrom= 99.8895 4.8513 27.7373 5.3706 34.7897 4.8513 12.0514 5.3706 92.3273 9.7345 15.0311 -16.6448???

????

?????????

NewChrom =recombin('xovsp',Chrom); % 参数选取单点交叉

13.3546 -44.1138 4.2634 -2.7251 64.6017 -13.9689 -27.0433 9.5997NewChrom= 34.7897 4.8513 27.7373 12.1211 99.8895 -23.8230 12.0514 5.3706 92.3273 9.7345 15.0311 -16.6448???????

?????????

算法说明:recombin 检测输入参数的一致性并调用低级重组函数。如果recombin 调用时具

有多个子种群,则对每个子种群分别调用低级重组函数。

参见:recdis ,recint ,reclin ,xovsp ,xovdp ,xovsh ,mutate ,select

5.2.15 函数 reins

功能:重插入子代到种群。 格式:① Chrom = reins(Chrom,SelCh)

② Chrom = reins(Chrom,SelCh,SUBPOP) ③ Chrom = reins(Chrom,SelCh,SUBPOP,InsOpt,ObjVCh) ④ [Chrom,ObjVCh]= reins(Chrom,SelCh,SUBPOP,InsOpt,ObjVCh,ObjVSel)

详细说明:reins 完成插入子代到当前种群,用子代代替父代并返回结果种群。子代包含在矩阵SelCh 中,父代在矩阵Chrom 中,Chrom 和Selch 中每一行对应一个个体。

SUBPOP 是一可选参数,指明Chrom 和SelCh 中子种群的个数。如果SUBPOP 省略或为NaN ,则假设SUBPOP=1。在Chrom 和SelCh 中每个子种群必须具有相同大小。

InsOpt 是一最多有两个参数的任选向量。

InsOpt(1)是一标量,指明用子代代替父代的选择方法。0——均匀选择,子代代替父代使用均匀随机选择。1——基于适应度的选择,子代代替最小适应的个体。如果省略InsOpt(1)或为NaN ,则假设InsOpt(1)=0。

InsOpt(2)是一在[0,1]间的标量,表示每个子种群中重插入的子代个体与整个子种群中个体的比率。如果省略InsOpt(2)或为NaN ,则假设InsOpt(2)=1.0。

如果InsOpt 省略或为NaN ,则InsOpt 为缺省值。 ObjVCh 是一可选的列向量,包含Chrom 中个体的目标值。对基于适应度的重插入,ObjVCh 是必需的。

ObjVSel 是一可选的列向量,包含Selch 中个体的目标值。如果子代的数量大于重插入种群中的子代数量,则ObjVSel 是需要的。在这种情况下,子代将按它们的适应度选择插入。

在格式④中,输出参数ObjVCh 是子代个体的适应度值,包含子代中原个体的适应度值ObjVCh 和产生的新个体的适应度值ObjVSel 。

例5.15 函数reins 的应用举例。下面的程序代码为在6个个体的父代种群中插入子代种群。 FieldDR1=[-10,-5,-3,-1;10,5,3,1]; % 定义边界变量

-10 -5 -3 -1FieldDR1= 10 5 3 1????

??

Chrom=crtrp(6,FieldDR1); % 产生6个个体的父代种群

Chrom=?????

??

??

???????????0.2042 1.5358- 3.1673 5.3310 0.5719- 0.3613 2.1181- 9.1598 0.3193 0.7268 4.8514- 3.4551 0.5073 1.9164 4.0459- 4.1902- 0.4736- 2.8958- 3.6906- 0.0318- 0.6440 2.9129 1.6612 5.7602

- FieldDR2=[-100,-50,-30,-20;100,50,30,20]; % 定义边界变量

-100 -50 -30 -20FieldDR2= 100 50 30 20????

??

SelCh=crtrp(2,FieldDR2); % 产生2个个体的子代种群

SelCh=??

?

?

??11.6291- 12.1112 36.9018- 49.7599-13.9071 26.4492 43.2736 42.7701-

插入所有子代到种群中:

Chrom = reins(Chrom,SelCh) 这个新种群Chrom 产生:

-5.7602 1.6612 2.9129 0.6440 -0.0318 -3.6906 -2.8958 -0.4736 -49.7599 -36.9018 12.1112 -11.6291Chrom= 3.4551 -4.8514 0.7268 0.3193 -42.7701 43.2736 26.4492 13.9071 5.3310 3.1673 -1.5358 0.2042????????

??????????

为父种群Chrom 考虑如下目标值ObjVCh 向量和为子代Selch 考虑如下目标值ObjVSel 向量:

ObjVCh = [21; 22; 23; 24; 25; 26]; ObjVSel= [31; 32];

基于适应度插入所有子代代替最不适应的父个体。 Chrom = reins(Chrom,SelCh,1,1,ObjVCh);

-5.7602 1.6612 2.9129 0.6440 -0.0318 -3.6906 -2.8958 -0.4736 -4.1902 -4.0459 1.9164 0.5073Chrom= 3.4551 -4.8514 0.7268 0.3193 -49.7599 -36.9018 12.1112 -11.6291 -42.7701 43.2736 26.4492 13.9071??????????

????????

基于适应度插入50% 的子代,并按插入的子代拷贝目标值:

[Chrom, ObjVCh] = reins(Chrom,SelCh,1,[1 0.5],ObjVCh,ObjVSel) ObjVCh =[21; 22; 23; 24; 25; 31]

遗传算法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

智能信息处理导论简答题

1、简述可拓思想及其拓展工具 可拓思想是利用物元理论、事元理论和可拓集合理论,结合各应用理论和方法去处理该领域中的矛盾问题,以化不可行为可行,不可知为可知,化不属于为属于、化对立为共存。 可拓拓展工具定性工具物元和事元是可拓学的基本概念,可拓变换是解决矛盾问题的基本工具,可拓分析方法是寻求可拓变换的依据。利用它们可以从定性的角度分析事物开拓的可能性。 定量工具可拓集合是描述事物具有某种性质的程度和量变与质变的定量化工具。 2、什么是云计算?云计算为什么备受关注?为什么要实现云计算? 云计算的基本原理是通过使计算分布在大量的分布式计算机上,而非本地计算机或远程服务中,企业数据中心的运行将更与互联网相似。这使得企业能够将资源切换到需要的应用上,根据需求访问计算机和存储系统 云计算是一种革命性的举措,打个比方,这就好比是从古老的单台发电机模式转向了电厂集中供电的模式。它意味着计算能力也可以作为一种商品进行流通。它最大的不同在于它是通过互联网进行传输的。 在未来只需一台笔记本或者手机,就可以通过网络服务来满足人们一切甚至包括超级计算这样的任务。最终用户才是云计算的真正拥有者。云计算的思想:把力量联合起来,给其中的每一个成员使用。 3、简述粗集理论. ①利用抽象代数来研究粗糙集代数空间这种特殊的代数结构。②利用拓扑学描述粗糙空间。 ③还有就是研究粗糙集理论和其他软计算方法或者人工智能的方法相接合,例如和模糊理论、神经网络、支持向量机、遗传算法等。④针对经典粗糙集理论框架的局限性,拓宽粗糙集理论的框架,将建立在等价关系的经典粗糙集理论拓展到相似关系甚至一般关系上的粗糙集理论 4、比较协同进化遗传算法与普通遗传算法。 遗传算法虽然实现简单,操作方便,但是存在很多的缺陷:①很容易导致“早熟”,陷入局部最优;②随着问题规模的增大,其计算复杂度明显增加,收敛性显著降低,搜索问题空间能力也下降;③依靠简单的交叉、变异操作,很容易产生不可行解;④交叉产生的子代可能一个适应度很高,另一个很低,低的个体虽然含有较好的基因,但是会被淘汰。 两种算法的比较结果很明显就可以看出两种算法的优劣:CGA、要明显优于GA,计算是时间短,收敛速度快,而且收敛精度也比较高。在求解分类神经网络训练问题计算工作量大大减少,同样达到90%的分类精度,CGA的遗传代数只有GA的1/3.在求解Manipulator Path Planning问题CGA占用CPU的时间只有GA的1/9 5、比较免疫算法与遗传算法。 (1)免疫算法与遗传算法起源于抗原与抗体之间的内部竞争,其相互作用的环境既包括外部也包括内部的环境;而遗传算法起源于个体与自私基因之间的外部竞争。(2)免疫算假设免疫元素互相作用,即每一个免疫细胞等个体可以相互作用,而遗传算法不考虑个体之间的作用。(3)免疫算法中,基因可以由个体自己选择,而在遗传算法中基因有环境选择。(4)免疫算法中,基因组合是为了获得多样性,一般不用交叉算子,因为免疫算法中基因是在同一代个体进行进化,这种情况下设交叉概率为0;而遗传算法后代个体基因通常是由父代交叉的结果,交叉用于混合基因(5)免疫算法选择个变异阶段明显不同,而遗传算法中它们是交替进行的。 6、请描述遗传算法特点。 (1)遗传算法从问题解的串集开始搜索,而不是从单个解开始。这是遗传算法与传统优化算法的极大区别。传统优化算法是从单个初始值迭代求最优解的;容易误入局部最优解。遗传

遗 传 算 法 详 解 ( 含 M A T L A B 代 码 )

GATBX遗传算法工具箱函数及实例讲解 基本原理: 遗传算法是一种典型的启发式算法,属于非数值算法范畴。它是模拟达尔文的自然选择学说和自然界的生物进化过程的一种计算模型。它是采用简单的编码技术来表示各种复杂的结构,并通过对一组编码表示进行简单的遗传操作和优胜劣汰的自然选择来指导学习和确定搜索的方向。遗传算法的操作对象是一群二进制串(称为染色体、个体),即种群,每一个染色体都对应问题的一个解。从初始种群出发,采用基于适应度函数的选择策略在当前种群中选择个体,使用杂交和变异来产生下一代种群。如此模仿生命的进化进行不断演化,直到满足期望的终止条件。 运算流程: 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来编写遗传算法代码时,要根据你所安装的工具箱来编写代码。 以GATBX为例,运用GATBX时,要将GATBX解压到Matlab下的toolbox文件夹里,同时,set path将GATBX文件夹加入到路径当中。 这块内容主要包括两方面工作:1、将模型用程序写出来(.M文件),即目标函数,若目标函数非负,即可直接将目标函数作为适应度函数。2、设置遗传算法的运行参数。包括:种群规模、变量个数、区域描述器、交叉概率、变异概率以及遗传运算的终止进化代数等等。

智能算法实验报告

人工智能实验—智能算法 实验一蚂蚁算法 一、实验目的: 理解蚂蚁算法的本质,会编写蚂蚁算法来求解TSP问题。 二、实验原理: 蚂蚁在寻找食物源时,能在其走过的路上释放一种特殊的分泌物——信息素(随着时间的推移该物质会逐渐挥发), 后来的蚂蚁选择该路径的概率与当时这条路径上该物质的强度成正比。当一定路径上通过的蚂蚁越来越多时,其留下的信息素轨迹也越来越多,后来蚂蚁选择该路径的概率也越高,从而更增加了该路径的信息素强度。 而强度大的信息素会吸引更多的蚂蚁,从而形成一种正反馈机制, 通过这种正反馈机制,蚂蚁最终可以发现最短路径。特别地,当蚂蚁巢穴与食物源之间出现障碍物时,蚂蚁不仅可以绕过障碍物,而且通过蚁群信息素轨迹在不同路径上的变化,经过一段时间的正反馈,最终收敛到最短路径上。 三、实验内容: #include #include #include using namespace std; const int MaxInt=~(unsigned int)0 / 2; /*double d[5][5]={ {0, 7, 6,10,13}, {7, 0, 7,10,10}, {6, 7, 0,5 ,9 }, {10,10,5,0, 6 }, {13,10,9,6, 0 } }; //表示路径(i,j)之间的长度 */ class Ant { private: int AntNum;//蚂蚁个数; int NodeNum;//节点个数; int MaxRunNum;//最大运行次数 int RunNum;//运行次数 double **d;//表示路径(i,j)之间的长度 double **n;//边弧(i,j)的能见度(visibility), 或称局部启发因子,一般取1/d 表示路径(i,j)之间的长度; double **t;//边弧(i,j)的信息素轨迹强度(intensity) double INITINFO;//初始的信息素值 //double **deltaT;//蚂蚁k 于弧上(i,j)留下的单位长度轨迹信息素数量;

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),染色体中 一定数量的基因按照一定的规律排列(即编码),遗传基因在染色体中的排列位置称为基因

自适应PID控制综述(完整版)

自适应PID控制 摘要:自适应PID控制是一门发展得十分活跃控制理论与技术,是自适应控制理论的一个重要组成部分,本文简要回顾PID控制器的发展历程,对自适应PID控制的主要分支进行归类,介绍和评述了一些有代表性的算法。 关键词:PID控制,自适应,模糊控制,遗传算法。 Abstract: The adaptive PID control is a very active developed control theory and technology and is an important part of adaptive control theory.This paper briefly reviews the development process PID controller.For adaptive PID control of the main branches, the paper classifies,introduces and reviews some representative algorithms. Keywords: PID control, adaptive, fuzzy control, genetic algorithm 1 引言 从问世至今已历经半个世纪的PID控制器广泛地应用于冶金、机械、化工、热工、轻工、电化等工业过程控制之中,PID控制也是迄今为止最通用的控制方法, PID控制是最早发展起来的控制策略之一,因为他所涉及的设计算法和控制结构都很简单,并且十分适用于工程应用背景,所以工业界实际应用中PID 控制器是应用最广泛的一种控制策略(至今在全世界过程控制中用的80% 以上仍是纯PID调节器,若改进型包含在内则超过90%)。由于实际工业生产过程往往具有非线性和时变不确定性,应用常规PID控制器不能达到理想控制效果,长期以来人们一直寻求PID控制器参数的自动整定技术,以适应复杂的工况和高指标的控制要求。随着微机处理技术和现代控制理论诸如自适应控制、最优控制、预测控制、鲁棒控制、智能控制等控制策略引入到PID控制中,出现了许多新型PID控制器。人们把专家系统、模糊控制、神经网络等理论整合到PID控制器中,这样既保持了PID控制器的结构简单、适用性强和整定方便等优点,又通过先进控制技术在线调整PID控制器的参数,以适应被控对象特性的变化。 2 自适应PID控制概念及发展 2.1 PID控制器 常规PID控制系统原理框图如下图所示,系统由模拟PID控制器和被控对象组成。

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来编写遗传算法代码时,要根据你所安装的工具箱来编写代码。

遗传算法的基本原理

第二章 遗传算法的基本原理 2.1 遗传算法的基本描述 2.1.1 全局优化问题 全局优化问题的定义:给定非空集合S 作为搜索空间,f :S —>R 为目标函数,全局优化问题作为任务)(max x f S x ∈给出,即在搜索空间中找到至少一个使目标函数最大化的点。 全局最大值(点)的定义:函数值+∞<=)(**x f f 称为一个全局最大值,当且仅当x ? S x ∈,(ρi i b a <,i 12)定义适应度函数f(X); 3)确定遗传策略,包括群体规模,选择、交叉、变异算子及其概率。 4)生成初始种群P ; 5)计算群体中各个体的适应度值; 6)按照遗传策略,将遗传算子作用于种群,产生下一代种群; 7)迭代终止判定。 遗传算法涉及六大要素:参数编码,初始群体的设定,适应度函数的设计,遗传操作的设计,控制参数的设定,迭代终止条件。

2.1.3 遗传编码 由于GA 计算过程的鲁棒性,它对编码的要求并不苛刻。原则上任何形式的编码都可以,只要存在合适的对其进行操作的遗传算子,使得它满足模式定理和积木块假设。 由于编码形式决定了交叉算子的操作方式,编码问题往往称作编码-交叉问题。 对于给定的优化问题,由GA 个体的表现型集合做组成的空间称为问题(参数)空间,由GA 基因型个体所组成的空间称为GA 编码空间。遗传算子在GA 编码空间中对位串个体进行操作。 定义:由问题空间向GA 编码空间的映射称为编码,而有编码空间向问题空间的映射成为译码。 1)2)3)它们对1) 2) k =1,2,…,K; l =1,2,…,L; K=2L 其中,个体的向量表示为),,,(21kL k k k a a a a =,其字符串形式为kL k k k a a a s 21=,s k 称为个体a k 对应的位串。表示精度为)12/()(--=?L u v x 。 将个体又位串空间转换到问题空间的译码函数],[}1,0{:v u L →Γ的公式定义为: 对于n 维连续函数),,2,1](,[),,,,(),(21n i v u x x x x x x f i i i n =∈=,各维变量的二进制

第五章-遗传算法工具箱函数

第五章遗传算法工具箱函数 本章介绍英国设菲尔德大学开发的遗传算法工具箱函数。 由于MATLAB高级语言的通用性,对问题用M文件编码,与此配对的是MA TLAB先进的数据分析、可视化工具、特殊目的的应用领域工具箱和展现给使用者具有研究遗传算法可能性的一致环境。MATLAB遗传算法工具箱为遗传算法从业者和第一次实验遗传算法的人提供了广泛多样的有用函数。 遗传算法工具箱使用MA TLAB矩阵函数为实现广泛领域的遗传算法建立一套通用工具,这个遗传算法工具是用M文件写成的,是命令行形式的函数,能完成遗传算法大部分重要功能的程序的集合。用户可通过这些命令行函数,根据实际分析的需要,编写出功能强大的MATLAB程序。 5.1 工具箱结构 本节给出GA工具箱的主要程序。表5.1为遗传算法工具箱中的各种函数分类表。 表5.1 遗传算法工具箱中函数分类表

5.1.1 种群表示和初始化 种群表示和初始化函数有:crtbase,crtbp,crtrp。 GA工具箱支持二进制、整数和浮点数的基因表示。二进制和整数种群可以使用工具箱中的crtbp建立二进制种群。crtbase是附加的功能,它提供向量描述整数表示。种群的实值可用crtrp进行初始化。在二进制代码和实值之间的变换可使用函数bs2rv,它支持格雷码和对数编码。 5.1.2 适应度计算 适应度函数有:ranking,scaling。 适应度函数用于转换目标函数值,给每一个个体一个非负的价值数。这个工具箱支持Goldberg的偏移法(offsetting)和比率法以及贝克的线性评估算法。另外,ranking函数支持非线性评估。 5.1.3 选择函数 选择函数有:reins,rws,select,sus。 这些函数根据个体的适应度大小在已知种群中选择一定数量的个体,对它的索引返回一个列向量。现在最合适的是轮盘赌选择(即rws函数)和随机遍历抽样(即sus函数)。高级入口函数select为选择程序,特别为多种群的使用提供了一个方便的接口界面。在这种情况下,代沟是必须的,这就是整个种群在每一代中没有被完全复制,reins能使用均匀的随机数或基于适应度的重新插入。 5.1.4 交叉算子 交叉算子函数有:recdis,recint,reclin,recmut,recombin,xovdp,xovdprs,xovmp,xovsh,xovshrs,xovsp,xovsprs。 交叉是通过给定的概率重组一对个体产生后代。单点交叉、两点交叉和洗牌交叉是由xovsp、xovdp、xovsh函数分别完成的。缩小代理交叉函数分别是:xovdprs、xovshrs和xovsprs。通用的多点交叉函数是xovmp,它提供均匀交换的支持。为支持染色体实值表示,离散的、中间的和线性重组分别由函数recdis、recint、reclin完成。函数recmut提供具有突变特征的线性重组。函数recombin是一高级入口函数,对所有交叉操作提供多子群支持入口。 5.1.5 变异算子 变异算子函数有:mut,mutate,mutbga。

【实用资料】Matlab遗传算法工具箱简介.pdf

Matlab遗传算法工具箱 基于Matlab平台的遗传算法(GA)工具箱主要有:美国北卡罗来纳大学开发的GAOT、英国谢菲尔德大学开发的GATBX以及GADS(Genetic Algorithm and Direct Search Toolbox)遗传算法与直接搜索工具箱。遗传算法与直接搜索工具箱的界面如图所示: GADS工具箱用户界面 (1)Solver(求解器):用于选择需要的算法。 (2)Problem:需要解决的问题。包括: 1)Fitness function:需要最小化的适应度函数,填写的格式为:@objfun,其中objfun.m是编写适应度函数的M文件,返回一个具体数值。 2)Number of variables:适应度函数的自变量的数目,此处表示优化设计的设计变量个数。 (3)Constraints约束。 1)Linear inequalities线性不等式约束,表示为:* ,填写矩阵A和向 A x b 量b的信息。

2)Linear equalities 线性等式约束,表示为:*Aeq x beq ,填写矩阵Aeq 和向量beq 的信息。 3)Bounds :填写独立变量的取值范围。在Lower 中填写变量的取值下界,Upper 中填写变量的取值上界,均以向量形式表示。 4)Nonlinear constraint function 非线性约束函数,编写非线性约束函数的M 文件nonlcon.m ,则在此处填写@nonlcon 。 (4)Run solver and view results 运行求解器并观察结果。点击Start 即可开始运行。Current iteration 中将显示当前运行的代数。Final point 栏中显示最优解对应的变量的取值。 (5)Option 部分是遗传算法参数的设定。 1)Population 种群参数设定。 Population type 种群类型,设定适应度函数的输入数据类型。工具箱提供了 两种输入类型:双精度、串位,用户还可以编写M 文件自定义输入数据的类型。 Population size 种群规模,定义每一代种群的个体数量。种群规模越大,遗传算法的运行速度越慢。 Creation function 创建函数,用于创建初始种群。 Initial population 初始种群,如果不指定初始种群,则系统将运用创建函数创建初始种群。 Initial scores 初始得分,如果此处没有定义初始得分,则系统应用适应度函数来计算初始得分。 Initial range 初始范围,用于指定初始种群中的各变量的上下限。初始范围用一个矩阵表示,该矩阵行数为2,列数为变量的个数。其中第一行描述初始种群中变量的取值下限,第二行描述初始种群中变量的取值上限。 2)Fitness scaling 适应度测量,包括:Rank 排序尺度变换、Proportional 比例尺度变换、Top 顶级尺度变换、Shift linear 线性转换尺度变换以及Custom 用户自定义。 3)Selection 选择,工具箱提供了以下几种选择函数:Stochastic uniform 随机 均匀分布、 Remainder 剩余、Uniform 均匀分布、Roulette 轮盘赌选择、Tournament 锦标赛选项、Custom 用户自定义。 4)Reproduction 再生参数,需设定可生存到下一代的精英个数Elite count ,以及下一代由交叉产生的部分所占比例Crossover fraction 。

谈谈遗传算法的原理

谈谈遗传算法的原理 发表时间:2011-08-24T09:52:45.450Z 来源:《魅力中国》2011年7月上供稿作者:朱小宝 [导读] 从上表中可以看出,群体经过一代进化之后,其适应度的最大值、平均值都得到了明显的改进。 朱小宝 (南昌航空大学飞行器工程学院江西南昌 330029) 中图分类号:TP301.6 文献标识码:A 文章编号:1673-0992(2011)07-0000-01摘要:自从霍兰德于1975年在他的著作《Adaption im Natural and artificial Systems》中首次提出遗传算法以来,经过了近30年的研究,现在已经发展到了一个比较成熟的阶段,并且在实际中得到了很好的应用。为了更好的了解遗传算法,本文通过最简单的一个手工计算实例来还原遗传算法的全过程。 关键词:遗传算法生物进化染色体种群 自然界的生物进化是按“适者生存,优胜劣汰”规律进行的,而遗传算法就是模拟达尔文的自然选择学说和自然界的生物进化过程的一种计算模型。其基本思想是力求充分模仿这一自然寻优过程的随机性、鲁棒性和全局性,这是一种全局优化搜索算法,因为其直接对结构对象进行操作,不存在求导和函数连续性的限定。 遗传算法采用简单的编码技术来表示各种复杂的结构,并通过对一组编码表示进行简单的遗传操作和优胜劣汰的自然选择来指导学习和确定搜索的方向。遗传算法的操作对象是一群二进制串(称为染色体),即种群。这里每一个染色体都对应问题的一个解。从初始种群出发,采用基于适应值比例的选择策略在当前种群中选择个体,使用杂交和变异来产生下一代种群。如此模仿生命的进化一代代演化下去,直到满足期望的终止条件为止。 遗传算法主要步骤: (1)编码:由于遗传算法不能直接处理解空间的数据,必须通过编码将它们表示成遗传空间的基因型串结构数据。 (2)选择初始种群:随机产生N个初始串结构数据,每个串结构数据称为一个个体,也称为染色体,N个个体体构成了一个种群。 (3)选择适应度函数:遗传算法在搜索过程中一般不需要其他外部信息或知识,仅用适应度函数来评价个体的适应度。 (4)选择:利用选择概率再随机的选择个体和复制数量。选择算子的设计可依据达尔文适者生存的进化论原则,选择概率大的被选中的机会较多。 (5)杂交:对被选中的个体进行随机配对并随机的选择基因交换位,交换基因后产生新的个体,全体新个体构成新的(下一代)种群。 (6)变异:变异操作是按位进行求反,对二二进制编码的个体而言,就是对随机选中的某位进行求反运算,即“0”变“1”,“1”变大“0”。 (7)一代种群通过遗传,即选择、杂交和变异产生下一代种群。新种群又可重复上述的选择、杂交和变异的遗传过程。 为更好地理解遗传算法的运算过程,下面用手工计算来简单地模拟遗传算法的各个主要执行步骤。 求下述二元函数的最大值: Max f(x1,x2)= x12+ x22 S,t, x1∈{1,2,3,4,5,6,7} x2∈{1,2,3,4,5,6,7} (1) 个体编码 遗传算法的运算对象是表示个体的符号串,所以必须把变量 x1, x2 编码为一种符号串。本题中,用无符号二进制整数来表示。因 x1, x2 为 0 ~ 7之间的整数,所以分别用3位无符号二进制整数来表示,将它们连接在一起所组成的6位无符号二进制数就形成了个体的基因型,表示一个可行解。例如,基因型 X=101110 所对应的表现型是:x=[5,6]。个体的表现型x和基因型X之间可通过编码和解码程序相互转换。 (2) 初始群体的产生 群体规模的大小取为4,即群体由4个个体组成,每个个体可通过随机方法产生。 如:011101,101011,011100,111001 (3) 适应度汁算 目标函数总取非负值,并且是以求函数最大值为优化目标,故可直接用目标函数值作为个体的适应度。 (4) 选择运算 我们采用与适应度成正比的概率来确定各个个体复制到下一代群体中的数量。其具体操作过程是: 1.先计算出群体中所有个体的适应度的总和 fi ( i=1.2,…,M ); 2.fi其次计算出每个个体的相对适应度的大小 fi / ,它即为每个个体被遗传到下一代群体中的概率, 3.每个概率值组成一个区域,全部概率值之和为1; 4.最后再产生一个0到1之间的随机数,依据该随机数出现在上述哪一个概率区域内来确定各个个体被选中的次数。

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:线性转换

最新最全的遗传算法工具箱及说明

最新最全的遗传算法工具箱Gaot_v5及说明 Gaot_v5下载地址:https://www.360docs.net/doc/db14180586.html,/mirage/GAToolBox/gaot/gaotv5.zip 添加遗传算法路径: 1、 matlab的file下面的set path把它加上,把路径加进去后在 2、 file→Preferences→General的Toolbox Path Caching里点击update Toolbox Path Cache更新一下,就OK了

遗传算法工具箱Gaot_v5包括许多实用的函数,各种算子函数,各种类型的选择方式,交叉、变异方式。这些函数按照功能可以分成以下几类:

主程序 ga.m提供了 GAOT 与外部的接口。它的函数格式如下: [x endPop bPop traceInfo]=ga(bounds,evalFN,evalOps,startPop,opts,termFN,termOps, selectFn,selectOps,xOverFNs,xOverOps,mutFNs,mutOps) 输出参数及其定义如表 1 所示。输入参数及其定义如表 2 所示。 表1 ga.m的输出参数 输出参数 定义 x 求得的最好的解,包括染色体和适应度 endPop 最后一代染色体(可选择的) bPop 最好染色体的轨迹(可选择的) traceInfo 每一代染色体中最好的个体和平均适应度(可选择的) 表2 ga.m的输入参数 表3 GAOT核心函数及其它函数

核心函数: (1)function [pop]=initializega(num,bounds,eevalFN,eevalOps,options)--初始种群的生成函数 【输出参数】 pop--生成的初始种群 【输入参数】 num--种群中的个体数目 bounds--代表变量的上下界的矩阵 eevalFN--适应度函数 eevalOps--传递给适应度函数的参数 options--选择编码形式(浮点编码或是二进制编码)[precision F_or_B],如 precision--变量进行二进制编码时指定的精度 F_or_B--为1时选择浮点编码,否则为二进制编码,由precision指定精度) (2)function [x,endPop,bPop,traceInfo] = ga(bounds,evalFN,evalOps,startPop,opts,... termFN,termOps,selectFN,selectOps,xOverFNs,xOverOps,mutFNs,mutOps)--遗传算法函数 【输出参数】 x--求得的最优解 endPop--最终得到的种群 bPop--最优种群的一个搜索轨迹 【输入参数】

遗传算法基本原理111

第二章遗传算法的基本原理 2.1 遗传算法的基本描述 2.1.1 全局优化问题 全局优化问题的定义:给定非空集合S作为搜索空间,f:S—>R为目标函数,全局优化问题作为任务给出,即在搜索空间中找到至少一个使目标函数最大化的点。 全局最大值(点)的定义:函数值称为一个全局最大值,当且仅当成立时,被称为一个全局最大值点(全局最 大解)。 局部极大值与局部极大值点(解)的定义: 假设在S上给定了某个距离度量,如果对,,使得对, ,则称x’为一个局部极大值点,f(x’)为一个局部极大 值。当目标函数有多个局部极大点时,被称为多峰或多模态函数(multi-modality function)。 主要考虑两类搜索空间: 伪布尔优化问题:当S为离散空间B L={0,1}L,即所有长度为L且取值为0或1的二进制位串的集合时,相应的优化问题在进化计算领域称为伪布尔优化问题。 连续参数优化问题:当取S伪n维实数空间R n中的有界集合,其中,i = 1, 2, … , n时,相应的具有连续变量的优化问题称为连续参数优化问题。 对S为B L={0,1}L,常采用的度量时海明距离,当时,常采用的度量就是欧氏距离。 2.1.2 遗传算法的基本流程

遗传算法的基本步骤如下: 1)选择编码策略,把参数集合X和域转换为位串结构空间S; 2)定义适应度函数f(X); 3)确定遗传策略,包括群体规模,选择、交叉、变异算子及其概率。 4)生成初始种群P; 5)计算群体中各个体的适应度值; 6)按照遗传策略,将遗传算子作用于种群,产生下一代种群; 7)迭代终止判定。 遗传算法涉及六大要素:参数编码,初始群体的设定,适应度函数的设计,遗传操作的设计,控制参数的设定,迭代终止条件。 2.1.3 遗传编码 由于GA计算过程的鲁棒性,它对编码的要求并不苛刻。原则上任何形式的编码都可以,只要存在合适的对其进行操作的遗传算子,使得它满足模式定理和积木块假设。 由于编码形式决定了交叉算子的操作方式,编码问题往往称作编码-交叉问题。 对于给定的优化问题,由GA个体的表现型集合做组成的空间称为问题(参数)空间,由GA基因型个体所组成的空间称为GA编码空间。遗传算子在GA

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和

简单对比遗传算法与蚁群算法求解旅行商问题

简单对比遗传算法与蚁群算法求解旅行商问题

简单对比遗传算法与蚁群算法求解旅行商问题 1、旅行商 1.1 旅行商问题简介 旅行商问题(Traveling Saleman Problem)又称作旅行推销员问题、货郎担问题等,简称为TSP问题,是最基本的路线问题,该问题是在寻求单一旅行者由起点出发,通过所有给定的需求点之后,最后再回到原点的最小路径成本。最早的旅行商问题的数学规划是由Dantzig(1959)等人提出,规则虽然简单,但在地点数目增多后求解却极为复杂。 TSP问题最简单的求解方法是枚举法。它的解是多维的、多局部极值的、趋于无穷大的复杂解的空间,搜索空间是n个点的所有排列的集合,大小为(n-1)!。有研究者形象地把解空间比喻为一个无穷大的丘陵地带,各山峰或山谷的高度即是问题的极值。求解TSP,则是在此不能穷尽的丘陵地带中攀登以达到山顶或谷底的过程。 1.2 求解TSP方法简介 旅行推销员的问题属于NP-Complete的问题,所以旅行商问题大多集中在启发式解法。Bodin(1983)等人将旅行推销员问题的启发式解法分成三种: 1.2.1 途程建构法(Tour Construction Procedures) 从距离矩阵中产生一个近似最佳解的途径,有以下几种解法: (1)最近邻点法(Nearest Neighbor Procedure):一开始以寻找离场站最近的需求点为起始路线的第一个顾客,此后寻找离最后加入路线的顾客最近的需求点,直到最后。 (2)节省法(Clark and Wright Saving):以服务每一个节点为起始解,根据三角不等式两边之和大于第三边之性质,其起始状况为每服务一个顾客后便回场站,而后计算路线间合并节省量,将节省量以降序排序而依次合并路线,直到最后。 (3)插入法(Insertion procedures):如最近插入法、最省插入法、随意插入法、最远插入法、最大角度插入法等。 1.2.2 途程改善法(Tour Improvement Procedure) 先给定一个可行途程,然后进行改善,一直到不能改善为止。有以下几种解法: (1)K-Opt(2/3 Opt):把尚未加入路径的K条节线暂时取代目前路径中K条节线,并计算其成本(或距离),如果成本降低(距离减少),则取代之,直到无法改善为止,K通常为2或3。 (2)Or-Opt:在相同路径上相邻的需求点,将之和本身或其它路径交换且仍保持路径方向性,并计算其成本(或距离),如果成本降低(距离减少),则取代之,直到无法改善为止。 1.2.3 合成启发法(Composite Procedure) 先由途程建构法产生起始途程,然后再使用途程改善法去寻求最佳解,又称为两段解法(two phase method)。有以下几种解法: (1)起始解求解+2-Opt:以途程建构法建立一个起始的解,再用2-Opt的方式改善途程,直到不能改善为止。

相关文档
最新文档