这个例子中,terminal set 定为 T = { x , ( − 5 , + 5 ) 随 机 数 } T=\{x,(-5,+5)随机数\} T={x,(−5,+5)随机数}
这个例子中,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是完全足够的。
这个例子的目标是在一定范围内拟合目标多项式,因此目标函数应该反映每个个体输出的函数值与目标多项式的接近程度。目标函数采用在
[
−
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.9,1.0}
种群规模:4
种群更新:新的种群由原种群中的个体经过选择、复制(reproduction)、交叉、变异产生。一般新种群中的个体构成为90%交叉、8%复制、2%变异。本例中种群规模较小,因此50%交叉(2个个体),25%复制(1个个体),25%变异(1个个体)。
(没有设置交叉概率、变异概率?可能是因为种群太小了)
fitness < 0.1
根据上述 primitive set ,用 ramped half and half 方法生成深度为1-2的树。
图中红色虚线是个体对应的函数曲线,黑色实线是目标多项式的函数曲线。
初代个体 | 适应度值 |
---|---|
a | 7.7 |
b | 11.0 |
c | 17.98 |
d | 28.7 |
上图的是新的种群,下面分别介绍新种群的构成过程。
采用轮盘赌选择。适应度高(本例中适应度值越小,适应度越高)的个体有更大的概率被选中,不是说一定会选到最好的个体,最差的个体也不一定不被选择。
初始种群中的(a)最接近目标多项式,被选中的概率最大,假设选到了(a),直接复制到下一代中(generation 1的(a))。
假设选了初始种群的(c)进行变异,mutation point选了“2”,用随机生成的子树“x%x”替换原来的“2”,得到新种群的(b)。
第一次交叉,父代1选了原种群的(a),父代2选了原种群的(b)。
第二次交叉,父代1选了原种群的(b),父代2选了原种群的(a)。
generation 1的个体(d)的适应度函数值为0,符合终止条件。