由于GEP采用了线性等长编码,所以其遗传操作更加类似遗传算法。只要在进行遗传操作的过程满足:1)保持基因的长度,2)尾部只能出现终结符。那么得到的子代染色体就仍然是合法的基因。所以GEP的遗传算子可以非常简单,灵活。在本节的例子中,F={+-*}T={ab},头部长度为h=8

       变异       变异作用在单个染色体上,对染色体的每一位进行随机测试,当满足变异概率,重新产生该位的编码。如果变异位在基因头部,可以重新选择所有的符号,否则只能选择终结符。图X.X演示了父代染色体P,经过变异产生子代S的过程。它变异了第4个位置的编码(粗体部分是变异位)

01234567890123456                   01234567890123456

P  +a++b-*-bbbabbaab                S  +a+++-*-bbbabbaab

X.X:变异

       插串       插串是GEP所特有的遗传算子。它随机在基因中选择一段子串,然后将该子串插入到头部的随机指定的一个位置(但不能是第1个位置),将头部的其他符号向后顺延,超过头部长度的编码将被截去。图X.X演示了父代染色体P,经过插串操作产生子代S的过程。它选择了第1012位置的编码(粗体部分是插串),插到第3个位置,父染色体中的第57位置的编码被截掉了。

01234567890123456                   01234567890123456

P  +a++b-*-bbbabbaab                S  +a+bab+bbbbabbaab

X.X:插串

       根插串    插串算子不允许将选择的串插入到第1个位置,而根插串算子则是专门将选择的子串插入到第1个位置。根据插串算子从头部的随机选择的一个位置开始向后扫描,找到第一个函数,然后以该位置为起始,选择一段子串,将该子串插入到第1个位置,头部编码依次后移,超过头部的部分被截去。如果扫描过程没有找到函数,责不做任何事情。图X.X演示了父代染色体P,经过插串操作产生子代S的过程。它选择了第345位置的编码(粗体部分是插串),插入到第3个位置,父染色体中的第57位置的编码被截掉了。

01234567890123456                   01234567890123456

P  +a++b-*-bbbabbaab                S  +b-+a++bbbbabbaab

X.X:根插串

       单点重组       单点重组作用在两个父代染色体上,随即选择一个交叉位置,互换交叉点后面的染色体部分,得到两个子代染色体。图X.X演示了两个父代染色体P1P2经过单点重组产生两个子代S1S2的过程。它们交换了从第4个位置之后的部分(粗体部分来自于染色体P1)。两个子代染色体分别继承了两个父代染色体的部分信息。

01234567890123456                   01234567890123456

P1 +a++b-*-bbbabbaab                  S1 +a++a-b+aabbababa

P2 +*a-a-b+aabbababa                S2 +*a-b-*-bbbabbaab

X.X:单点重组

    双点重组    双点重组也是作用在两个父代染色体上。在染色体上随机选择两个交叉点,然后互换交叉点之间的染色体部分。X.X演示了两个父代染色体P1P2经过单点重组产生两个子代S1S2的过程。它们交换了第712位置的编码(粗体部分来自于染色体P1

01234567890123456                   01234567890123456

P1 +a++b-*-bbbabbaab                  S1 +a++a-b+aabbababa

P2 +*a-a-b+aabbababa                S2 +*a-b-*-bbbabbaab

X.X:双点重组

    基因重组    基因重组只作用于多基因的染色体。随机选择一个基因,然后交换两个父代染色体的相对应的基因。

    很显然,经过这些遗传算子的作用,得到的子代染色体仍然符合GEP基因的定义,也能够解码为一棵完整的语法树。

posted on 2007-03-15 21:09 Jacky Gao 阅读(299) 评论(1) 编辑 收藏