如何转换GEP染色体
基因表达式编程使用两种类型的表示形式:线性(染色体)和分支表达形式(表达式树,expression tree - ET)。为了方便,GEP采用的是线性表达形式,尽管如此,这些染色体非常容易转换成表达式树(ETs)或者传统的数学表达式。
Karva表示法就是专门用于GEP的(Ferreira, C., 2001. Gene Expression Programming: a New Adaptive Algorithm for Solving Problems. Complex Systems, Vol. 13, issue 2: 87-129),它包含了一种通用的方式来表达任何的表达式树或数学表达式。
GEP染色体包含了一个或多个的Karva表达式(K-expressions),而且它们非常容易被解释。例如,如下基因:
0123456
+/*abcd
能被描绘成如下的一个图或表达式树(ET):

从基因到表达式树的转换也是非常简单的:基因的第一个元素(位置0上)对应于表达式树的根;在这个函数(这里是“+”)下面,连的是与这个函数参数相同个数的节点,它们将被基因中的后面的元素所填充(位置1和位置2)……这个过程一直重复到某一行只包含终结符为止(此例中为第3行)。
更形式些,上面的基因和表达式树将表示为如下等式:
y = a/b+c*d
通常GEP所使用的基因都会比上面所展示的更复杂。考虑如下基因:
01234567890123456
Q/a*+b-cbabaccbac
Q表示的是平方根。这个基因的头部长度为8,所以它的长度为8*2+1=17。它的转换方法与前面的例子是一样的,可以得到:

注意,在这个例子中,并不是基因中所有的元素都用于构造表达式树,因为转换过程在当某一行只包含终结符的时候就中止了。
而且,GEP染色体通常是多基因的,每一棵子表达式树都将编码为一个基因。这些表达式树转换后将会被某个特定的函数所链接,例如加或乘。
例如,如下的一个3基因染色体(位置为0的表示每一个基因的开端):
012345678012345678012345678
*aQ+abbaa/Q*/aababa*+Qaabba
它们编码的是如下的子表达式树:

根据链接函数,子表达式将被加或乘链接起来。假设链接函数是加,将会得到如下的表达式树:

—— 连接函数
注意,这也非常容易将上面的表达式树转换成一个简单的K表达式:
01234567890123456
++a*/aQQ*+/aaabba

