基本遗传算法.docx
- 文档编号:5715471
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:18
- 大小:80.49KB
基本遗传算法.docx
《基本遗传算法.docx》由会员分享,可在线阅读,更多相关《基本遗传算法.docx(18页珍藏版)》请在冰豆网上搜索。
基本遗传算法
遗传算法
1、遗传算法生物学基础和基本理论
达尔文自然选择学说认为,生物要生存下去,就必须进行生存斗争。
生存斗争包括种内斗争、种间斗争以及生物跟无机环境之间的斗争三个方面。
在生存斗争中,具有有利变异(mutation)的个体容易存活下来,并且有更多的机会将有利变异传给后代;具有不利变异的个体就容易被淘汰,产生后代的机会也少得多。
因此,凡是在生存斗争中获胜的个体都是对环境适应性比较强的。
达尔文把这种在生存斗争中适者生存,不适者淘汰的过程叫做自然选择。
达尔文的自然选择学说表明,遗传和变异是决定生物进化的内在因素。
遗传是指父代与子代之间,在性状上存在的相似现象。
变异是指父代与子代之间,以及子代的个体之间,在性状上或多或少地存在的差异现象。
在生物体内,遗传和变异的关系十分密切。
一个生物体的遗传性状往往会发生变异,而变异的性状有的可以遗传。
遗传能使生物的性状不断地传送给后代,因此保持了物种的特性,变异能够使生物的性状发生改变,从而适应新的环境而不断地向前发展。
生物的各项生命活动都有它的物质基础,生物的遗传与变异也是这样。
根据现代细胞学和遗传学的研究得知,遗传物质的主要载体是染色体(chromsome),染色体主要是由DNA(脱氧核糖核酸)和蛋白质组成,其中DNA又是最主要的遗传物质。
现代分子水平的遗传学的研究又进一步证明,基因(gene)是有遗传效应的片段,它储存着遗传信息,可以准确地复制,也能够发生突变,并可通过控制蛋白质的合成而控制生物的性状。
生物体自身通过对基因的复制(reproduction)和交叉(crossover),即基因分离、基因自由组合和基因连锁互换)的操作使其性状的遗传得到选择和控制。
同时,通过基因重组、基因变异和染色体在结构和数目上的变异产生丰富多采的变异现象。
需要指出的是,根据达尔文进化论,多种多样的生物之所以能够适应环境而得以生存进化,是和上述的遗传和变异生命现象分不开的。
生物的遗传特性,使生物界的物种能够保持相对的稳定;生物的变异特性,使生物个体产生新的性状,以至于形成了新的物种,推动了生物的进化和发展。
由于生物在繁殖中可能发生基因交叉和变异,引起了生物性状的连续微弱改变,为外界环境的定向选择提供了物质条件和基础,使生物的进化成为可能。
人们正是通过对环境的选择、基因的交叉和变异这一生物演化的迭代过程的模仿,从而提出了能够用于求解最优化问题的强鲁棒、自适应的遗传算法。
遗传算法(GeneticAlgorithm--GA)起源于对生物系统进行的计算机模拟研究,是模拟生物在自然环境中的遗传和进化过程而形成的一种自适应优化概率搜索算法。
它最早由美国Michigan大学的Holland教授提出,起源于20世纪60年代对自然和人工自适应系统的研究。
20世纪70年代Holland教授的学生DeJong基于遗传算法在计算机上进行了大量的纯数值函数优化计算实验。
最后在20世纪80年代由Goldberg进行归纳总结,形成了遗传算法的基本框架。
遗传算法是基于自然界的生物遗传进化机理而演化出的一种自适应优化算法。
针对不同类型的问题,人们设计出了各种不同的编码方法和不同的进化算子,从而构成了不同类型的遗传进化机制,以适应解决各种不同的问题,Goldberg对这些算法加以总结,归纳出这些不同的遗传算法之间的共同特点,即:
遗传和进化过程都是通过选择、交叉和变异的机理来完成对问题最优解的自适应搜素过程,由此提出了一种统一了所有遗传算法本质特征的最基本的遗传算法——基本遗传算法(SimpleGeneticAlgorithms,SGA)。
在基本遗传算法中只使用选择算子、交叉算子、和变异算子这三种基本的遗传算子,从而给其他各类遗传算法提供了基本的算法框架。
2、遗传算法的基本思想
我们以引用生物遗传学上的相关术语来描述遗传算法的基本思想.遗传算法根据待解问题的要求,从代表问题可能潜在解集的一个种群(population)开始,而一个种群是由经过基因(gene)编码(coding)的一定数目的个体(individual)组成.每个个体实际上是带有特征的染色体(chromosome)实体.染色体作为遗传物质的主要载体,其不同的基因组合决定了个体的性能表现,如黑头发的特征是由染色体中控制这一特征的某种基因组合决定的.因此遗传算法中最基础的工作就是实现染色体个体的性能表现,即:
实现个体的编码工作。
由于仿照基因编码的工作很复杂,针对不同的问题编码都有所不同,在基本遗传算法中为了增强算法的适应性,我们往往简化编码工作,而采用二进制编码。
当完成编码工作,初代种群产生之后,则对种群按照“优胜劣汰,适者生存”的进化原理来逐代(generation)进化,在每一代中,都是根据该代种群个体的适应度值(fitness)的大小来挑选下一代个体群体,并借助于自然遗传学中的遗传算子(geneticoperator)来进行组合交叉操作(crossover)、变异操作(mutation)和选择操作(Selection),从而产生出代表新的子代解集的种群。
正是这个进化过程使得种群具备了生物界所特有的进化优化机制,使得种群能够像自然界那样让后代种群比父代种群具有更强的适应性,从而更加适应于所处环境。
这样进化到最后一代种群中的最优个体经过解码操作(DecodingOperator),即为所求问题的近似最优解。
2、遗传算法的基本结构
遗传算法借助生物遗传学的观点,通过对生物遗传和进化过程中的选择、交叉、变异机理的模仿,来完成对问题最优解的自适应搜索过程,以实现各个个体的适应性的提高。
遗传算法的流程图如下所示,主要包括:
染色体编码、产生初始群体,计算适应度、进化操作等几大部分,下面将分别进行介绍。
基本遗传算法的算法流程图
基本遗传算法是一个迭代过程,它模仿生物在自然环境中的遗传和进化机理,反复将选择算子、交叉算子、变异算子作用于群体,最终可得到问题的最优解或近似最优解。
虽然算法的思想比较单纯,结构也比较简单,但它却也具有一定的实用价值,能够解决一些复杂系统的优化计算问题。
2.1编码
遗传算法主要是通过遗传操作对群体中具有某种结构形式的个体施加结构重组处理,从而不断地搜索出群体中个体间的结构相似性,形成并优化积木块以逐渐逼近最优解。
由此可见,遗传算法不能直接处理问题空间的参数,必须把参数转换成遗传空间的由基因按一定结构组成的染色体或个体。
这一转换操作叫做编码,也可以称作(问题的)表示(representation)。
在遗传算法中如何描述问题的可行解,即把一个问题的可行解从其解空间转换到遗传算法所能处理的搜索空间的转换方法就称为编码。
针对一个具体应用问题,如何设计一种完美的编码方案一直是遗传算法的应用难点之一,也是遗传算法的一个重要研究方向。
对实际应用的问题,必须对编码方法、交叉运算方法、变异运算方法、译码方法等统一考虑,以寻求一种对问题的描述最为方便、遗传运算效率最高的编码方案。
2.1.1二进制编码(位串编码)
二进制编码方法是遗传算法种最常用的一种编码方法,它使得编码符号集是由二进制符号0和1所组成的二值符号集{0,1},它所构成的个体基因型是一个二进制编码符号串。
二进制编码方法有下述一些优点:
(1)编码、译码操作简单易行。
(2)交叉、变异等遗传操作便于实现。
(3)符合最小字符集编码原则。
(4)便于利用模式定理对算法进行理论分析。
2.1.2符号编码
符号编码是指组成个体编码串的码值无数值含义而仅有字符含义。
当然,码值本身或者字母表中的各种码值可能以数字形式出现,但其代表的意义则只能是字。
许多组合优化问题所采用的编码形式经常是符号编码。
最常见的例子是城市旅行商(TSP)问题的编码。
TSP问题描述为:
一个商人从某一城市出发,要走遍区域中的所有n座城市,最终回到出发地,其中每座城市必须经过且只能经过一次。
问题是按照何种路线走,整个旅行过程所经过的回路长度最短。
如果给每座城市以唯一的符号标识,如英文大写字母表{A,B,Z},则走过的路线可表示为AGIX……L(假设城市不超过26座),如果给定字母表{c1,c2,cn},则路线又可表示为C1C2……Cn,同理,若给定字母表{1,2,n},则路线又可表示为481……n,这里,数字同样不代表数值,而代表字符。
可见,不同的字母表可以产生出不同的符号编码。
在某些应用
问题中,编码甚至可以是矩阵等其它形式。
符号编码的优点在于便于利用专门问题已有的先验知识和信息,同时形式可以变化多样,因而可以处理各种非数值优化问题和组合优化问题,其不足之处在于针对性地设计遗传操作显得复杂一些。
以上简单介绍了位串编码,符号编码。
除此之外,还有其他的编码方法,如多数联级编码、实数编码、多参数交叉编码。
2.2初始群体的产生
2.2.1初始群体的设定
一般来讲,初始群体的设定可采取如下策略:
(1)根据问题固有知识,设法把握最优解所占空间在整个问题空间中的分布范围,然后,在此分布范围内设定初始群体。
(2)先随机生成一定数目的个体,然后从中挑出最好的个体加到初始群体中。
这种过程不断迭代,直到初始群体中个体数达到了预先确定的规模。
2.2.2群体多样性
群体规模越大,群体中个体的多样性越高,算法陷入局部解的危险就越小,所以,从考虑群体多样性出发,群体规模应较大。
但是,群体规模太大会带来计算量增加的弊病,从而影响算法效能。
另外,群体规模太小,会使遗传算法的搜索空间中分布范围有限,因而搜索有可能停止在未成熟阶段,引起早熟(prematureconvergence)现象。
显然,要避免早熟现象,必须保持群体的多样性,即群体规模不能太小。
2.3适应度函数
遗传算法在进化搜索中基本上不用外部信息,仅用适应度函数为依据。
遗传算法的目标函数不受连续可微的约束且定义域可以为任意集合。
对适应度函数的唯一要求是,针对输入可计算出能加以比较的非负结果。
这一特点使得遗传算法应用范围很广。
在具体应用中,适应度函数的设计要结合求解问题本身的要求而定。
适应度函数评估是选择操作的依据、适应度函数设计直接影响到遗传算法的性能。
在选择操作时也可能会出现以下问题:
①在遗传进货的初期,通常会产生一些超常的个体,若按照比例选择法,这些异常个体因竞争力太突出而控制了选择过程,影响算法的全局优化性能。
②在遗传进化后期,即算法接近收敛时,由于种群中个体适应度差异较小时,继续优化的潜能降底可能获得某个局部解。
上述问题我们通常称为遗传算法的骗问题。
适应函数设计不当可能造成这种问题的出现。
2.3.1适应度函数设计方法
适应度函数设计主要满足以下条件:
(1)单值、连续、非负、最大化:
这个条件是很容易理解和实现的。
(2)合理、一致性:
要求适应度值反应解的优劣程度,这个条件的达成往往比较难以衡量。
(3)计算量小:
适应度函数设计应该尽可能简单,这样可以减少计算时间和空间上的复杂性,降低计算成本。
(4)通用性强:
适应度对某类具体问题,应尽可能通用,最了无需使用者改变适应度函数中的参数。
这个条件应该不是属于强要求。
常见的适应度函数构造方法有:
(1)目标函数映射成适应度函数
在许多问题求解中,其目标是求取费用函数(代价函数)g(x)的最小值,而不是求效能函数或利润函数u(x)的最大值。
即使某一问题可自然地表示成求最大值形式,但也不能保证对于所有的x,u(x).都取非负值。
由于遗传算法中,适应度函数要比较排序并在此基础上计算选择概率,所以适应度函数的值要取正值。
由此可见,在不少场合,将目标函数映射成求最大值形式且函数值非负的适应度函数是必要的。
在通常搜索方法下,为了把一个最小化问题转化为最大化问题,只需要简单的把费用函数乘以-1即可,但对遗传算法而言,这种方法还不足以保证在各种情况下的非负值。
对此,可采用以下的方法进行转换:
显然存在多种方式来选择系数
.
可以是一个合适的输入值,也可采用迄今为止进化过程中g(x)的最大值或当前群体中g(x)的最大值。
当然
也可以是前K代中g(x)的最大值。
Cmax最好与群体无关。
当求解间题的目标函数采用利润函数形式时,为了保证其非负性,可用如下变换式:
式中系数
可以是合适的输入值,或是当前一代或前K代中的g(x)的最小值,也可以是群体方差的函数。
(2)通过对知度的适当缩放调整(称为适应度定标FitnessScaling)来设计评价函数。
例如,Goldberg提出了一种线性适应度定标方案:
Gen,liu和Ida提出了一种基于指数适应度的评论函数,它介于基于序的评价函数和线性适应度定标方案之间。
2.3.2适应度函数的设计对遗传算法的影响
适应度函数影响遗传算法的迭代停止条件。
严格地讲,遗传算法的迭代停止条件目前尚无定论。
当适应度函数的最大值已知或者准最优解适应度的下限可以确定时,一般以发现满足最大值或准最优解作为遗传算法迭代停止条件。
但是,在许多组合优化问题中,适应度最大值并不清楚,其本身就是搜索的对象,因此适应度下限很难确定口所以,在许多应用事例中,若发现群体个体的进化已趋于稳定状态,换句话说,若发现占群体一定比例的个体已完全是同一个体,则终止算法迭代。
适应度函数与问题约束条件
遗传算法由于仅靠适应度来评估和引导搜索,所以求解问题所固有的约束条件不能明确地表示出来。
在实际应用中,许多间题都是带约束条件的,像货郎担问题就是一个典型的约束组合优化间题。
用遗传算法求解此类问题需要考虑一些对策。
按理说,我们可以采用一种十分自然的方法来考虑约束条件,即在进化过程中,迭代一次就设法检测.新的个体是否违背了约束条件。
如果没有违背,则作为有效个体,反之,作为无效个体被除去。
这种方法对于弱约束同题求解还是有效的,但对于强约束间题求解效果不佳。
这是因为在这种场合,寻找一个有效个体的难度不亚于寻找最优个体。
作为对策,可采取一种惩罚方法(penaltymethod)。
该方法的基本思想是设法对个体违背约束条件的情况给予惩罚,并将此惩罚体现在适应度函数设计中。
这样,一个约束优化问题就转换为一个附带考虑代价(cost)或惩罚(penalty)的非约束优化问题.
3基本遗传算子
遗传操作是模拟生物基因遗传的操作。
在遗传算法中,通过编码组成初始群体后,遗传操作的任务就是对群体的个体按照它们对环境适应的程度(适应度评估)施加一定的操作,从而实现优胜劣汰的进化过程。
从优化搜索的角度而言,遗传操作可使问题的解,一代又一代地优化,并逼近最优解。
遗传算法遗传操作包括以下三个基本遗传算子(geneticoperator):
1)选择(selection);2)交叉(crossover);3)变异(mutation)。
这三个遗传算子有如下特点:
(1)这三个遗传算子的操作都是在随机扰动情况下进行的。
换句话说,遗传操作是随机化操作,因此,群体中个体向最优解迁移的规则是随机的。
需要再次强调的是,这种随机化操作和传统的随机搜索方法是有区别的。
遗传操作进行的是高效有向的搜索而不是如一般随机搜索方法所进行的无向搜索。
(2)遗传操作的效果和上述三个遗传算子所取的操作概率,编码方法,群体大小,初始群体以及适应度函数的设定密切相关。
(3)三个基本遗传算子的操作方法或操作策略随具体求解间题的不同而异。
更具体地讲,是和个体的编码方式直接有关。
3.1选择算子
选择又称为繁殖或复制(Reproduction),是一个从旧种群(oldpopulation)中选择生命力强的个体位串产生新种群的过程。
这个操作是模仿自然选择现象,将达尔文的适者生存理论运用于位串的过程。
遗传算法中的选择算子(SelectionOperator)就是用来确定如何从父代群体中按某种方法选取哪些个体遗传到下一代群体中的一种遗传算子。
选择操作是建立在对个体的适应度进行评价的基础之上的,其主要目的是为了避免基因缺失、提高全局收敛性和计算效率,其作用是从当前代群体中选择出一些比较优良的个体,并将其复制到下一代群体中。
下面是几种常用的选择算子的操作方法。
3.1.1比例选择
最常用和最基本的选择算子是比例选择算子。
所谓比例选择(ProportionalModel)是指个体被选中并遗传到下一代群体中的概率与该个体的适应度大小成正比。
设群体大小为
,个体
的适应度为
,则个体
被选种的概率
为:
比例选择实际上也叫做赌轮盘选择(RouletteWheelSelection),即赌轮策略[11]由霍兰德提出,由于简单实用,被广泛使用。
这种选择策略在遗传算法中使用的最多,它也是先计算个体的相对适应值
记为
,然后根据选择概率{
=1,2,…,N}把一个圆盘分成N份。
在进行选择时,可以转动圆盘,若某点落到第i个扇形内,则选择个体i。
转盘式选择策略的特点是每个群体成员在转盘选择策略下都有被选择的机会。
3.1.2最优保存策略
使用最优保存策略进化模型(ElitistModel)来进行优胜劣汰操作,即当前群体中适应度最高的个体不参与交叉运算和变异运算,而是用它来替换掉本代群体中经过交叉、变异等遗传操作后所产生的适应度最低的个体。
最早是由RudolhpC[12]提出采用最优选择策略来保持群体中最好的个体不丢失,以保证算法的收敛性。
最优保存策略进化模型的具体操作过程是:
(1)找出当前群体中适应度最高的个体和适应度最低的个体。
(2)若当前群体中最佳个体的适应度比总的迄今为止的最好个体的适应度还要高,则以当前群体中的最佳个体作为新的迄今为止的最好个体。
(3)用迄今为止的最好个体替换掉当前群体中的最差个体。
最优保存策略的实施可保证迄今为止所得到的最优个体不会被交叉、变异等遗传运算所破坏,它是遗传算法收敛性的一个重要保证条件。
但另一方面,它使得算法的全局搜索能力不强。
所以该方法一般要与其它一些选择操作方法配合起来使用,方可以有良好的效果。
另外最优保存策略还可以加以推广,即在每一代的进化过程中保留多个最优个体不参加交叉、变异等遗传运算,而直接将它们复制到下一代群体中。
这种选择方法也称为稳态复制。
除了上述选择算子外,还有确定式采样选择(DeterministicSampling)、期望值选择(ExpectedValueModel)、无回放余数随机选择(RemainderStochasticSamplingwithReplacement)、排序选择(Rank-basedModel)、随机联赛选择(StochasticTournamentModel)等[1,5]各种算子。
3.2交叉算子
在生物的自然进化过程中,两个同源染色体通过交配而重组,形成新的染色体,从而产生出新的个体或物种。
交配重组是生物遗传和进化过程中的一个主要环节,模仿这个环节,在遗传算法中也使用交叉算子来产生新的个体。
遗传算法中的所谓交叉运算,是指对两个相互配对的染色体按某种方式相互交换其部分基因,从而形成两个新的个体。
交叉运算是遗传算法区别其它进化算法的重要特征,它在遗传算法中起着关键的作用,是产生新个体的主要方法。
交叉算子的设计和实现与所研究的问题密切相关,一般要求它既不要太多地破坏个体编码串中表示优良性状的优良模式,又要能够有效地产生出一些较好的新个体模式。
另外,交叉操作数的设计要和编码设计统一考虑。
遗传算法中,在交叉运算之前还必须先对群体中的个体进行配对。
对于占主流地位的二值编码而言,各种交叉算子都包括两个基本内容[5]:
(1)从由选择操作形成的配对库(matingpool)中,对个体随机配对并按预先设定的交叉概率来决定每对是否需要进行交叉操作;
(2)设定配对个体的交叉点(crosssite),并对这些点前后的配对个体的部分结构(或基因)进行相互交换。
下面介绍几种适合于二进制编码个体或实数编码个体的交叉运算。
3.2.1单点交叉
单点交叉(One-pointCrossover)[1,3]又称为简单交叉,它是指在个体编码串中只随机设置一个交叉点,然后在该点相互交换两个配对个体的部分染色体。
如:
个体A1001|111------>1001000新个体A'
个体B(0011|000---—>0011111新个体B'
(交叉点)
3.2.2双点交叉和多点交叉
双点交叉(Two-pointCrossover)是指在个体编码串中随机设置了二个交叉点,然后再进行部分基因交换。
它的具体操作过程是:
在相互配对的两个个体编码串中随机设置两个交叉点;再交换两个个体在所设定的两个交叉点之间的部分染色体。
如:
个体 A 10|110|11-------->1001011新个体A'
个体 B 00|010|00-------->0011000新个体B'
(交叉点1)(交叉点2)
多点交叉(Multi-pointCrossover)有时又被称为广义交叉(GeneralizedCrossover),是指在个体编码串中随机设置了多个交叉点,然后进行基因交换。
一般不太使用多点交叉算子,因为它有可能破坏一些好的模式。
随着交叉点数的增多,个体的结构被破坏的可能性也逐渐增大,这样就很难有效地保存较好的模式,从而影响遗传算法的性能。
另外,还有均匀交叉(UniformCrossover)、算术交叉(ArithmeticCrossover)等交叉算子[1]。
3.3变异算子
在生物的遗传和自然进化过程中,其细胞分裂复制环节有可能会因为某些偶然因素的影响而产生一些复制差错,这样就会导致生物的某些基因发生某种变异,从而产生出新的染色体,表现出新的生物性状。
虽然发生这种变异的可能性较小,但它也是产生新物种的一个不可忽视的原因。
模仿生物遗传和进化过程中的这个环节,在遗传算法中也引入了变异算子来产生出新的个体。
遗传算法中的所谓变异算子,是指将个体染色体编码传中的某些基因座上的基因值用该基因座的其它等位基因来替换,从而形成一个新的个体。
一般来说,变异算子操作的基本步骤如下:
(1)在群体中所有个体的码串范围内随机地确定基因座;
(2)以事先设定的变异概率
来对这些基因座的基因值进行变异。
遗传算法导入变异的目的有两个:
一是使遗传算法具有局部随机搜索能力;二是使遗传算法可维持群体多样性,以防止出现早熟现象。
3.3.1基本位变异
基本位变异(SimpleMutation)操作是指对个体编码串以变异概率
随机指定的某一位或几位基因座上的基因值作变异运算。
3.3.2均匀变异
均匀变异(UniformMutation)操作是指分别用符合某一范围均匀分布的随机数,以某一较小的概率来替换个体编码串中各个基因座上的原有基因值。
均匀变异的具体操作过程是:
依次指定个体编码串中的每个基因座为变异点;对每一个变异点,以变异概率
从对应基因的取值范围内取一个随机数来替代原有基因值。
均匀变异操作特别适合应用于遗传算法的初期运行阶段,它使得搜索点可以在整个搜索空间内自由地移动,从而可以增加群体的多样性,使算法处理更多的模式。
3.3.3逆转变异
所谓逆转算子(InversionOperator)也称倒位算子,是指颠倒个体编码串中随机指定的两个基因座之间的基因排列顺序,从而形成一个新的染色体。
逆转操作的目的主要是为了能够使遗传算法更有利于生成较好的模式。
3.3.4自适应变异算子
自适应变异算子(AdapitiveMutationOperator)与基本变异算子的操作内容类似,唯一不同的是交叉概率
不是固定不变而是随群体中个体的多样性程度而自适应调整。
在简单遗传算法中,变异就是某个字符串某一位的值偶然的(概率很小的)随机的改变。
变异操作可以起到恢复位串字符多样性的作用,并能适当地提高遗传算法的搜索效率。
当它有节制地
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基本 遗传 算法
![提示](https://static.bdocx.com/images/bang_tan.gif)