基因表达式编程(GEP)自学 第【3】天 Python 实现

1. 个体种群【★★★】

【PS:今天的内容会比之前都还要多。。并且有一定理解难度

注意结合前边内容:
基因表达式编程(GEP)自学 第【1】天 Python 实现
基因表达式编程(GEP)自学 第【2】天 Python 实现

像所有的遗传算法一样,GEP采用个体种群,而且最开始必须产生初始种群。后续的种群都是这些初始种群或者奠基种群经过遗传修饰得到的后代。我们已经看到,在基因型/表现型系统中,我们只需要产生个体染色体,然后由发展过程来控制后续工作。因此,在GEP中,只需要随机产生初始种群的简单个体染色体结构。而且这是一个非常小的任务。对每个问题而言,我们必须选择产生染色体的符号,也就是说,我们必须选择适合解决当前问题的函数集和终点集。我们还要选定每个基因的长度,每个染色体中的基因个数,以及这些染色体的表达式之间如何相互.作用。最后,我们必须提供一个选择环境(适应度样本集)来计算个体的适应度。然后,个体按照其适应度被选中,进行有修饰的复制,在下一代中产生新的成员。这个种群经历同样的发展过程,产生另一代新的群体。该过程重复若干代,直到发现一个优良解。
先大致了解下算法的流程:

在这里插入图片描述
【PS:献给英文不太好的】
在这里插入图片描述

1.1. 初始种群的产生

初始种群的染色体由解决特定问题的分别代表函数和终点的符号随机产生。

例如,假设我们想知道如何用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)初始种群的产生
条件:

  • 基因的头部将从六个不同符号中随机生成(A,O, N,a,b, c)。
  • 基因的尾部从一个较小的字符集随机中生成,该符号集包含三个符号(a,b,c)。
  • 每个基因的长度为7(h=3,t=4),是根据 t=h(n-1)+1。

随机生成初始种群
在这里插入图片描述
上图.一个用来求解Majority函数问题的较小初始种群的染色体。这些随机生成的染色体由两个基因构成,对由OR连接的子表达式树进行编码。
(3)计算个体的适应度

【PS:后边对应的就是计算出来的适应度】

在这里插入图片描述在这里插入图片描述
Majority函数,适应度如何计算,简单的举个例子:
看第8条染色体,其对应的表达树如下:
在这里插入图片描述
写成布尔表达式:
在这里插入图片描述
【PS:想得没错,我们的目标就是寻找一个式子的适应度为8的】
(4)后续代和精英策略
假设:代与代之间,最佳个体(或者最佳个体之一)被原样复制到下一代中。如果种群中有多个个体具有最佳适应度,那么选择最后一个进行复制。

最佳个体复制操作,也称为精英策略,保证至少有一个后代是可存活的(显然,只有在代与代之间的选择环境保持不变时),同时在逐渐适应过程中保持个体的最优特性。

【PS:变异、转座、重组的细节后边在说,这伪了流程完整,我们就直接产生了新的一代】
在这里插入图片描述
(5)然后就是重复操作,直到符合结束的条件

【PS:幸运第二代找到了适应度为8的染色体,在第8条】
在这里插入图片描述
在这里插入图片描述
用来求解Majority 函数问题的下一代计算机程序。这一代的个体是上一代中选中的个体的直接后代。注意这里找到了一个具有最大适应度值的完美程序(8号染色体),因此该程序比起祖先要好很多。

看下其表达式树:
【PS:当然这里我再一次进行人工验证。。】
在这里插入图片描述
在这里插入图片描述

2. 适应度函数与选择【★★★★】

2.1. 适应度函数和选择环境

在这里插入图片描述
在这里插入图片描述
【PS:或许一开始看起来不太好理解,接下来我举个例子就好理解了,
在这里插入图片描述

2.2. 选择

我们要如何根据适应度进行选择?
在GEP中,个体通过赌盘轮采样策略根据其适应度进行选择(Goldberg 1989)。每个个体用圆形赌盘的一块来代表其适应度的比例。赌盘按照群体中个体数的值进行相应次数的旋转,从而始终保持群体的大小不变。采用这种选择策略,确实有时候会丢失一些最佳个体,而一些普通个体进入到了下一代。但是这样也不一定就不好,因为种群会一代一代地向前推进。而且,因为我们使用每一代中的最佳个体复制策略,所以最佳个体的存在和复制能够得到保证。这样,至少最优的特性从来没有丢失过,并且能够达到不断学习的目的。

3. 有修饰的复制【★★★★★】

3.1. 复制和选择

(1)这里举例一个简单复制和选择的例子(没有任何变异,运用的是赌盘策略)
轮盘赌算法:轮盘赌选择方法,轮盘赌选择又称比例选择算子,其基本思想是:各个个体被选中的概率与其适应度函数值大小成正比。
设种群个体大小为N,个体的适应度为 f(xi),则个体的选择概率为:
在这里插入图片描述
在这里插入图片描述
如图所示.复制和选择示例。仅采用复制和赌盘原理以使这些算子更容易理解。注意,例如第О代的8号染色体(最佳个体之一)没有留下后代,而6号染色体(一个中等个体〉留下的后代数量最多。

在这里插入图片描述
在这里插入图片描述

如图所示.遗传漂变示例。在这个极端的情况下,种群在第13代以后完全丧失遗传多样性,其所有成员都是一个染色体的后代,在这里,该染色体是第0代的0号染色体

3.2. 变异

变异可以发生在染色体内的任何位置。然而,染色体的结构组织必须保持完整。所以在头部中,任何符号都可以变成符号或者终点;在尾部中,终点只能够变成终点。通过这种方法,染色体的结构组织得以保持,而且由变异产生的新个体是结构上正确的程序。
在这里插入图片描述
如图所示 求解Majority(a,b,c)函数的一个初始种群及通过变异产生的后代。由OR连接的子表达式树编码的染色体。注意后代与其初始种群中的第0代祖先完全相同。第6代(1号染色体)发现的完美解和其假定的祖先之一用黑体标识。注意第5代的1号和3号染色体也可能成为完美解的祖先,在两种情况下,复制时出现两个点变异。

(1)变异可能带来变化,例如:
在这里插入图片描述
(2)变异也可能没带来变化(中性变异

在这里插入图片描述

3.3. 转座和插入序列元素

GEP的转座元素是基因位的片断,它们可以被激活后跳到染色体中别的位置。在GEP中有三种转座元素(TransposableElements):

  • 起始位置上是函数或终结点的短片段转座到基因的头中除根部以外的位置(Insertion Sequence Elements,IS元素)
  • 起始位置上是函数的短片段转座到基因的根部(Root Insertion Sequence Elements,RIS元素)
  • 整个基因转座到染色体的起始位置。

3.3.1. IS转座:

IS转座是从种群中随机选择一个染色体,然后随机从IS转座长度中选择IS长度,然后在染色体中选择IS长度的基因片段,并随机选择基因,插入到除基因首元素之外的头部部分中,如下所示:
在这里插入图片描述
在这里插入图片描述

3.3.2. RIS转座

所有的RIS元素都是从一个函数开始,因此是选自头部分中的序列。因此在头中任选一点,沿基因向后查找,直到发现一个函数为止。该函数成为RIS元素的起始位置。如果找不到任何函数,则变换不执行任何操作。该算子随机选取染色体,需要修饰的基因,RIS元素以及其长度。变化过程如图所示:
在这里插入图片描述
在这里插入图片描述

3.3.3. 基因的转座

基因转座仅仅改变基因在同一染色体中的位置,如图所示:
在这里插入图片描述

【PS:在基因转座中,整个基因起到转座子的作用,而且自己转座到染色体的开始位置。与其它类型的转座不同,在基因变换中原始位置上的转座子(基因)被删掉。该方法能够保证染色体的长度不变。】

3.4 重组

在GEP中有三种重组:单点重组,两点重组,基因重组。在所有的情况中,两个随机选中的父代染色体配对并相互交换部分成分。

3.4.1 单点重组

在这里插入图片描述
如上图 .求解Majority(a,b,c)函数的一个初始种群及通过单点重组产生的后代。由OR连接的子表达式树编码的染色体。第13代找到的完美解(1号染色体〉是前一代的6号染色体和7号染色体的一个后代(也用黑色标识)。

3.4.2. 两点重组

进行两点重组的时候,父代染色体相互配对,在染色体中随机选择两个点,将染色体切断。两个染色体相互交换重组点之间的部分,形成两个新的子代染色体。如图所示:
在这里插入图片描述

3.4.3. 基因重组

在 GEP 的第三种重组中,两个染色体中的整个基因相互交换,形成的两个子代染色体含有来自两个父体的基因。

在这里插入图片描述
3.4.4. 重组小结
见下图:
在这里插入图片描述

4. 参考书籍

基因表达式编程第6版

本文作者:九重!
本文链接:https://blog.csdn.net/weixin_43798572/article/details/122731903
关于博主:评论和私信会在第一时间回复。或者直接私信我。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【点赞】【收藏】一下。您的鼓励是博主的最大动力!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
GEP(Gene Expression Programming)是一种基因表达式编程算法,可以用来解决复杂的问题。在Python中,我们可以通过编写相应的代码来实现GEP算法。 首先,我们需要定义基本的基因编码。在GEP中,基因编码由一系列基因节点组成,每个基因节点代表一个函数或者一个变量。我们可以使用字符串来表示基因节点,在Python中可以使用list或者字符串来表示整个基因。 接下来,我们需要定义适应度函数。适应度函数用来评估染色体的适应性,也就是解决问题的能力。在Python中,我们可以根据具体的问题自定义适应度函数。 然后,我们需要编写遗传算法的相关操作,包括选择、交叉和变异等。选择操作根据适应度函数选择出一定数量的个体作为父代,用来进行交叉和变异操作。交叉操作将父代个体的基因进行交换和重组,生成新的子代个体。变异操作是对子代个体进行随机的变异操作,以增加种群的多样性。 最后,我们可以使用循环迭代的方式不断进行遗传算法的进化过程,直到达到停止条件。在每一代的进化过程中,根据适应度函数对个体进行选择、交叉和变异操作,生成新的种群。 总之,通过以上步骤的实现,我们就可以使用Python实现GEP算法,并应用于解决各种复杂的问题。这只是一个简单的概述,具体实现需要根据具体的问题来进行调整和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九重!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值