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

更新时间:2023-12-30 16:26:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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

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

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

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

5.1 工具箱结构

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

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

创建种群 crtbase crtbp crtrp ranking scaling reins rws select sus 创建基向量 创建任意离散随机种群 创建实值初始种群 适应度计算 常用的基于秩的适应度计算 比率适应度计算 选择函数 一致随机和基于适应度的重插入 轮盘选择 高级选择例程 随机遍历采样 变异算子 mut mutate mutbga 离散变异 高级变异函数 实值变异 交叉算子 recdis recint reclin recmut recombin xovdp xovdprs xovmp xovsh

离散重组 中间重组 线性重组 具有变异特征的线性重组 高级重组算子 两点交叉算子 减少代理的两点交叉 通常多点交叉 洗牌交叉 56

xovshrs xovsp xovsprs migrate bs2rv rep 减少代理的洗牌交叉 单点交叉 减少代理的单点交叉 子种群的支持 在子种群间交换个体 实用函数 二进制串到实值的转换 矩阵的复制 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。

57

二进制和整数变异操作由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有如下结构:

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

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 =

58

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

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

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

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

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

??0.7843???9.3961? phen???1.0706???5.2980??FieldD = [8; 1; 10; 1; 1; 0; 0];

Phen = bs2rv(Chrom,FieldD)

% 不包括边界

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

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

能包含零。

5.2.2 函数 crtbase

功能:创建基向量

格式:BaseVec = crtbase(Lind, Base)

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

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

例5.2 函数BaseVec应用举例。下面的程序代码为种群创建一有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

59

功能:创建初始种群 格式:① [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 1?Chrom??? 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]); 运行后得

?4??1?1Chrom???1?4??4?3435521705741517702202030100132102310103013??0?2?? 1?3??0??Lind = 9;

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

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

5.2.4 函数 crtrp

60

功能:创建实值原始种群。遗传算法的第一步是创建由任意个体组成的原始种群。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个变量的随机种群。 定义边界变量:

??100FieldDR???100?5050?3030?20?20??%下界

%上界创建初始种群:

Chrom = crtrp(6,FieldDR)

?40.23??82.06?52.43Chrom???-47.50?-90.50??47.21?-17.1713.2625.6449.10-13.46-25.2928.9513.3515.209.09-25.637.8915.38??-9.09?-2.54?

?10.65?-0.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中的子种群按照下列方案进行有序排列。

61

?IND1SubPop1??INDSubPop?21??????INDSubPopN1???IND1SubPop2???INDSubPop??22??? Chrom???INDNSubPop2??????IND1SubPopSUBPOP???INDSubPop2SUBPOP??????INDSubPopNSUBPOP??????所有子种群必须有相同数量的个体。

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按照迁移个体进行返回。

这个迁移方案如下:

62

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将当前种群变异为新种群。 ① 调用变异函数。

?0?1OldChrom=??0??10001001000010111100010011?1??0??1?

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

NewChrom = mut(OldChrom)

这时,OldChrom将变成NewChrom:

?0?1NewChrom=??0??10101100000010001100010011?1?? 0??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 2??0 4 0 2 1 1 3 1????6 0 2 0 2 1 1 3?Chrom=??

?5 4 7 3 1 1 1 3??1 3 7 3 3 2 3 1???4 1 4 0 0 0 3 3??NewChrom = mut (Chrom,0.0778,BaseV)

因此Chrom将变成

63

?6 1 0 3 2 2 2 2??0 4 0 2 1 1 3 1????6 0 2 0 2 2 1 3?

NewChrom=??5 4 7 3 1 1 1 3???1 3 7 3 0 2 3 1???4 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 0??0 1 0 0 1 0 1 1??OldChrom=??1 0 0 1 1 0 0 0????0 0 0 0 0 0 1 0?

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

?0 0 1 1 1 0 1 0??0 1 0 0 1 0 1 1?? NewChrom=??1 0 0 1 1 0 0 1???0 0 0 0 0 0 1 0??对于十进制种群,选取MUT_F='mutbga'。

64

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

?2 0 0 2 3 1 2 1??5 4 4 3 0 1 3 3????6 6 5 2 2 1 3 2?Chrom=??

?3 2 0 2 3 1 3 3??3 3 7 3 3 3 1 1???2 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 1??5 4 4 3 0 1 3 3????6 6 5 2 2 1 3 2?NewChrom=??

3 2 0 2 3 1 3 3???3 3 7 3 3 3 1 1???2 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变异实值种群应用举例。 考虑下面具有三个实值个体的种群:

65

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

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

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

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

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

?40.23-17.1728.9515.38??OldChrom=?82.0613.2613.35-9.09????52.4325.6415.20-2.54??%父代1%父代2%父代3

执行线性重组:

NewChrom = reclin (OldChrom)

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

?0.78?Alpha????1.05?%子代1%子代2

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

?72.976.6416.74-3.77?NewChrom=???84.2514.8512.54-10.37?%Alpha(1,;),父1和2%Alpha(2,;),父1和2

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

?72.976.6416.74NewChrom=??84.2514.8512.54??52.4325.6415.20-3.77? -10.37??-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是一最多有两个参数的任选向量。

71

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??82.064213.263913.3596-9.0916??OldChrom=??52.439625.641015.2014-2.5435????-47.538149.19639.095410.6521?边界定义如下:

%%%%p1p2 p3p4??100?50?30?20?FieldDR=?503020??100?

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

NewChrom = recmut(OldChrom,FieldDR)

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

?1?1?1?1?RecMx?????1?1?1?1?%p1&p2%p3&p4

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

?0.12500.12500.12500.1250?delta=???0.00050.00050.00050.0005??1.39371.0143-0.5196-0.8157?Diff=???-10.57122.4906-0.64561.3952?重组后NewChrom成为:

%p1&p2

%p3&p4%p1&p2%p3&p4

?57.6637-23.517730.000017.4281??64.638619.605011.4106-11.1314?? NewChrom=??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)

72

delta??ai2?i

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

Diff?parent1-parent2

parent1-parent2这个重组算子产生其双亲(线性重组)定义方向的子代。它经常超出双亲定义的范围或一个父亲定义的方向。子代的这点是由突变算子的特征定义的,小步长情况产生的概率要比大步长产生的概率来得大(参看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 -20? BaseV=??? 100 50 30 20?Chrom = crtrp(5,BaseV); % 产生5个个体的种群

?13.3546 -44.1138 -27.0433 9.5997?? 64.6017 -13.9689 4.2634 -2.7251???Chrom?? 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.7251???NewChrom=? 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); % 参数选取单点交叉

73

?13.3546 -44.1138 4.2634 -2.7251?? 64.6017 -13.9689 -27.0433 9.5997???NewChrom=? 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 -1?

FieldDR1=??? 10 5 3 1?Chrom=crtrp(6,FieldDR1); % 产生6个个体的父代种群

74

1.6612 2.9129 0.6440?? -5.7602? -0.0318? -3.6906 -2.8958 -0.4736?? -4.0459 1.9164 0.5073? Chrom=? -4.1902?? 3.4551 -4.8514 0.7268 0.3193??? 9.1598 -2.1181 0.3613 -0.5719??? 5.3310 3.1673 -1.5358 0.2042????FieldDR2=[-100,-50,-30,-20;100,50,30,20]; % 定义边界变量

? -100 -50 -30 -20?

FieldDR2=??? 100 50 30 20?SelCh=crtrp(2,FieldDR2); % 产生2个个体的子代种群

SelCh=? 43.2736 26.4492 13.9071?-42.7701??

-49.7599 -36.9018 12.1112 -11.6291??插入所有子代到种群中:

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.6291?Chrom=??

? 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.5073?

Chrom=?? 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]

75

? -5.7602 1.6612 2.9129 0.6440?? -0.0318 -3.6906 -2.8958 -0.4736???? -4.1902 -4.0459 1.9164 0.5073?

Chrom=?? 3.4551 -4.8514 0.7268 0.3193??? 9.1598 -2.1181 0.3613 -0.5719??? -42.7701 43.2736 26.4492 13.9071??利用函数reins,将两个子种群Chrom和Selch插入到当前种群。

Chrom = reins(Chrom,SelCh,2)

? -5.7602 1.6612 2.9129 0.6440?? -42.7701 43.2736 26.4492 13.9071???? -4.1902 -4.0459 1.9164 0.5073?

Chrom=?? 3.4551 -4.8514 0.7268 0.3193??? 9.1598 -2.1181 0.3613 -0.5719??? -49.7599 -36.9018 12.1112 -11.6291??参见:select

5.2.16 函数 rep

功能:矩阵复制。

格式:MatOut = rep(MatIn,REPN) 详细说明:rep是一个低级复制函数,通常不直接使用,它可被GA工具箱中许多函数调用。 rep完成矩阵MatIn的复制,指明复制次数REPN,返回复制后的矩阵MatOut。REPN包含每个方向的复制次数。REPN(1)指明纵向复制次数,REPN(2)指明水平方向复制次数。

例5.16 矩阵复制函数rep应用举例。考虑下面矩阵MatIn:

?1234?MatIn????5678?

执行下列复制:

(1) MatOut = rep(MatIn,[1 2]);

?12341234? MatOut=???56785678?(2) MatOut = rep(MatIn,[2 1]);

?1?5MatOut=??1??5262637374?8?? 4??8?(3) MatOut = rep(MatIn,[2 3]);

76

?1?5MatOut=??1??526263737484815152626373748481515262637374?8?? 4??8?5.2.17 函数 rws

功能:轮盘赌选择。

格式:NewChrIx = rws(FitnV,Nsel)

详细说明:rws在当前种群中按照它们的适应度FitnV选择Nsel个个体繁殖。 NewChrIx = rws(FitnV,Nsel)使用轮盘赌选择从一个种群中选择Nsel个个体。FitnV是一包含种群中每个个体性能尺寸的列向量,它能通过使用函数ranking或scaling计算每个个体的适应度水平来得到。返回值NewChrIx是为育种选择的个体的索引值,按照它们的选择顺序排列,这些选择的个体能通过评估函数Chrom(NewChrIx,:)恢复。

rws是一低级选择函数,通常被select调用。

例5.17 轮盘赌选择方法举例。考虑8个个体的种群,假设已计算出适应度FitnV: FitnV = [1.50; 1.35; 1.21; 1.07; 0.92; 0.78; 0.64; 0.5] 选择6个个体的索引: NewChrIx = rws(FitnV,6) NewChrIx成为:

?2??5????1?NewChrIx=??

?1??3????7?算法说明:通过计算适应度向量的累加和完成轮盘赌选择的表格,并产生随机分布在[0,sum(FitnV)]区间内的Nsel个实数,被选择个体的索引通过比较向量累加和产生的编号来决定。一个个体被选择的概率由下式给出:

F(xi)?f(xi)Nind

i?f(x)i?1这里,f(xi)是个体xi的适应度,F(xi)是这个个体被选择的概率。

参见:select,sus,reins,ranking,scaling

5.2.18 函数 scaling

功能:线性适应度计算。

格式:FitnV = scaling(ObjV,Smul)

详细说明:scaling转换一种群的目标值ObjV为由Smul的值决定上界的适应度值。例如:

F(xi)?af(xi)?b

77

这里f(xi)是个体xi的适应度,a是一标量系数,b是一偏移值,F(xi)是这个个体产生的适应度值。

如果fave是当前代中目标值的平均值,种群中最大适应度值是上界fave?Smul ,如果省略Smul,则Smul假设为2,这个种群的平均适应度值也为fave。

例5.18 下面为目标函数值的线性适应度计算举例。 (1) ObjV=[1;2;3;4;5;6] FitnV = scaling(ObjV)

? 0?? 1.4000???? 2.8000?

FitnV=?? 4.2000??? 5.6000??? 7.0000??在一些情况下,一些目标值是负的,scaling试图提供偏移值b,确保计算适应度值大于零。

(2) ObjV=[1;2;4;3;9;13;5;6] FitnV = scaling(ObjV)

delta = 7.6250 ;a = 0.7049 ;b =1.5861。

?2.2910??2.9959????4.4057???3.7008? FitV=??7.9303???10.7500???5.1107???5.8156????算法说明:scaling使用Goldberg描述的线性比率法。

注意:线性比率不适合目标函数返回负的适应度值的情形。 参见:ranking,reins,rws,select,sus

5.2.19 函数 select

功能:从种群中选择个体(高级函数)。 格式:① SelCh = select(SEL_F,Chrom,FitnV)

② SelCh = select(SEL_F,Chrom,FitnV,GGAP) ③ SelCh = select(SEL_F,Chrom,FitnV,GGAP,SUBPOP)

详细说明:利用函数select从种群Chrom中选择优良个体,并将选择的个体返回到新种群SelCh中。Chrom和SelCh中每一行对应一个个体。

SEL_F是一字符串,包含一低级选择函数名如rws或sus。

FitnV是一列向量,包含种群Chrom中个体的适应度值。这个适应度值表明了每个个体被选择的预期概率。

GGAP是一可选参数,指出了代沟,部分种群被复制。如果GGAP缺省或为NaN,则GGAP

78

假设为1.0。GGAP也可大于1,允许子代数多于父代的数量,如Chrom超过一个子种群,GGAP指明每个子种群被选择的个体数量是与子种群的大小有关的。

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

例5.19 函数select的应用举例。考虑以下具有8个个体的种群Chrom,适应度值为FitnV:

?111?212??313?414Chrom=??515??616?717??818?21?22??23??24?25??26?27??28??

FitnV = [1.50; 1.35; 1.21; 1.07; 0.92; 0.78; 0.64; 0.5]

使用随机遍历抽样sus选择8个个体:

SelCh = select('sus',Chrom,FitnV) SelCh成为:

?7?1??6?1Selch=??5??2?3???4171116111512131427?21??26??21? 25??22?23??24??假设,Chrom由两个子种群组成,通过轮盘赌选择sus对每个子种群选择150% 的个体。

FitnV = [1.50; 1.16; 0.83; 0.50; 1.50; 1.16; 0.83; 0.5] SelCh = select('sus',Chrom,FitnV,1.5,2) SelCh变成:

?3?2??1??2?2?1Selch=??6??7?7??6??7??513121112121116171716171523?22??21??22?22??21?26??27?27??26??27?25??算法说明:select检测输入参数的一致性并调用低级选择函数,如select调用使用多子种群,

则低级选择函数分别被各子种群调用。

79

参见:rws,sus,ranking,scaling,recombin,mutate

5.2.20 函数 sus

功能:随机遍历抽样

格式:NewChrIx = sus(FitnV,Nsel)

详细说明:sus按照个体在当前种群中的适应度FitnV为繁殖概率性选择Nsel个个体。 NewChrIx = sus(FitnV,Nsel)使用随机遍历抽样从种群选择Nsel个个体。FitnV是一列向量,包含种群中个体的适应度值,它可通过函数ranking 或scaling计算种群中个体适应度水平得到。返回值NewChrIx是为培养选择的个体索引值,是按它们选择的顺序排列的。这个选择的个体可通过评估Chrom(NewChrIx,:)恢复。

Sus是一低级选择函数,通常被select调用。

例5.20 随机遍历抽样函数sus的应用举例。考虑以下具有8个个体的种群Chrom,适应度值为FitnV:

FitnV = [1.50; 1.35; 1.21; 1.07; 0.92; 0.78; 0.64; 0.5] 选择6个个体的索引: NewChrIx = sus(FitnV,6) NewChrIx成为:

?2??5????3?NewChrIx=??

?1??7????4?算法说明:通过获得适应度向量FitnV的累加和完成随机遍历抽样的表格,产生Nsel个在[0,SUM(FitnV)]内的相等空间编号。因为只有一个随机数产生,所以其它使用是来自那些点的相等空间。被选择个体的索引是通过比较产生的数与向量累加和来决定的。一个个体被选择的概率由下式给出:

F(xi)?f(xi)?f(x)ii?1Nind

这里,f(xi)是个体xi的适应度,F(xi)是这个个体被选择的概率。

参见:select,rws,reins,ranking,scaling

5.2.21 函数 xovdp

功能:两点交叉

格式:NewChrom = xovdp(OldChrom,XOVR)

详细说明:xovdp完成当前种群OldChrom中一对个体按交叉概率XOVR进行交叉,返回交配后的新种群NewChrom,OldChrom和NewChrom的一行对应一个个体,它可用于任何染色体表示。

XOVR是一可选参数,说明交叉概率,如果省略、空或为NaN,则假设XOVR=0.7。 交配的对是有序的,即奇行与它下一个偶行配对。如果矩阵OldChrom行数是奇数行,则

80

最后一行不参加交配,因此,种群将近交配要求组织成连续的对。这可使用函数ranking计算每个染色体的适应度并用选择函数(select,sus 或rws)用它在种群的适应度相关的概率选择个体来完成。

xovdp是一低级交叉函数通常被函数recombin调用。

例5.21 两点交叉函数xovdp的应用举例。下面程序代码为:首先创建初始种群,然后利用函数xovdp进行两点交叉。

Chrom=crtbp(5,6); % 创建初始种群

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

??0 0 1 1 1 1????1 1 0 0 1 0??NewChrom = xovdp(Chrom,0.7);

运行后得

?0 0 0 0 1 1??0 1 0 0 0 0???NewChrom=?1 0 1 0 0 1?

??0 0 1 1 1 1????0 1 0 0 1 1??算法说明:考虑下面两个相同长度的二进制串:

A1 = [1 1 0 1 0 1] A2 = [1 0 1 0 1 0]

两点交叉包括选择两个均匀分布的随机整数k1,k2,在[1,leng(A1)]间、在A1和A2间交换k1+1到k2之间的各变量,如果这个交叉k1=3,k2=5,则A1,A2成为:

A1? = [1 1 0 0 1 1] A2? = [1 0 1 1 0 0]

xovdp用适当的参数调用xovmp。

参见:xovdprs,xovsp,xovsh,xovmp,recombin,select

5.2.22 函数 xovdprs

功能:减少代理的两点交叉

格式:NewChrom = xovdprs(OldChrom,XOVR)

详细说明:xovdprs在当前种群OldChrom一对个体间按交叉概率XOVR进行减少代理两点交叉并返回交配后的新种群NewChrom。在OldChrom和NewChrom中每一行对应一个个体。它适用于任意染色体表示。

XOVR是一可选参数,指明交叉概率,如果省略、空或为NaN,则设XOVR=0.7。

交配的对是有序的,即奇行与它下一个偶行配对。如果矩阵OldChrom行数是奇数行,则最后一行不参加交配,因此,种群将按交配要求组织成连续的对。这可使用函数ranking计算每个染色体的适应度,并由选择函数(select,sus或rws)用它在种群的适应度相关的概率选择个体来完成。

xovdprs是一低级交叉函数,通常被函数recombin调用。

例5.22 减少代理的两点交叉函数xovdprs的应用举例。下面程序代码为5个个体种群的两点交叉示例。

81

Chrom=crtbp(5,6); %创建初始种群

?1 0 1 1 1 0??0 1 0 1 1 1???Chrom=?0 0 1 1 0 1? % 5个个体的种群

??0 0 1 1 1 1????1 1 0 0 1 0??NewChrom = xovdprs(Chrom,0.7);

运行后得

?0 0 0 0 1 0??0 1 0 0 0 1???NewChrom=?1 0 1 0 0 1?

??0 0 1 1 1 1????0 1 0 0 1 1??算法说明:参见两点交叉函数xovdp。

交叉对任何可能点总是产生新个体,减少代理算子限制它。它通过限制交叉点的位置来完成,例如,交叉点只能发生在基因不同的地方。

xovdprs使用适当参数调用xovmp。

参见:xovdp,xovsprs,xovshrs,xovmp,recombin,select

5.2.23 函数 xovmp

功能:多点交叉

格式:NewChrom = xovmp(OldChrom,XOVR,Npt,Rs)

详细说明:xovmp在当前种群OldChrom成对个体间多点交叉并返回交配后的新种群NewChrom。在OldChrom 和NewChrom中每一行对应一个体。它适用于任意染色体表示。

XOVR是一可选参数,指明交叉概率,如果省略、为空或NaN,则设XOVR=0.7。

Npt是一可选参数,指明交叉点数。0——洗牌交叉;1——单点交叉;2——两点交叉。如果省略或为NaN,则假设Npt=0。

Rs是一可选参数,指明使用减少代理。0——不减少代理;1——减少代理。如果省略、空或为NaN,则设Rs=0。

交配的对是有序的,即奇行与它下一个偶行配对。如果矩阵OldChrom行数是奇数行,则最后一行不参加交配,因此,种群将按交配要求组织成连续的对。这可使用函数ranking计算每个染色体的适应度,并用选择函数(select,sus或rws)用它在种群的适应度相关的概率选择个体来完成。

xovmp是一低级交叉函数,通常被其它交叉函数调用。如果被recombine、xovmp调用执行没有减少代理的洗牌交叉,则等同于xovsh。

例5.23 多点交叉函数xovmp的应用举例。下面程序代码为5个个体种群的多点交叉示例。 Chrom=crtbp(5,6); % 创建初始种群

?1 0 1 1 1 0??0 1 0 1 1 1???Chrom=?0 0 1 1 0 1? % 5个个体的种群

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

82

NewChrom = xovmp(Chrom, 0.7,1,1); 运行后得

?0 0 0 0 0 0??0 1 0 0 1 1???NewChrom=?1 0 1 1 1 1?

??0 0 1 0 0 1????0 1 0 0 1 1??算法说明:多点交叉函数xovmp的使用可参考单点交叉xovsp、两点交叉xovdp和洗牌交叉

xovsh;也可参考具有减少代理的单点交叉xovsprs、两点交叉xovdprs和洗牌交叉xovshrs。

参见:xovsp,xovdp,xovsh,xovsprs,xovdprs,xovshrs,recombin

5.2.24 函数 xovsh

功能:洗牌交叉

格式:NewChrom = xovsh(OldChrom,XOVR)

详细说明:xovsh在当前种群OldChrom一对个体间按交叉概率XOVR进行洗牌交叉并返回交配后的新种群NewChrom。在OldChrom和NewChrom中每一行对应一个体。它适用于任意染色体表示。

XOVR是一可选参数,指明交叉概率,如果省略、为空或NaN,则设XOVR=0.7。

交配的对是有序的,即奇行与它下一个偶行配对。如果矩阵OldChrom行数是奇数行,则最后一行不参加交配,因此,种群将按交配要求组织成连续的对。这可使用函数ranking计算每个染色体的适应度,并用选择函数(select,sus或rws)用它在种群的适应度相关的概率选择个体来完成。

xovsh是一低级交叉函数通常被函数recombin调用。

例5.24 洗牌交叉函数xovsh的应用举例。下面程序代码为5个个体种群的洗牌交叉示例。 Chrom=crtbp(5,6); % 创建初始种群

?0 1 1 0 1 0??1 1 1 0 1 1???Chrom=?0 1 1 1 0 1? % 5个个体的种群

??1 0 1 1 1 1????0 1 0 0 1 1??NewChrom = xovsh(Chrom, 0.7);

运行后得

?0 0 1 1 0 0??1 1 1 0 0 0???NewChrom=?1 0 1 1 1 1?

??0 1 1 0 0 0????1 0 0 1 0 0??算法说明:洗牌交叉是一种单点交叉,但在位交换之间,它们可在双亲间随意洗牌。在

重组后,子代的各位是没有洗牌的,这种移位就像在每次交叉时,位可任意再分配。

Xovsh使用适当的参数调用xovmp。

参见:xovshrs,xovsp,xovdp,xovmp,recombin,select

83

5.2.25 函数 xovshrs

功能:减少代理的洗牌交叉

格式:NewChrom = xovshrs(OldChrom,XOVR)

详细说明:xovshrs在当前种群OldChrom一对个体间按交叉概率XOVR进行减少代理的洗牌交叉并返回交配后的新种群NewChrom。在OldChrom 和NewChrom中每一行对应一个体。它适用于任意染色体表示。

XOVR是一可选参数指明交叉概率,如果省略、为空或NaN,则设XOVR=0.7。

交配的对是有序的,即奇行与它下一个偶行配对。如果矩阵OldChrom行数是奇数行,则最后一行不参加交配,因此,种群将按交配要求组织成连续的对。这可使用函数ranking计算每个染色体的适应度并用选择函数(select, sus 或rws)用它在种群的适应度相关的概率选择个体来完成。

xovshrs是一低级交叉函数通常被函数recombin调用。 例5.25 减少代理的洗牌交叉函数xovshrs的应用举例。下面程序代码为5个个体种群的减少代理的洗牌交叉示例。

Chrom=crtbp(5,6); % 创建初始种群

? 0 0 1 1 1 0??1 0 1 0 0 1???Chrom=?1 0 0 1 0 1? % 5个个体的种群

??0 1 0 1 0 1????1 1 1 0 1 1??NewChrom = xovshrs(Chrom, 0.7);

运行后得

?0 0 1 1 0 0??1 1 1 0 0 0???NewChrom=?1 1 1 1 0 1?

??0 0 1 0 1 0????1 0 0 1 0 0??算法说明:洗牌交叉算法参见xovsh。

交叉对任何可能点总是产生新个体,减少代理算子限制它。它是通过限制交叉点的位置来完成的,例如,交叉点只能发生在基因不同的地方。

xovshrs使用适当参数调用xovmp。

参见:xovsh,xovsprs,xovdprs,xovmp,recombin,select

5.2.26 函数 xovsp

功能:单点交叉

格式:NewChrom = xovsp(OldChrom,XOVR)

详细说明:xovsp完成当前种群OldChrom中一对个体按交叉概率XOVR进行单点交叉,返回交配后的新种群NewChrom,OldChrom和NewChrom的一行对应一个个体,它可用于任何染色体表示。

XOVR是一可选参数,说明交叉概率,如果省略、空或为NaN,则假设XOVR=0.7。 交配的对是有序的,即奇行与它下一个偶行配对。如果矩阵OldChrom行数是奇数行,则最后一行不参加交配,因此,种群将近交配要求组织成连续的对。这可使用函数ranking计算

84

每个染色体的适应度并用选择函数(select, sus 或rws)用它在种群的适应度相关的概率选择个体来完成。

xovsp是一低级交叉函数通常被函数recombin调用。

例5.26 单点交叉函数xovsp的应用举例。下面程序代码为:首先创建2个个体的种群,然后利用函数xovsp,进行单点交叉。

Chrom=crtbp(2,8); % 创建2个个体的种群

?1 1 0 0 0 0 1 1? Chrom=???0 1 0 1 1 1 0 1?NewChrom=xovsp(Chrom,0.5); % 交叉概率为0.5 则Chrom成为:

?1 1 0 0 0 1 0 1?NewChrom=?? 0 1 0 1 1 0 1 1??NewChrom=xovsp(Chrom,3); % 交叉点 k=3

则Chrom成为:

?1 1 0 1 1 1 0 1?NewChrom=?? 0 1 0 0 0 0 1 1??算法说明:考虑下面两个相同长度的二进制串:

A1 = [1 1 0 1 0 1] A2 = [1 0 1 0 1 0]

单点交叉包括选择一个均匀分布的随机整数k,在[1,leng(A1)-1]间、在A1和A2间交换k+1到leng(A1)之间的各变量,如果这个交叉k=3,则A1,A2成为:

A1* = [1 1 0 0 1 0] A2* = [1 0 1 1 0 1]

xovsp使用适当的参数调用xovmp。

参见:xovsprs,xovdp,xovsh,xovmp,recombin,select

5.2.27 函数 xovsprs

功能:减少代理的单点交叉

格式:NewChrom = xovsprs(OldChrom, XOVR)

详细说明:xovsprs在当前种群OldChrom一对个体间按交叉概率XOVR进行减少代理的单点交叉并返回交配后的新种群NewChrom。在OldChrom 和NewChrom中每一行对应一个体。它适用于任意染色体表示。

XOVR是一可选参数指明交叉概率,如果省略、空或为NaN,则设XOVR=0.7。

交配的对是有序的,即奇行与它下一个偶行配对。如果矩阵OldChrom行数是奇数行,则最后一行不参加交配,因此,种群将按交配要求组织成连续的对。这可使用函数ranking计算每个染色体的适应度并用选择函数(select,sus或rws)用它在种群的适应度相关的概率选择个体来完成。

xovsprs是一低级交叉函数通常被函数recombin调用。 例5.27 减少代理的单点交叉函数xovsprs的应用举例。下面程序代码为2个个体种群的减少代理单点交叉示例(交叉概率为0.7)。

Chrom=crtbp(2,8); % 创建2个个体的种群

85

?1 1 0 0 0 0 1 1? Chrom=???0 1 0 1 1 1 0 1?NewChrom=xovsprs(Chrom,0.7); % 交叉概率为0.7 则Chrom成为如下形式:

? 1 1 0 0 1 1 0 1? NewChrom=??? 0 1 0 1 0 0 1 1?算法说明:单点交叉参见xovsp。

交叉对任何可能点总是产生新个体,减少代理算子限制它。它是通过限制交叉点的位置来完成的,例如,交叉点只能发生在基因不同的地方。

xovsprs使用适当的参数调用xovmp。

参见:xovsp,xovdp,xovdprs,xovsh,xovshrs,xovmp,recombin,select

86

本文来源:https://www.bwwdw.com/article/021x.html

Top