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

1. 表达式树【★★★★】

【ps:这里先看懂表达式树是怎么转换为数学式子

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

1.1 开放阅读框(ORFs)

GEP的结构组织从开放阅读框(Open Reading Frames,ORFs)的角度来说更容易理解。在生物学上,一个 ORF序列,或者基因编码的序列,开始于一个“起始”密码子,接着是一些氮基酸密码子,最后止于一个“终止”密码子。然而一个基因不仅仅包含各自的 ORF,还包含起始密码子之前的序列和终止密码子之后的序列。虽然在GEP中起始点通常都是某个基因的第一个基因位,然而终点并不一定与基因的最后一个基因位重合。对于GEP来说,在终点以后有未编码区域是十分常见的。(这里我们暂时不考虑这些未编码区域,因为它们并不影响表达式的产生。)
例1
如数学表达式:
在这里插入图片描述
可以用如下表示:
在这里插入图片描述

其中Q表示开方函数
其对应的基因型为:
在这里插入图片描述
该基因型是直接将表达树从左到右,自上而下读出的结果。表示式 【3】就是一个ORF。
将这些ORF称为K-表达式(源自 Karva语言)。

例2
在这里插入图片描述
对应表达式树如下:
在这里插入图片描述

2. 基因的结构和功能组织【★★★★】

GEP的基因由一头一尾两部分构成。

  • 头部由包含既代表函数又代表终点的符号构成,
  • 尾部仅仅含有终点。

对每个问题而言,头的长度h是选定的,而尾的长度t是h和n的函数,其中n是所需变量数最多的函数的参数个数(也称为最大操作数),t的大小由下面的方程:在这里插入图片描述
考虑如下这个由**函数集为F={Q,*,/,-,+}终点集为T={a,b}**构成的基因。在这里,n=2 。如果我们选择h=15,那么t=15x(2-1)+1=16:所以基因g的长度为15+16=31。下面给出一个这样的基因(尾部用粗体标识):
【PS:

  • 函数集:目前可以简单理解为就是一些运算符的集合。
  • 终点集:就是一些参数的集合。
  • 头部包括:{代表函数和代表终点的符号构成}。长度为:h。
  • 尾部包括:{仅仅含有终点}。长度为:t。
  • 头部长度和尾部长度的关系:t=h(n-1)+1。
  • n表示:所需变量数最多的函数的参数个数(也称为最大操作数)。
  • 给出例子n进一步解释:其中Q表示开方函数,n之所以为2,是因为Q运算的参数为1,而
    *,/,-,+,都需要2个参数,n是变量数最多的函数的参数个数,所以取最大值为2。


在这里插入图片描述
其编码成如下表达式树:
在这里插入图片描述
可以注意到ORF终止于第7位,但是基因终止于第30位。
【PS:

  • ORF从前往后读,到第7位就结束,需要参数都补齐了,理解为对应生物学基因中遇到“终止”密码子

假设基因发生了变异:
用“+”来替换第5位上的“a”。得到如下的染色体:
在这里插入图片描述其编码成如下表达式树:
在这里插入图片描述
在此,ORF的终止点到了第19位。

多基因染色体
GEP 染色体通常由等长的多个基因构成。对于每个问题,基因的数目以及头的长度都根据情况来选定。每一个基因可以对一个子表达式树进行编码而且子表达式树相互作用构成一个更复杂的实体。
如下例子:
在这里插入图片描述

3. 翻译后的相互作用和连接函数【★★★】

从进化学的角度来说,用一个特定的连接函数来连接子表达式树是简单、高效的。的确,从单基因系统到多基因系统,效率得到很大的提高。尽管这种人工的复杂度提高了(这里“人工”一词的意思是说这种复杂度的增加不是由系统自身的进化引起的),但是多基因系统的进化仍然非常高效,所以可以用它们来进化得到不同问题的解。原则上说来,对系统从外部强加更高级别的复杂度可能的,但是这并不保证系统的性能会提高。复杂的进化系统不是这样产生的:高级别的复杂系统建立在较低级别的复杂性之上,而且复杂度的进化或多或少具有连续性。虽然GEP中的子表达式树间的相互作用确实可以用更高级别的复杂度来编程。为了达到这个目的,我们创造了一类特别的基因一—homeotic基因――来控制个体的发展。这些基因的表达会导致不同的程序或者细胞。因此,homeotic基因决定哪些基因在哪个细胞中表达以及它们之间如何相互作用。

如下:
在这里插入图片描述

传统的基因像往常对3个不同的子表达式树进行编码。homeotic基因控制不同子表达式树之间的相互作用。注意,homeotic基因有其特殊的长度和特殊的函数集。对于这个特定的例子,homeotic基因的头部的长度h等于5,而其它基因的头部长度等于3;homeotic基因的函数集FH为FH={+,* ,Q},其它基因的函数集为F={+,-,* ,/)。
如图下图所示。

在这里插入图片描述
【PS:

  • homeotic基因:简单理解和前边的传统基因翻译并没有什么区别,就是变成连接前边传统基因的作用,其中的终点集合变成了数字,数字对应前边的传统基因。


例2 :homeotic基因为2个
使用一个以上的homeotic基因显然会导致一个多细胞系统,其中每个homeotic基因将不同组的基因放到一起。例如,考虑如下的染色体:
在这里插入图片描述
该染色体对3个传统基因和2个homeotic基因(用粗体标识)编码。其表达式(如下图)导致两个不同的细胞或程序,每个细胞或程序分别用不同的方法来表达不同的基因。

在这里插入图片描述

4. 其他术语【★】

4.1 Karva语言:GEP的语言

我们已经看到,每个基因对一个特定的子表达式树进行编码,而且每个子表达式树对应一个特定的K-表达式或开放阅读框。由于这种对应十分简单、优雅,所以K-表达式实际上是非常紧凑、容易理解的计算机程序。我们已经看到多级子表达式树如何轻易地转化成线性K-表达式,这种转换对任何代数的,布尔的,或者非传统的表达式来说都是十分容易的。的确,GEP的语言一—Karva语言――是一种功能十分强大的表达方式,它可以以简单、非常紧凑的符号串形式进化相对比较复杂的程序。事实上,已经有商业软件可以自动将K-表达式和GEP染色体转换成传统的C十+或Visual Basic函数,例如Gepsoft公司的AutomaticProblem Solver.

5. 参考书籍

基因表达式编程第6版

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

九重!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值