基因表达式编程---通过人工智能建立的数学模型

来源:互联网 发布:淘宝天猫店招尺寸 编辑:程序博客网 时间:2024/05/21 09:45

基因表达式编程---通过人工智能建立的数学模型  

2010-08-25 22:10:21|  分类:★Study Material |  标签:基因表达  基因表达式编程  gep  expression  gene  |字号 订阅

题目:遗传表达编程---通过人工智能建立的数学模型(Gene Expression Programming:Mathematical Modeling by an Artificial Intelligence)

网址:http://www.gene-expression-programming.com/

作者:Ferreira(加拿大)

GEP(Gene Expression Programming,基因表达式编程),是一种新的进化算法,它可以进化诸如数学表达式,神经网络,决策树,多项式构建,逻辑表达式等多种形态的计算机程序的。不管这些GEP的计算机程序有多么复杂,它们都以线性染色体形式编码。然后,这些染色体被表达或翻译成具有分支结构的表达式树。在GEP里,基因型(染色体)和表现型(表达式树)不论从结构还是功能上来看,都是不同的实体。这种新的进化系统,尽管其表面看似复杂,却最终能够在帮助研究人员构建稳健而精确的计算机模型方面发挥重要作用。

在自然界,GEP的线性染色体包含了遗传物质,这些遗传物质通过变异传递给下一代。换句话说,这意味着GEP中的遗传变异可以通过线性染色体发生作用(这比在GP的复杂分支结构中那样做要容易得多),并意味着在增殖过程中只需要传达那些线性染色体(相对复杂的树结构,线性字符串的复制要容易得多)。同时,在自然界,只有通过进化,编码在染色体中的信息才能最终被成功地表达成高度进化的计算机程序或表达式树(expression trees,ETs)。

表达式树是复杂的计算机程序,通常通过进化来解决特定的问题,因此,它们依据解决问题的适应度来选择。经过一定时间,由这样的计算机程序(当然,是以线性染色体形式编码的)组成的种群,就会发现(在基因突变的作用下)。因此,这个种群将变得更加适合那个特殊的用来孵育下一代的环境(这个环境明显地定义了眼前的问题)。这意味着,给足够的时间并正确地设定,我们便能找到解决眼前问题的好办法。

=================================================

基因表达式编程(Gene Expression Programming,GEP)是遗传计算家族的革命性的新成员,是借鉴生物遗传的基因表达规律提出的知识发现新技术。在跟踪性探索中,作者已将该技术用于公式发现、函数挖掘,关联规则挖掘,因子分解,和太阳黑子预测,取得满意的效果。

在数据挖掘,特别是知识发现的实践应用中,突出了一个由头部长度为h和尾部长度为t(满足一定约束)组成的编码表达式,这里Expression已不同于生物学意义的“基因表达”,对应了一组实在的数学表达式,并可解码成表达树,因此国内数据挖掘界将GEP译为“基因表达式编程”。

遗传计算旨在研究被计算对象的进化,而遗传计算本身也在人们的研究之下进化。图1是GA,GP和GEP的关系,表述了这一进化过程。GA比喻为父本,它刚性地使用定长的线性bit串(染色体)为遗传物质,采用简单编码解决简单问题;遗传编程GP比喻为母本,它柔性地使用非线性的、不定长的树结构,采用复杂编码解决复杂问题;而GEP继承了父母的优点,它刚柔相济,表现为定长线性串,易于遗传操作,又间接地对应于柔性的具有非线性的树结构,从而达到了简单编码解决复杂问题的目的,使得在速度上比GA和GP提高了100~60000倍。所以,GEP同传统的遗传算法GA和遗传编程GP在一些步骤框架上相似,但在个体的编码方法及结果的表现上有明显的区别。GEP是GA和GP的继承和发展,它综合了GA和GP的优点,具有更强的解决问题的能力。

某公式按前缀表达法可改写为:sqrt.3.+.3.a.3.sqrt.a.b.c./.1.-.c.d。它是一个典型的基因表达式,代表了一个对象的计算方法,是一条知识,也是一个参加遗传操作(或繁殖活动)的知识个体,公式中的加减乘除乘方开方,是这条知识的基因。

为了解决遗传操作封闭性问题,GEP要求染色体必须满足一定的(非常宽松的)结构约束。基因通过连接运算符+-3/sin cos(if..else)等连接组成,注意,加减乘除是二目运算,if--else是三目运算。染色体由头(head)和尾(tail)组成,head比较宽松,可包含变量如a,b,c,1,2,3和函数sin,cos等,而tail只包含了变量。

定义1设E是一个基因表达式,n是此问题涉及的运算中所具有的最大目数,如果E的head和tail的长度满足下列关系:tail=head×(n-1)+1;则称E为良性染色体。

直观地描述,GEP进化过程有下列要点:

1)假定训练数据代表了客观事实,包含或接近真理。

2)如果一条染色体(公式或知识)接近真理,则表明它含有某些好基因。反之,则表明它含有某些坏基因。

3)若干染色体的集合构成繁衍的种群(Population),让含有各种基因的各种知识碰撞(变异),交流(杂交),用训练数据对新一代知识进行检验,适者(比较正确的)生存,不适者(远离真理的)淘汰。经过几十代,几百代的积累,会得到难能可贵的知识基因组合,达到了预期的精确度,成为输出的知识。GEP算法成功。

4)由于GEP比GA和GP快100~60000倍,GEP不怕失败。一般的GEP算法成功率>0.66,这表示运行三次有两次成功,一次失败后,重新(随机地或有启发地)初始化种群,再进行第二次,则成功的可能性极大。因此GEP有很好的可用性。

遗传编程(GP)是在遗传算法的基础上发展变化而来的。1992年J.R.Koza首次提出一种在编码方式上与常规的遗传算法有着本质不同的仿生进化算法,它采用了层式编码(“树”型)方式,由于在遗传算法的基础上,改进了编码方式,被称为“遗传编程”。相对于遗传算法,遗传编程更适合应用于层式结构的优化。由于遗传编程的个体采用了树型结构,结构中的元素之间存在着一个对多个的关系,属于典型的非线性结构,这给编程实现带来了很大的困难。当前,对遗传编程的程序实现主要采用两种方法:一是专用程序语言如Lisp等,二是用通用语言的指针实现,如C语言。这两种方法都受到编程语言的限制,通用行和可移植性都不够理想。在工程应用领域有着广泛应用的Matlab语言,由于没有指针运算,无法实现具有层式编码的遗传编程。

为了解决这个问题,本文借用了数据结构中“树的遍历”思想,实现了从树型结构向线性序列的转换,在此基础上解决了初始个体生成算法、杂交算子的实现、表达式个体求值等问题,使遗传编程能够方便地用Matlab语言实现。

在具体实现上,GP有如下一些特点:(1)GP求解的是一个描述问题的程序(或者说是一个算法)。(2)GP通常用树型结构来表示,描述相对复杂。(3)GP的每一代的个体的长度(深度)一般是不同的,即使在同一代中的个体之间的长度(深度)也是不同的。(4)GP所消耗的资源是不可控的(这里所指的不可控是指不能精确的描述),需要消耗大量的内存空间,因而每一代的进化都比较慢。

遗传程序的表示方法:

Lisp语言非常适合于遗传编程,因为Lisp语言可以对程序本身进行操作,然后再执行。

程序可以有两种表示方法:树型结构表示法和字符串表示方法。树型结构表示方法结构清晰,在进行交叉和变异操作时比较简单,但需要占用较大的存贮空间,由于遗传编程每一代需要用到大量的树结构,所以存贮开销是非常大的,空间复杂度是遗传编程中需要研究的一个课题;对字符串来表示程序可以节省大量的存贮空间,但进行遗传操作时比较困难,如在选择“双亲”的随机交叉点或变异点时比较复杂,需要进行转换。对于Lisp语言本身就是字符串,所以比较适合用字符串来表示遗传程序;对于C语言来说,这两种方法就都可以选择了。所以共有4种结合方式:C语言+树型结构、C语言+字符串表示、Lisp+树型结构、Lisp+字符串表示,其中第三种方式不常用(这里所指的C语言是代表除了Lisp以外的大部分其它通用语言)。

GEP以函数或谓词作为知识点(或知识基因)。

GEP采用了遗传编码和个体表现型不同的思路,遗传编码是等长线性符号串,个体表现型是表达式树。GEP的遗传算子(genetic operator)除了遗传算法中常用的选择(selection)算子和变异(mutation)算子,还增加了转换和插入算子以及重组算子。GEP的编码形式:GEP的遗传编码是等长的线性符号串,称为GEP染色体。一个染色体由一个或多个基因组成。多基因染色体中的每个基因都有相同的长度,分别可以描述为一棵表达式树。选择一个函数作为连接函数就可以把这些基因连接成一棵表达式树。(交叉:crossover)

遗传操作的效果和上述三个遗传算子所取的操作概率,编码方法,群体大小,初始群体以及适应度函数的设定密切相关。三个基本遗传算子的操作方法或操作策略随具体求解问题的不同而异。更具体地讲,是和个体的编码方式直接有关。

SGA的染色体一般是定长的.结构也相对固定,具有一定规律特征。传统的GP通常是以树结构作为个体表示法,所以染色体长度是变化的;GEP的染色体也是定长的,但以树状结构来表示和解决问题。(3)SGA的染色体形式一般不可以直接执行,需要建立问题解空间与编码解空间的映射关系。GP的染色体一般可以借助问题的注释器(评价函数)直接执行;

遗传算子的设计是演化算法的关键技术,但目前为止还没有发现设计遗传算子的通用方法。普遍的观点认为:演化依赖于某些相应的选择策略。然而。应用何种方法创建选择策略还没达成一致。正确选择遗传算子,极大地影响程序的运行性能。一种观点为:对于SGA而言,交叉算子因其全局搜索能力而作为主要算子,变异算子因其局部搜索能力而作为辅助算子。而最近的观点则为:重组和变异同样重要。传统的GP则着重强调交叉算子的作用。遗传规划(GP)中的主要遗传算子是复制、交换,变异作为次要算子也常常用到,GEP则强调变异算子为主要的遗传算子,而重组算子则为次要算子。

遗传算法存在着局部搜索能力较差的缺陷。解决这一问题的一种方法是对基本遗传算法进行适当的改进,如在SGA中:1、增加交叉算子,使交叉操作限制在基因型相似的染色体之间就能一定程度地改善遗传算法的局部搜索能力;2、对遗传算子实施倒位操作,通过该操作.可以有效的增加群体的多样性,扩大搜索域,防止过早的产生局部收敛,并迅速的找出满足条件的最优解;在GP中。可以利用其自适应建模的特点,再结合演化参数估计算法进行模型的参数估计法。以优化建模。在GEP中,通过采取新式选择算子、可变长度的染色体引入、对常数的自由操作及新适应度的引入,改进了用基本的GEP方法解决符号回归的问题。但仅仅这样改进是不够的.使用混合方法,即用两种或多种不同算法组成的方法,来提高全局优化和改进局部优化。由于遗传算法的结构是开放式的,与问题无关,所以容易和其它算法综合。将遗传算法与传统的、基于问题知识的启发式搜索技术相结合构成基于遗传算法的混合算法框架。把SGA与模拟退火进行综合,构成模拟遗传算法,在解决几种NPC问题中显示了良好的性能;SGA与模拟退火合成为遗传Boltzmann机,用于优化Boltzmann机的权重:用GA模拟退火和人工神经网解决组合优化问题。显示了其性能的较优。GP正日益和神经网络、模糊推理、混沌理论等其它智能方法相互渗透和结合,起到相互补充的作用。已有学者将混沌与GP结合,提出采用混沌数据中小量的数据,结合遗传规划的技术来识别混沌动力学的系统方程,为GP开辟了新的研究方向。GEP可以利用选择和更正的演化机制来训练和调整网络来构建神经网络的自动化设计。

基因注入,转基因过程和进化干预

来源:http://winsonman.blog.163.com/blog/static/1040091082010725101021414/?latestBlog
原创粉丝点击