第七章 遗传算法应用举例

合集下载

遗传算法及应用

遗传算法及应用

遗传算法将问题的求解表示成“染色体”(用编码 表示字符串)。该算法从一群“染色体”串出发, 将它们置于问题的“环境”中,根据适者生存的原 则,从中选择出适应环境的“染色体”进行复制, 通过交叉、变异两种基因操作产生出新的一代更适 应环境的“染色体”种群。随着算法的进行,优良 的品质被逐渐保留并加以组合,从而不断产生出更 佳的个体。这一过程就如生物进化那样,好的特征 被不断的继承下来,坏的特征被逐渐淘汰。新一代 个体中包含着上一代个体的大量信息,新一代的个 体不断地在总体特性上胜过旧的一代,从而使整个 群体向前进化发展。对于遗传算法,也就是不断接 近最优解。
优势
总的来说,遗传算法与其他寻优算法相比的主要特点可以归纳如下: 1)遗传算法是对参数的编码进行操作,而不是对参数本身。 2)遗传算法是从许多初始点开始并行操作,而不是从一个点开始。因而 可以有效地防止搜索过程收敛于局部最优解,而且有较大可能求得全部 最优解。 3)遗传算法通过目标函数来计算适配度,而不要求其他的推导和附属信 息,从而对问题的依赖性较小。 4)遗传算法使用概率的转变原则,而不是确定性原则。 5)遗传算法在解空间内不是盲目地穷举或完全随机测试,而是一种启发 式搜索,其搜索效率往往优于其他算法。 6)遗传算法对于待寻优的函数基本无限制,它既不要求函数连续,更不 要求可微;既可以是数学解析式所表达的显函数,又可以是映射矩阵甚 至是神经网络等隐函数,因而应用范围很广。 7)遗传算法更适合大规模复杂问题的优化。
6.2遗传算法的基本操作与模式理论
下面通过一个简单的例子,详细描述遗传算法的基 本操作过程,然后给出简要的理论分析,从而清晰 地展现遗传算法的原理和特点。 6.2.1遗传算法的基本操作 例:设需要求解的优化问题为当自变量x在0~31之间 取整数值时寻找f(x)=x^2函数的最大值。枚举的方 法是将x取尽所有可能值,观察能否得到最高的目标 函数值。尽管对如此简单的问题该法是可靠的,但 这是一种效率很低的方法。下面运用遗传算法来求 解这个问题。

遗传算法

遗传算法

j=0 选择两个交叉个体 执行交叉 将交叉后的两个新个体 添入新群体中 j = j+2
将复制的个体添入 新群体中
j = j+1
N
j = M? Y
N
j = pc· M? Y
Gen=Gen+1
N
j = pm· M? L· Y
遗传算法应用举例 ——在函数优化中的应用
[例] Rosenbrock函数的全局最大值计算。
bi 2i1 )
i 1

U max U min 2 1
0.3 70352 (12.1 3) /(218 1) 1.052426
二)个体适应度评价
如前所述,要求所有个体的适应度必须为正数或零,不能是负数。
(1) 当优化目标是求函数最大值,并且目标函数总取正值时,可以直接设定
max s.t. 如图所示: 该函数有两个局部极大点, 分别是: f(2.048, -2048) =3897.7342 f(-2.048,-2.0048) =3905.9262 其中后者为全局最大点。 f(x1,x2) = 100 (x12-x22)2 + (1-x1)2 -2.048 ≤ xi ≤ 2.048 (xi=1,2)
变异操作示例
变异字符的位置是随机确定的,如下表所示。某群体有3个个体,每个体含4 个基因。针对每个个体的每个基因产生一个[0, 1] 区间具有3位有效数字的值产生变异。表 中3号个体的第4位的随机数为0.001,小于0.01,该基因产生变异,使3号个体由
下面介绍求解该问题的遗传算法的构造过程:
第一步:确定决策变量及其约束条件。 s.t. 第二步:建立优化模型。 max 第三步:确定编码方法。 用长度为l0位的二进制编码串来分别表示二个决策变量x1,x2。 lO位二进制编码串可以表示从0到1023之间的1024个不同的数,故将x1,x2的 定义域离散化为1023个均等的区域,包括两个端点在内共有1024个不同的离散点。 从离散点-2.048到离散点2.048,依次让它们分别对应于从0000000000(0)到 f(x1,x2) = 100 (x12-x22)2 + (1-x1)2 -2.048 ≤ xi ≤ 2.048 (xi=1,2)

基本遗传算法及的应用举例

基本遗传算法及的应用举例

基本遗传算法及应用举例遗传算法(Genetic Algorithms)是一种借鉴生物界自然选择和自然遗传机制的随机、高度并行、自适应搜索算法。

遗传算法是多学科相互结合与渗透的产物。

目前它已发展成一种自组织、自适应的多学科技术。

针对各种不同类型的问题,借鉴自然界中生物遗传与进化的机理,学者们设计了不同的编码方法来表示问题的可行解,开发出了许多不同环境下的生物遗传特征。

这样由不同的编码方法和不同的遗传操作方法就构成了各种不同的遗传算法。

但这些遗传算法有共同的特点,即通过对生物的遗传和进化过程中的选择、交叉、变异机理的模仿来完成对最优解的自适应搜索过程。

基于此共同点,人们总结出了最基本的遗传算法——基本遗传算法。

基本遗传算法只使用选择、交叉、变异三种基本遗传操作。

遗传操作的过程也比较简单、容易理解。

同时,基本遗传算法也是其他一些遗传算法的基础与雏形。

1.1.1 编码方法用遗传算法求解问题时,不是对所求解问题的实际决策变量直接进行操作,而是对表示可行解的个体编码的操作,不断搜索出适应度较高的个体,并在群体中增加其数量,最终寻找到问题的最优解或近似最优解。

因此,必须建立问题的可行解的实际表示和遗传算法的染色体位串结构之间的联系。

在遗传算法中,把一个问题的可行解从其解空间转换到遗传算法所能处理的搜索空间的转换方法称之为编码。

反之,个体从搜索空间的基因型变换到解空间的表现型的方法称之为解码方法。

编码是应用遗传算法是需要解决的首要问题,也是一个关键步骤。

迄今为止人们已经设计出了许多种不同的编码方法。

基本遗传算法使用的是二进制符号0和1所组成的二进制符号集{0,1},也就是说,把问题空间的参数表示为基于字符集{0,1}构成的染色体位串。

每个个体的染色体中所包含的数字的个数L 称为染色体的长度或称为符号串的长度。

一般染色体的长度L 为一固定的数,如X=10011100100011010100表示一个个体,该个体的染色体长度L=20。

遗传算法

遗传算法

5.3.3 多交配位法
单交配位方法只能交换一个片段的基 因序列,但多交配位方法能够交换多 个片段的基因序列 1101001 1100010 1100000 1101011
交配前
交配后
5.3.4 双亲单子法
两个染色体交配后,只产生一个子染 色体。通常是从一般的交配法得到的 两个子染色体中随机地选择一个,或 者选择适应值较大的那一个子染色体
6.1.4 基于共享函数的小生境实现方 法
6.1.1 小生境遗传算法的生物 学背景
•小生境是特定环境下的生存环境
•相同的物种生活在一起,共同繁 衍后代 •在某一特定的地理区域内,但也 能进化出优秀的个体 •能够帮助寻找全部全局最优解和 局部最优解(峰顶)
6.1.2 基于选择的小生境实现 方法
•只有当新产生的子代适应度超过 其父代个体的适应度时,才进行 替换,否则父代保存在群体中 •这种选择方式有利于保持群体的 多样性 •这种方法有利于使得某些个体成 为它所在区域中的最优个体
5.1.3 实数编码的实现方法(续)
•适合于精度要求较高的问题 •便于较大空间的遗传搜索 •改善了遗传算法的计算复杂性, 提高了效率 •便于遗传算法与经典优化算法混 合使用 •便于设计针对问题的专门知识型 算子 •便于处理复杂的决策约束条件
5.2 选择算子
5.2.1 概率选择算子
5.2.2 适应值变换选择算子
•pm: 变异概率,一般取0.0001—0.1
4.1 问题描述 4.2 问题转换和参数设定 4.3 第0代情况 4.4 第0代交配情况 4.5 第1代情况 4.6 第1代交配情况 4.7 第1代变异情况 4.8 第2代情况 4.9 第2代交配情况
4. 基本遗传算法举例
4.1 问题描述

《遗传算法详解》课件

《遗传算法详解》课件
特点
遗传算法具有全局搜索能力、对问题 依赖性小、可扩展性强、鲁棒性高等 特点。
遗传算法的基本思想
初始化
随机生成一组解作为初始种群。
适应度评估
根据问题的目标函数计算每个解 的适应度值。
选择操作
根据适应度值的大小,选择优秀 的解进行遗传操作。
迭代更新
重复以上过程,直到满足终止条 件。
变异操作
对某些基因进行变异,增加解的 多样性。
《遗传算法详解》 ppt课件
• 遗传算法概述 • 遗传算法的基本组成 • 遗传算法的实现流程 • 遗传算法的优化策略 • 遗传算法的改进方向 • 遗传算法的未来展望
目录
Part
01
遗传算法概述
定义与特点
定义
遗传算法是一种模拟生物进化过程的 优化算法,通过模拟基因遗传和变异 的过程来寻找最优解。
Part
05
遗传算法的改进方向
混合遗传算法的研究
混合遗传算法
结合多种优化算法的优点,提高遗传算法的全局搜索能力和收敛速 度。
混合遗传算法的原理
将遗传算法与其他优化算法(如梯度下降法、模拟退火算法等)相 结合,利用各自的优势,弥补各自的不足。
混合遗传算法的应用
在许多实际问题中,如函数优化、路径规划、机器学习等领域,混 合遗传算法都取得了良好的效果。
自适应交叉率
交叉率控制着种群中新个体的产生速度。自适应交叉率可以根据种群中个体的适应度差 异进行调整,使得适应度较高的个体有更低的交叉率,而适应度较低的个体有更高的交 叉率。这样可以提高算法的搜索效率。
自适应变异率
变异率决定了种群中新个体的产生速度。自适应变异率可以根据种群中个体的适应度进 行调整,使得适应度较高的个体有更低的变异率,而适应度较低的个体有更高的变异率

遗传算法实例

遗传算法实例

1.比较分析()()210sin +=x x x f π,[]2,1-∈x2. Schaffer 函数 F6: ()()[]222212221221001.00.15.0sin5.0,xxx x x x f ++-+-=,100100≤≤-i x ,2,1=i该函数是由J.D.Schaffer 等提出的,它有无限个局部极大点,只有一个全局最大值点()10,0=f,此函数最大值峰周围有一圈脊,它们的取值均为0.990283,由于它的强烈振荡图6-8 Schaffer 函数 F6图像Fig.6-8 image of Schaffer function F6性质以及它的全局最优点被次优点所包围的特性使得一般算法很难找到它的全局最优点,因此很容易停滞在局部极大点。

本文采用具有变动搜索空间能力的子空间更新遗传算法有效地解决此问题。

3. Schaffer 函数 F2:()()[]22221222122101.00.15.0sin5.0,xxx x x x f ++-++=,100100≤≤-i x ,2,1=i图6-1 Schaffer 函数 F2图像 Fig.6-1 image of Schaffer function F2虽然该函数在其定义域内只有一个全局最小值点()00,0=f 。

但由于变量的取值范围大,采用传统的直接搜索法求解时,因搜索空间太大而无法求得全局最优解,采用 SGA 搜索时,由于其局部搜索能力差,因而需要设置相当大的种群规模,需耗费巨大的计算量以得到全局最优解。

如何有效地求解这类搜索空间巨大的全局优化问题一直是人们关注的一个焦点。

本文采用加强局部搜索能力的子空间更新遗传算法有效地解决此问题。

4. Needle-in-a-haystack 函数:(李敏强,2002) ()()()22222205.00.3,y x y x y x f ++⎪⎪⎭⎫ ⎝⎛++=,12.512.5≤≤-ix,2,1=i图6-15 Needle-in-a-haystack 函数图像Fig.6-15 image of Needle-in-a-haystack function此函数有4个局部极值点函数值均为2748.78,只有一个全局最大值()36000,0=f ,极值点跨度较大,该函数将形成不同严重程度的GA 欺骗问题,当模式欺骗性将搜索过程引向欺骗引子,SGA 只能在局部极值点邻域内搜索,最终收敛于局部极值点(4个局部极值点的随机选择),当遗传算子克服了模式欺骗之后,则将群体搜索方向扭转到全局最优解所在的邻域,最终收敛于全局最优解。

遗传算法的详解及应用

遗传算法的详解及应用

遗传算法的详解及应用遗传算法(Genetic Algorithm,GA)是一种模拟自然选择和遗传过程的算法。

在人工智能和优化问题中得到了广泛的应用。

本文将详细介绍遗传算法的基本原理和优化过程,并探讨它在实际应用中的价值和局限性。

一、遗传算法的基本原理遗传算法的基本原理是通过模拟生物进化的过程来寻找一个问题的最优解。

在遗传算法中,优秀的解决方案(也称为个体,Individual)在进化中拥有更高的生存几率,而劣质的解决方案则很快被淘汰。

在遗传算法的过程中,每个个体由若干个基因组成,每个基因代表某种特定的问题参数或者状态。

通过遗传算法,我们可以找到问题最优的解或者其中一个较优解。

遗传算法的基本流程如下:1. 初始化群体(Population):首先,我们需要随机生成一组初始解作为群体的个体。

这些个体被称为染色体(chromosome),每一个染色体都由一些基因(gene)组成。

所以我们可以认为群体是由很多染色体组成的。

2. 选择操作(Selection):选择运算是指从群体中选出一些个体,用来繁殖后代。

其目的是让优秀的个体留下更多的后代,提高下一代的平均适应度。

在选择操作中,我们通常采用轮盘赌选择(Roulette Wheel Selection)法、锦标赛(Tournament)法、排名选择(Ranking Selection)法等方法。

3. 交叉操作(Crossover):交叉运算是指随机地从两个个体中选出一些基因交换,生成新的染色体。

例如,我们可以将染色体A和B中的第三个基因以后的基因交换,从而产生两个新的染色体。

4. 变异操作(Mutation):变异运算是指随机改变染色体中的个别基因,以增加多样性。

例如,我们随机将染色体A的第三个基因改变,从而产生一个新的染色体A'。

5. 适应度评估(Fitness Evaluation):适应度评估是指给每一个个体一个适应度分数,该分数是问题的目标函数或者优化函数。

遗传算法及应用

遗传算法及应用
C = π1 · · · πu−1πuπu+1 · · · πv−1πvπv+1 · · · π102 其中,2 ≤ u < v ≤ 101, 2 ≤ πu < πv ≤ 101, 颠倒u 与 v 之间目标的顺序,此时的新 路径为:
Cnew = π1 · · · πu−1πvπv−1 · · · πu+1πuπv+1 · · · π102 记
表 1: 生物遗传概念在遗传算法中的对应关系
生物遗传概念 适者生存 个体 染色体 基因 适应性 种群 交配 变异
遗传算法中的作用 算法停止时,最优目标值的解有最大的可能被留住 解 解的编码 解中每一分量的特征 适应度函数值 根据适应度函数值选取的一组解 通过交配原则产生一组新解的过程 编码的某一分量发生变化的过程
种群大小:M = 50 最大代数:G = 1000 交叉率: pc = 1,交叉概率为 1 能保证种群的充分进化。 变异率: pm = 0.1, 一般而言,变异发生的可能性较小。 (1) 编码策略 采用十进制编码,用随机数列ω1ω2 · · · ω102作为染色体,其中0 < ωi < 102, i = 2, 3, · · · , 101, ω1 = 0, ω102 = 1 每一个随机序列都和种群中的一个个体相对应。 例如一个 9 目标问题的一个染色体为
经度 纬度 30.3313 6.9348 10.1584 12.4819 31.4847 8.9640 38.4722 20.1731 0.9718 28.1477 50.2111 10.2944 48.2077 16.8889 41.8671 3.5667 27.7133 5.0706 4.9568 8.3669 49.2430 16.7044 11.5812 14.5677 26.7213 28.5667 0.7775 6.9576 18.5245 14.3598 52.5211 15.7957 50.1156 23.7816 19.9857 5.7902 52.8423 27.2880 28.7812 27.6659 33.6490 0.3980 36.9545 23.0265 39.7139 28.4203 36.9980 24.3992 41.1084 27.7149
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

97 第七章 遗传算法应用举例 遗传算法提供了一种求解非线性、多模型、多目标等复杂系统优化问题的通用框架,它不依赖于问题具体的领域。随着对遗传算法技术的不断研究,人们对遗传算法的实际应用越来越重视,它已经广泛地应用于函数优化、组合优化、自动控制、机器人学、图象处理、人工生命、遗传编码、机器学习等科技领域。遗传算法已经在求解旅行商问题、背包问题、装箱问题、图形划分问题等多方面的应用取得了成功。本章通过一些例子,介绍如何利用第五章提供的遗传算法通用函数,编写MATLAB程序,解决实际问题。

7.1 简单一元函数优化实例 利用遗传算法计算下面函数的最大值: ()sin(10)2.0[1,2]fxxxx, 选择二进制编码,种群中个体数目为40,每个种群的长度为20,使用代沟为0.9,最大遗传代数为25。 下面为一元函数优化问题的MATLAB代码。 figure(1); fplot ('variable.*sin(10*pi*variable)+2.0',[-1,2]); %画出函数曲线 % 定义遗传算法参数 NIND= 40; % 个体数目(Number of individuals) MAXGEN = 25; % 最大遗传代数(Maximum number of generations) PRECI = 20; % 变量的二进制位数(Precision of variables) GGAP = 0.9; % 代沟(Generation gap) trace=zeros (2, MAXGEN); % 寻优结果的初始值 FieldD = [20;-1;2;1;0;1;1]; % 区域描述器(Build field descriptor) Chrom = crtbp(NIND, PRECI); % 初始种群 gen = 0; % 代计数器 variable=bs2rv(Chrom,FieldD); % 计算初始种群的十进制转换 ObjV = variable.*sin (10*pi*variable)+2.0; % 计算目标函数值 while gen < MAXGEN, FitnV = ranking (-ObjV); % 分配适应度值(Assign fitness values) SelCh = select ('sus', Chrom, FitnV, GGAP); % 选择 SelCh = recombin ('xovsp',SelCh,0.7); % 重组 SelCh = mut(SelCh); % 变异 variable=bs2rv(SelCh,FieldD); % 子代个体的十进制转换 ObjVSel =variable.*sin(10*pi*variable)+2.0; % 计算子代的目标函数值 [Chrom ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); % 重插入子代的新种群 gen = gen+1; % 代计数器增加 % 输出最优解及其序号,并在目标函数图象中标出,Y为最优解,I为种群的序号 [Y,I]=max(ObjV),hold on; plot (variable (I),Y, 'bo'); trace (1,gen)=max (ObjV); %遗传算法性能跟踪 98

trace (2,gen)=sum (ObjV)/length (ObjV); end variable=bs2rv (Chrom,FieldD); %最优个体的十进制转换 hold on,grid; plot (variable',ObjV','b*'); figure (2); plot (trace (1,:)'); hold on; plot (trace (2,:)','-.');grid; legend ('解的变化','种群均值的变化') 使用基于适应度的重插入确保四个最适应的个体总是被连续传播到下一代。这样在每一代中有36(NIND*GGAP)个新个体产生。 区域描述器FieldD描述染色体的表示和解释,每个格雷码采用20位二进制,变量区间为[-1,2]。 程序段Chrom = crtbp (NIND, PRECI)表示一个初始种群Chrom被函数crtbp创建,它是由NIND个均匀分布长度为PRECI的二进制串矩阵构成。 基于排序的适应度分配计算由程序段FitnV = ranking (-ObjV)实现。 对这个等级评定算法的缺省设置是选择等差为2和使用线性评估,给最适应个体的适应度值为2,最差个体的适应度值为0,这里的评定算法假设目标函数是最小化的,所以ObjV乘了一个负号,使目标函数为最大化。适应度值结果被向量FitnV返回。 选择层使用高级函数选择调用低级函数随机遍历抽样例程sus,SelCh包含来自原始染色体的GGAP *NIND个个体,这些个体将使用高级函数recombin进行重组,recombin使个体通过SelCh被选择再生产,并使用单点交叉例程xovsp,使用交叉概率Px =0.7执行并叉。交叉后产生的子代被同一个矩阵SelCh返回,实际使用的交叉例程通过支持使用不同函数名字串传递给recombin而改变。 为了产生一组子代,变异使用变异函数mut。子代再次由矩阵SelCh返回,变异概率缺省值PM=0.7/Lind= 0.0017,这里Lind是假定的个体长度。再次使用bs2rv,将个体的二进制编码转换为十进制编码,计算子代的目标函数值ObjVSel。 由于使用了代沟,所以子代的数量比当前种群数量要小,因此需要使用恢复函数reins。这里Chrom 和 SelCh是矩阵,包含原始种群和子代结果。这两个事件的第一个被使用单个种群和采用基于适应度的恢复,基于适应度的恢复用SelCh中的个体代替Chrom中最不适应的个体。新种群中的个体是由原始种群中的优良个体和子代中新产生的个体组成。原始种群中个体的目标函数值ObjV随后又作为函数reins的输入参数,子代中个体的目标函数值由ObjVSel提供。Reins返回具有插入子代的新种群Chrom和该种群中个体的目标函数值ObjV。 每次迭代后的最优解和解的均值存放在trace中。这个遗传优化的结果包含在矩阵ObjV中。决策变量的值为variable (I)。 画出迭代后个体的目标函数值分布图和遗传算法性能跟踪图。 遗传算法的运行结果如下:

(1)图7.1为目标函数()sin(10)2.0[1,2]fxxxx,的图象。 99

图7.1 目标函数图像 (2)图7.2为目标函数的图像和初始随机种群个体分布图。

图7.2 初始种群分布图 (3)经过1次遗传迭代后,寻优结果如图7.3所示。x=1.6357,f(x)=3.4729。

图7.3 一次遗传迭代后的结果 (4)经过10次遗传迭代后,寻优结果如图7.4所示。x= 1.8518,f(x)=3.8489。 100

图7.4 经过10次遗传迭代后的结果 (5)经过25次遗传迭代后,寻优结果如图7.5所示。x=1.8505,f(x)=3.8503。

图7.5 经过25次遗传迭代后的结果 (6)经过25次迭代后最优解的变化和种群均值的变化见图7.6。

图7.6 经过25次迭代后最优解的变化和种群均值的变化 7.2 多元单峰函数的优化实例 目标函数是De Jong函数,是一个连续、凸起的单峰函数,它的M文件objfun1包含在GA工具箱软件中。 De Jong函数的表达式为

求解 min()512512ifxx, 这里n是定义问题维数的一个值。这个例子中选取n=20。 由De Jong函数的表达式可以看出,De Jong函数是一个简单的平方和函数,只有一个极小点(0,0,…,0),理论最小值为f(0,0,…,0)=0。 程序的主要变量:个体的数量NIND为40,最大遗传代数为MAXGEN=300,变量维数为NVAR=20,每个变量使用20位表示,即PRECI = 20,使用代沟GGAP=0.9。 下面为求解De Jong函数最小值的MATLAB代码。 % 定义遗传算法参数 NIND = 40; % 个体数目(Number of individuals) MAXGEN =500; % 最大遗传代数(Maximum number of generations)

21()512512, niiifxxx 101

NVAR = 20; % 变量的维数 PRECI = 20; % 变量的二进制位数(Precision of variables) GGAP = 0.9; % 代沟(Generation gap) trace=zeros (MAXGEN,2); % 建立区域描述器(Build field descriptor) FieldD = [rep ([PRECI],[1,NVAR]);rep ([-512;512],[1,NVAR]);rep ([1;0;1;1],[1,NVAR])]; Chrom = crtbp (NIND, NVAR*PRECI); % 创建初始种群 gen = 0; % 代计数器 ObjV = objfun1(bs2rv (Chrom,FieldD)); % 计算初始种群个体的目标函数值 while gen < MAXGEN, % 迭代 FitnV = ranking (ObjV); % 分配适应度值(Assign fitness values) SelCh = select ('sus', Chrom, FitnV, GGAP); % 选择 SelCh = recombin ('xovsp',SelCh,0.7); % 重组 SelCh = mut (SelCh); % 变异 ObjVSel = objfun1 (bs2rv (SelCh,FieldD)); % 计算子代目标函数值 [Chrom ObjV]=reins (Chrom,SelCh,1,1,ObjV,ObjVSel); % 重插入 gen = gen+1; % 代计数器增加 % 输出最优解及其对应的20个自变量的十进制值,Y为最优解,I为种群的序号 trace (gen,1)=min (ObjV); % 遗传算法性能跟踪 trace (gen,2)=sum (ObjV)/length (ObjV); end plot (trace (:,1));hold on; plot (trace (:,2),'-.');grid; legend ('种群均值的变化','解的变化') 区域描述器的构建采用矩阵复制函数rep建立矩阵FieldD,描述染色体的表示和解释。 一个初始种群被函数crtbp创建,随后产生一个矩阵Chrom,它由NIND个均匀分布长度为NVAR*PRECI的二进制串构成。 使用函数objfun1重新计算目标函数,初始种群中的所有个体的目标函数值由下面程序段计算: ObjV = objfun1(bs2rv (Chrom, FieldD)); 函数bs2rv根据域描述器FieldD转换矩阵Chrom的二进制串为实值,返回一实值表现型的矩阵。这个bs2rv返回值矩阵通过直接作为目标函数objfun1的输入变量,目标函数结果被返回在矩阵ObjV中。 这个例子中基于排序的适应度分配计算由下面程序段实现: FitnV = ranking (ObjV); 对这个等级评定算法的缺省设置是选择等差2,使用线性评估,给最适应个体的适应度值为2和最差个体的适应度值为0。适应度值结果被向量FitnV返回。 使用高级函数选择调用低级函数随机遍历抽样例程sus,程序段为: SelCh = select (’sus’, Chrom, FitnV, GGAP); 后面的选择中,SelCh包含来自原始染色体的GGAP *NIND个个体,这些个体将使用高级函数recombin进行重组,程序段为: SelCh = recombin ('xovsp', SelCh, 0.7); 函数recombin使个体通过SelCh被选择再生产,并使用单点交叉例程函数xovsp,使用交叉概率Px =0.7执行并叉。个体作为矩阵SelCh的输入被排序,以便使奇数位置的个体与它相邻的个体进行交叉,如果SelCh个体的数量是奇数个,则最后一个个体不进行交叉而返回。交叉后产生的子代被同一个矩阵SelCh返回,实际使用的交叉例程通过支持使用不同函数名字串

相关文档
最新文档