遗传编程(Genetic Programming)学习笔记(二):GP流程示例
2021/9/6 22:06:57
本文主要是介绍遗传编程(Genetic Programming)学习笔记(二):GP流程示例,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
- 准备工作
- (1)确定terminal set
- (2)确定function set
- (3)目标函数(fitness measure)
- (4)设置GP的运行参数
- (5)终止条件
- 运行GP
- (1)种群初始化
- (2)计算适应度
- (3)产生新种群
- 选择
- 复制
- 变异
- 交叉
- (4)终止
本文的介绍一个简单的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.9,1.0}
(4)设置GP的运行参数
-
种群规模:4
-
种群更新:新的种群由原种群中的个体经过选择、复制(reproduction)、交叉、变异产生。一般新种群中的个体构成为90%交叉、8%复制、2%变异。本例中种群规模较小,因此50%交叉(2个个体),25%复制(1个个体),25%变异(1个个体)。
(没有设置交叉概率、变异概率?可能是因为种群太小了)
(5)终止条件
fitness < 0.1
运行GP
(1)种群初始化
根据上述 primitive set ,用 ramped half and half 方法生成深度为1-2的树。
(2)计算适应度
图中红色虚线是个体对应的函数曲线,黑色实线是目标多项式的函数曲线。
初代个体 | 适应度值 |
---|---|
a | 7.7 |
b | 11.0 |
c | 17.98 |
d | 28.7 |
(3)产生新种群
上图的是新的种群,下面分别介绍新种群的构成过程。
选择
采用轮盘赌选择。适应度高(本例中适应度值越小,适应度越高)的个体有更大的概率被选中,不是说一定会选到最好的个体,最差的个体也不一定不被选择。
复制
初始种群中的(a)最接近目标多项式,被选中的概率最大,假设选到了(a),直接复制到下一代中(generation 1的(a))。
变异
假设选了初始种群的(c)进行变异,mutation point选了“2”,用随机生成的子树“x%x”替换原来的“2”,得到新种群的(b)。
交叉
第一次交叉,父代1选了原种群的(a),父代2选了原种群的(b)。
第二次交叉,父代1选了原种群的(b),父代2选了原种群的(a)。
(4)终止
generation 1的个体(d)的适应度函数值为0,符合终止条件。
这篇关于遗传编程(Genetic Programming)学习笔记(二):GP流程示例的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升