【PS:今天的内容会比之前都还要多。。并且有一定理解难度
注意结合前边内容:
基因表达式编程(GEP)自学 第【1】天 Python 实现
基因表达式编程(GEP)自学 第【2】天 Python 实现
】
像所有的遗传算法一样,GEP采用个体种群,而且最开始必须产生初始种群。后续的种群都是这些初始种群或者奠基种群经过遗传修饰得到的后代。我们已经看到,在基因型/表现型系统中,我们只需要产生个体染色体,然后由发展过程来控制后续工作。因此,在GEP中,只需要随机产生初始种群的简单个体染色体结构。而且这是一个非常小的任务。对每个问题而言,我们必须选择产生染色体的符号,也就是说,我们必须选择适合解决当前问题的函数集和终点集。我们还要选定每个基因的长度,每个染色体中的基因个数,以及这些染色体的表达式之间如何相互.作用。最后,我们必须提供一个选择环境(适应度样本集)来计算个体的适应度。然后,个体按照其适应度被选中,进行有修饰的复制,在下一代中产生新的成员。这个种群经历同样的发展过程,产生另一代新的群体。该过程重复若干代,直到发现一个优良解。
先大致了解下算法的流程:
初始种群的染色体由解决特定问题的分别代表函数和终点的符号随机产生。
例如,假设我们想知道如何用AND,OR和 NOT来表示Majority(a,b,c)函数。这种情况下,函数集的选择并不复杂,函数集的构成为F={A,O,N},分别代表布尔函数AND,OR和 NOT。终点集的选择也不复杂,终点集的构成为T={a,b c},分别代表多数函数的三个参数。因此,对于该问题而言,基因的头部将从六个不同符号中随机生成(A,O, N,a,b, C),而基因的尾部从一个较小的字符集随机中生成,该符号集包含三个符号(a,b,c)。
(1)有:多数函数的真值表如下表所示。
对于该问题而言,所有的过渡状态集用来构成选择环境,以计算每个程序的适应度。选择环境也可以较正式地称为适应度样本集。该问题的适应度函数也不难猜测,它对应每个特定个体计算正确的适应度样本的个数。
(2)初始种群的产生
条件:
随机生成初始种群
上图.一个用来求解Majority函数问题的较小初始种群的染色体。这些随机生成的染色体由两个基因构成,对由OR连接的子表达式树进行编码。
(3)计算个体的适应度
【PS:后边对应的就是计算出来的适应度】
Majority函数,适应度如何计算,简单的举个例子:
看第8条染色体,其对应的表达树如下:
写成布尔表达式:
【PS:想得没错,我们的目标就是寻找一个式子的适应度为8的】
(4)后续代和精英策略
假设:代与代之间,最佳个体(或者最佳个体之一)被原样复制到下一代中。如果种群中有多个个体具有最佳适应度,那么选择最后一个进行复制。
最佳个体复制操作,也称为精英策略,保证至少有一个后代是可存活的(显然,只有在代与代之间的选择环境保持不变时),同时在逐渐适应过程中保持个体的最优特性。
【PS:变异、转座、重组的细节后边在说,这伪了流程完整,我们就直接产生了新的一代】
(5)然后就是重复操作,直到符合结束的条件
【PS:幸运第二代找到了适应度为8的染色体,在第8条】
用来求解Majority 函数问题的下一代计算机程序。这一代的个体是上一代中选中的个体的直接后代。注意这里找到了一个具有最大适应度值的完美程序(8号染色体),因此该程序比起祖先要好很多。
看下其表达式树:
【PS:当然这里我再一次进行人工验证。。】
【PS:或许一开始看起来不太好理解,接下来我举个例子就好理解了,
我们要如何根据适应度进行选择?
在GEP中,个体通过赌盘轮采样策略根据其适应度进行选择(Goldberg 1989)。每个个体用圆形赌盘的一块来代表其适应度的比例。赌盘按照群体中个体数的值进行相应次数的旋转,从而始终保持群体的大小不变。采用这种选择策略,确实有时候会丢失一些最佳个体,而一些普通个体进入到了下一代。但是这样也不一定就不好,因为种群会一代一代地向前推进。而且,因为我们使用每一代中的最佳个体复制策略,所以最佳个体的存在和复制能够得到保证。这样,至少最优的特性从来没有丢失过,并且能够达到不断学习的目的。
(1)这里举例一个简单复制和选择的例子(没有任何变异,运用的是赌盘策略)
轮盘赌算法:轮盘赌选择方法,轮盘赌选择又称比例选择算子,其基本思想是:各个个体被选中的概率与其适应度函数值大小成正比。
设种群个体大小为N,个体的适应度为 f(xi),则个体的选择概率为:
如图所示.复制和选择示例。仅采用复制和赌盘原理以使这些算子更容易理解。注意,例如第О代的8号染色体(最佳个体之一)没有留下后代,而6号染色体(一个中等个体〉留下的后代数量最多。
如图所示.遗传漂变示例。在这个极端的情况下,种群在第13代以后完全丧失遗传多样性,其所有成员都是一个染色体的后代,在这里,该染色体是第0代的0号染色体
变异可以发生在染色体内的任何位置。然而,染色体的结构组织必须保持完整。所以在头部中,任何符号都可以变成符号或者终点;在尾部中,终点只能够变成终点。通过这种方法,染色体的结构组织得以保持,而且由变异产生的新个体是结构上正确的程序。
如图所示 求解Majority(a,b,c)函数的一个初始种群及通过变异产生的后代。由OR连接的子表达式树编码的染色体。注意后代与其初始种群中的第0代祖先完全相同。第6代(1号染色体)发现的完美解和其假定的祖先之一用黑体标识。注意第5代的1号和3号染色体也可能成为完美解的祖先,在两种情况下,复制时出现两个点变异。
(1)变异可能带来变化,例如:
(2)变异也可能没带来变化(中性变异)
GEP的转座元素是基因位的片断,它们可以被激活后跳到染色体中别的位置。在GEP中有三种转座元素(TransposableElements):
IS转座是从种群中随机选择一个染色体,然后随机从IS转座长度中选择IS长度,然后在染色体中选择IS长度的基因片段,并随机选择基因,插入到除基因首元素之外的头部部分中,如下所示:
所有的RIS元素都是从一个函数开始,因此是选自头部分中的序列。因此在头中任选一点,沿基因向后查找,直到发现一个函数为止。该函数成为RIS元素的起始位置。如果找不到任何函数,则变换不执行任何操作。该算子随机选取染色体,需要修饰的基因,RIS元素以及其长度。变化过程如图所示:
【PS:在基因转座中,整个基因起到转座子的作用,而且自己转座到染色体的开始位置。与其它类型的转座不同,在基因变换中原始位置上的转座子(基因)被删掉。该方法能够保证染色体的长度不变。】
在GEP中有三种重组:单点重组,两点重组,基因重组。在所有的情况中,两个随机选中的父代染色体配对并相互交换部分成分。
如上图 .求解Majority(a,b,c)函数的一个初始种群及通过单点重组产生的后代。由OR连接的子表达式树编码的染色体。第13代找到的完美解(1号染色体〉是前一代的6号染色体和7号染色体的一个后代(也用黑色标识)。
进行两点重组的时候,父代染色体相互配对,在染色体中随机选择两个点,将染色体切断。两个染色体相互交换重组点之间的部分,形成两个新的子代染色体。如图所示:
在 GEP 的第三种重组中,两个染色体中的整个基因相互交换,形成的两个子代染色体含有来自两个父体的基因。
基因表达式编程第6版
本文作者:九重!
本文链接:https://blog.csdn.net/weixin_43798572/article/details/122731903
关于博主:评论和私信会在第一时间回复。或者直接私信我。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【点赞】【收藏】一下。您的鼓励是博主的最大动力!