遗传编程(Genetic Programming)学习笔记(二):GP流程示例


本文介绍一个简单的GP运行的实例:在 [ − 1 , 1 ] [-1,1] [1,1]的范围内拟合函数 y = x 2 + x + 1 y=x^{2}+x+1 y=x2+x+1
这种自动的数值拟合的过程也可以被称为 符号回归(Symbolic regression)/ 系统辨识(System identification)

准备工作

(1)确定terminal set

这个例子中,terminal set 定为 T = { x , ( − 5 , + 5 ) 随 机 数 } T=\{x,(-5,+5)随机数\} T={x,(5,+5)}

(2)确定function set

这个例子中,function set 定为 F = { + , − , ∗ , % } F=\{+,-,*,\%\} F={+,,,%}
其中,“ % \% % ”表示 Protected division: a % b = { a / b if  b ≠ 0 1 if  b = 0 a\%b=\begin{cases} a/b &\text{if } b\not=0 \\ 1 &\text{if } b=0 \end{cases} a%b={a/b1if b=0if b=0
大多数数值回归问题至少需要加、减、乘、除四个常用函数。在这个例子中,目标多项式是可以用上述的 primitive set 精确表示的,因此用上面的primitive set实现GP是完全足够的。

(3)目标函数(fitness measure)

这个例子的目标是在一定范围内拟合目标多项式,因此目标函数应该反映每个个体输出的函数值与目标多项式的接近程度。目标函数采用在 [ − 1 , 1 ] [-1,1] [1,1]范围内的不同 x x x 取值下,个体函数值与目标多项式函数值的误差绝对值之和。(越小越好)
f = ∑ ∣ y ( x i ) − y ′ ( x i ) ∣ ,   x i ∈ { − 1.0 , − 0.9 , … , 0.9 , 1.0 } f=\sum\lvert y(x_i)-y'(x_i) \rvert, \text{ }x_i\isin\{-1.0,-0.9,…,0.9,1.0\} f=y(xi)y(xi), xi{1.0,0.9,0.91.0}

(4)设置GP的运行参数

  • 种群规模:4

  • 种群更新:新的种群由原种群中的个体经过选择、复制(reproduction)、交叉、变异产生。一般新种群中的个体构成为90%交叉、8%复制、2%变异。本例中种群规模较小,因此50%交叉(2个个体),25%复制(1个个体),25%变异(1个个体)。
    (没有设置交叉概率、变异概率?可能是因为种群太小了)

(5)终止条件

fitness < 0.1
在这里插入图片描述

运行GP

GP流程图

(1)种群初始化

根据上述 primitive set ,用 ramped half and half 方法生成深度为1-2的树。
初始种群(generation 0)

(2)计算适应度

在这里插入图片描述
图中红色虚线是个体对应的函数曲线,黑色实线是目标多项式的函数曲线。

初代个体适应度值
a7.7
b11.0
c17.98
d28.7

(3)产生新种群

新种群(generation 1)
上图的是新的种群,下面分别介绍新种群的构成过程。

选择

采用轮盘赌选择。适应度高(本例中适应度值越小,适应度越高)的个体有更大的概率被选中,不是说一定会选到最好的个体,最差的个体也不一定不被选择。

复制

初始种群中的(a)最接近目标多项式,被选中的概率最大,假设选到了(a),直接复制到下一代中(generation 1的(a))。
复制

变异

假设选了初始种群的(c)进行变异,mutation point选了“2”,用与生成初始种群相同的方式(上述的primitive set,ramped half and half,depth 1-2)生成一个子树,替换原来的“2”,得到新种群的(b)。
变异

交叉

第一次交叉,parent 1选了原种群的(a),parent 2选了原种群的(b)。
交叉1
第二次交叉,parent 1选了原种群的(b),parent 2选了原种群的(a)。
交叉2
这里的交叉操作不限制新生成的树的深度。有的交叉会对子树的大小有限制,例如size-fair crossover。
从以上的两次交叉结果可以看出,虽然两次都选了generation 0的(a)和(b)作为parent,但是(a)和(b)在两次交叉中起的作用不同。
在单点交叉的过程中,对于任何一个个体,如果这个个体被选为parent 1,那么crossover point子树不会出现在子代中。如果这个个体被选为parent 2,那么crossover point子树会出现在子代中。

(4)终止

generation 1的个体(d)的适应度函数值为0,符合终止条件,最优的个体为generation 1 的(d)。

  • 11
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
遗传编程Genetic Programming,简称GP)是一种通过模拟物种进化过程来进行计算优化的方法。在遗传编程中,我们使用一系列基因表达式来表示问题的解决方案。 GP符号回归是遗传编程的一种特殊应用,用于解决回归问题。回归问题是指根据输入的特征数据预测一个或多个连续的输出值。在GP符号回归中,我们通过定义适应度函数,将许多不同的基因表达式与目标函数进行比较,以选择出最优的解。 GP符号回归的基本步骤如下: 1. 初始化种群:随机生成一组初始的基因表达式作为种群。 2. 评估适应度:根据预定义的适应度函数,计算每个个体的适应度。 3. 选择:根据适应度,选择一部分个体作为“父代”,用于繁殖下一代。 4. 交叉和变异:通过交叉和变异操作,对“父代”进行改良和改变,生成新的“子代”。 5. 更新种群:用新的“子代”替代原有的种群,继续进行下一轮的选择、变异和更新。 6. 终止条件:达到预定的终止条件时,停止进化过程,选择最优的基因表达式作为结果。 通过这些步骤的迭代,GP符号回归逐渐找到一个能够较好地拟合训练数据并具有较高泛化能力的基因表达式。 GP符号回归的优点包括: - 非参数化:不需要事先定义模型的形式,适应性较强。 - 自主进化:通过模拟自然进化过程,能够自动搜索最优解。 - 灵活性:可以处理非线性、非稳定、高维度和噪声数据等各种复杂情况。 然而,GP符号回归也存在一些挑战和限制,如遗传编程过程较为耗时,需要选择合适的适应度评估函数、交叉和变异操作策略等。此外,容易陷入局部最优解,泛化能力较差,需要通过合适的参数调整和后处理技术进行优化。 总之,GP符号回归是一种强大的回归问题求解方法,在多个领域中有着广泛的应用潜力。我们可以通过合理的问题建模和算法参数选择,提高GP符号回归的效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值