Moraglio 等人提出的语义几何交叉(SGX)取得了非常有前景的结果,受到了研究者的极大关注,但在解的规模呈指数增长方面存在显著劣势。为了解决这个问题,我们提出了一种名为子树语义几何交叉(SSGX)的交叉算子。它与SGX类似,但使用子树语义相似度来近似几何性质。我们将SSGX与标准交叉(SC)、SGX以及最近的其他基于语义的交叉算子进行比较,并在几个符号回归问题上进行测试。总体而言,我们的新算子在测试数据性能上优于其他算子,并且相对于大多数算子减少了计算时间。进一步分析表明,虽然SGX具有较强的利用性,而SC具有较强的探索性,但SSGX实现了两者的平衡。同时也展示了进一步提升SSGX性能的简单方法。
这一部分为本文的研究提出了一些必要的背景。首先,介绍了一种度量语义的方法。其次,定义了语义距离。最后简要介绍了SGX [29]。
术语" ‘语义’ "的含义因领域而异。在GP中,通常将程序的语义简单地定义为程序对一组输入值的行为。在本文中,我们遵循先前的GP研究[23、26、29、34、36],将程序(个体)的语义定义为问题的适应度案例的输出。形式上,程序的语义定义如下:
定义 1 设 K = ( k 1 , k 2 , . . . , k N ) K = (k_1, k_2, ..., k_N) K=(k1,k2,...,kN)为该问题的适应度情况。程序 P P P的程序语义 S ( P ) S(P) S(P)是在所有适应度情况下运行 P P P得到的输出值的向量。
该定义对于定义了一组适应度案例的问题是有效的。
基于上述定义,两棵树或子树之间的语义距离通常被定义为它们对应的输出向量相对于适应度案例输入向量的距离。在本文中,我们使用问题的适应度案例数归一化的曼哈顿度量作为两个个体的语义距离
定义 2 两棵树 ( P 1 P_1 P1和 P 2 P_2 P2)之间的语义距离(SD)定义如下。
这个定义对于输出为单个实数的程序是有效的,就像在符号回归中一样。
如前所述,Moraglio等人[29]提出了几个问题域的几何语义算子(交叉和变异)。他们的思想来源于进化算法的统一几何理论[27]。这些算子的动机是允许GP直接在语义空间进行搜索。形式上,实值符号回归的几何交叉(SGX)定义如下[29]。
定义 3 给定两个父代函数 P 1 , P 2 : R n → R P_1,P_2:\Bbb{R}^n \to \Bbb{R} P1,P2:Rn→R,几何语义交叉返回实函数 P 3 = T R P 1 + ( 1 − T R ) P 2 P_3 = T_RP_1 + (1-T_R)P_2 P3=TRP1+(1−TR)P2其中 T R T_R TR是 [ 0 , 1 ] [ 0 , 1] [0,1]中的随机实常数或与陪域 [ 0 , 1 ] [ 0 , 1] [0,1]的随机实函数。
如果 T R T_R TR是一个随机实常数,则交叉产生的子代位于语义空间中连接两个父代的关于欧氏距离的线段上。这是一条 ‘‘thin’’ 线段。然而,如果 T R T_R TR是随机实函数,那么子代位于父代之间关于曼哈顿距离的线段上。这是一条’ ‘厚’ '的线段。之前的一些研究表明,曼哈顿版本的SGX表现更好的[7、30],所以本文研究的版本。这里TR作为函数而不是常数的选择与语义距离选择曼哈顿而不是欧氏距离和适应度函数选择平均绝对误差而不是均方根误差有关。
SGX算子生成包含父代和子代完整结构的子代。因此,孩子的规模大于父母的规模之和。个体规模的指数增长使得该算子在一个简单的实现中不切实际,尽管这可能部分地通过像Moraglio等[29]中使用子代的自动简化来解决,或者通过实现来解决[ 28、38]中提出的缓存。在Sect.4,提出了解决该问题的备选方案。
SGX算子依赖于对问题的若干假设。如前所述,它将语义定义为关于一组预定输入的输出值向量,这可能并不适用于所有问题。它依赖于输出在合适的度量空间中的几何性质,以及GP语言的"功能性",即没有副作用或程序状态。所有这些假设对于包括符号回归在内的重要问题类都是成立的,但它们的确代表了对SGX的一个限制。包括本文在内的其他几种现代语义交叉算子也是如此。可以允许解除这种限制的语义的替代定义在GP中也被用于[12、16]。
新的交叉算子称为SSGX,类似于 Moraglio 等人[29]的交叉算子。但它是在子树级别实现的。其过程如下。选择两个父代 P 1 P_1 P1和 P 2 P_2 P2以及一个概率值 ϵ \epsilon ϵ。若随机生成一个 R ∈ [ 0 , 1 ] R\in[0,1] R∈[0,1] 比 ϵ \epsilon ϵ 更小的值,则执行新的几何子树交叉。否则,执行标准(子树)交叉。这一步意味着一定比例的交叉操作由SC执行。在早期的实验中,我们实现了100%的几何子树交叉,发现种群很快崩溃到非常小的个体。对于复杂问题,如果个体生长不足,GP的性能会显著恶化。
在进行新型几何子树交叉的情况下,在 P 1 P_1 P1中随机选择一个满足大小约束的子树(由参数 MaxTrial 给出),不包括 P 1 P_1 P1本身。我们用 S t 1 St_1 St1表示其中与 P 1 P_1 P1语义最相似的一个。通过这种方式选择 S t 1 St_1 St1的目的是用一个更小的子树代替一个高适应度的父树,该子树近似其语义。尺寸约束旨在控制子代的代码增长。在本文中,我们使用了一个简单的约束,其中只有一个大小在 [ α , β ] [\alpha, \beta] [α,β]范围内的子树被选择。下界 ( α \alpha α) 旨在避免选择非常小的子树(例如叶子节点),这可能会破坏父树的结构。上界( β \beta β)用于限制代码增长。
我们在 P 2 P_2 P2中选择与 S t 1 St_1 St1相同的 S t 2 St_2 St2。然后通过子树 S t 1 St_1 St1和 S t 2 St_2 St2的凸组合生成两个子代1。换句话说, C 1 C_1 C1和 C 2 C_2 C2是, 生成为: C 1 = T R S t 1 + ( 1 − T R ) S t 2 C_1 = T_RSt_1 + (1 - T_R)St_2 C1=TRSt1+(1−TR)St2和 C 2 = ( 1 − T R ) S t 1 + T R S t 2 C_2 = (1 - T_R)St_1 + T_RSt_2 C2=(1−TR)St1+TRSt2. T R TR TR是一个具有域 [ 0 , 1 ] [ 0 , 1] [0,1]的随机函数,通过生成最大深度为 2 2 2的随机树,并将结果通过logistic函数传递而创建。 S t 1 St_1 St1和 S t 2 St_2 St2有效地近似了 P 1 P_1 P1和 P 2 P_2 P2的语义,并代替它们使用。 P 1 P_1 P1和 P 2 P_2 P2本身不用于交叉。如果 S t 1 St_1 St1和 S t 2 St_2 St2精确复制 P 1 P_1 P1和 P 2 P_2 P2的语义,则语义效果与Moraglio等人[29]提出的几何语义交叉相同,但代码增长较少。在实际应用中, S t 1 St_1 St1和 S t 2 St_2 St2只会逼近 P 1 P_1 P1和 P 2 P_2 P2的语义。因此,我们可以将该过程看作是一种几何语义交叉,然后是一种启发式和不精确的简化,类似于Moraglio等[29]提出的精确后算子简化。SSGX的细节在算法 1 中给出,其中 SD \text{SD} SD 是Sect 2 中定义的两个个体之间的语义距离,以及 S i z e O f ( S t ) SizeOf(St) SizeOf(St)函数返回树 S t St St的节点数。
在Sect.8测试MaxTrial的几个值,以考察其对SSGX性能的影响。与SGX [29]相比,这种交叉具有一些有趣的性质。首先,在子树层次上近似几何性质,在保持几何交叉(在Sect .6)为此提供了证据)的部分优势的同时,潜在地有助于减少子代规模。其次,只有一部分SSGX交叉点使用几何方法,即子树的凸组合。因此,我们可以使用任意版本的子树交叉,如SSC,MSSC[33、34]或LGX [19]。在Sect .9,我们将研究这是否可以进一步提升SSGX的性能。
有可能在一代中被选为 S t 1 St_1 St1或 S t 2 St_2 St2的子树在以后的一代中再次被选为 S t 1 St_1 St1或 S t 2 St_2 St2,因为每个交叉操作都将 S t 1 St_1 St1和 S t 2 St_2 St2保留为子树。如果这种情况经常发生,搜索可能会因为重新访问旧的遗传物质而效率低下。
然而,这种情况发生的概率并不高,因为在我们的实验中,只有一部分(30%)是几何交叉,剩余部分(70% )是SC。变异也被用来修饰个体。这些降低了子树被重新选择的概率。
Nguyen Q U, Pham T A, Nguyen X H, et al. Subtree semantic geometric crossover for genetic programming[J]. Genetic Programming and Evolvable Machines, 2016, 17: 25-53.
新的交叉算子称为SSGX,其过程如下:
选择两个父代 P 1 P_1 P1和 P 2 P_2 P2以及一个概率值 ϵ \epsilon ϵ。若随机生成一个 R ∈ [ 0 , 1 ] R\in[0,1] R∈[0,1] 比 ϵ \epsilon ϵ 更小的值,则执行新的几何子树交叉。否则,执行标准(子树)交叉。这一步意味着一定比例的交叉操作由SC执行。
在进行新型几何子树交叉的情况下,在 P 1 P_1 P1中随机选择一个满足大小约束的子树(由参数 MaxTrial 给出),不包括 P 1 P_1 P1本身。我们用 S t 1 St_1 St1表示其中与 P 1 P_1 P1语义最相似的一个。通过这种方式选择 S t 1 St_1 St1的目的是用一个更小的子树代替一个高适应度的父树,该子树近似其语义。尺寸约束旨在控制子代的代码增长。在本文中,我们使用了一个简单的约束,其中只有一个大小在 [ α , β ] [\alpha, \beta] [α,β]范围内的子树被选择。下界 ( α \alpha α) 旨在避免选择非常小的子树(例如叶子节点),这可能会破坏父树的结构。上界( β \beta β)用于限制代码增长。
在 P 2 P_2 P2中选择与 S t 1 St_1 St1相同的 S t 2 St_2 St2。然后通过子树 S t 1 St_1 St1和 S t 2 St_2 St2的凸组合生成两个子代1。换句话说, C 1 C_1 C1和 C 2 C_2 C2的生成为: C 1 = T R S t 1 + ( 1 − T R ) S t 2 C_1 = T_RSt_1 + (1 - T_R)St_2 C1=TRSt1+(1−TR)St2和 C 2 = ( 1 − T R ) S t 1 + T R S t 2 C_2 = (1 - T_R)St_1 + T_RSt_2 C2=(1−TR)St1+TRSt2. T R TR TR是一个具有域 [ 0 , 1 ] [ 0 , 1] [0,1]的随机函数,通过生成最大深度为 2 2 2的随机树,并将结果通过logistic函数传递而创建。 S t 1 St_1 St1和 S t 2 St_2 St2有效地近似了 P 1 P_1 P1和 P 2 P_2 P2的语义,并代替它们使用。 P 1 P_1 P1和 P 2 P_2 P2本身不用于交叉。如果 S t 1 St_1 St1和 S t 2 St_2 St2精确复制 P 1 P_1 P1和 P 2 P_2 P2的语义,则语义效果与Moraglio等人[29]提出的几何语义交叉相同,但代码增长较少。在实际应用中, S t 1 St_1 St1和 S t 2 St_2 St2只会逼近 P 1 P_1 P1和 P 2 P_2 P2的语义。因此,我们可以将该过程看作是一种几何语义交叉,然后是一种启发式和不精确的简化,类似于Moraglio等[29]提出的精确后算子简化。SSGX的细节在算法 1 中给出,其中 SD \text{SD} SD 是Sect 2 中定义的两个个体之间的语义距离,以及 S i z e O f ( S t ) SizeOf(St) SizeOf(St)函数返回树 S t St St的节点数。