C/C++教程

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

本文主要是介绍遗传编程(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/b1​if 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

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”,用随机生成的子树“x%x”替换原来的“2”,得到新种群的(b)。
变异

交叉

第一次交叉,父代1选了原种群的(a),父代2选了原种群的(b)。
交叉1
第二次交叉,父代1选了原种群的(b),父代2选了原种群的(a)。
交叉2

(4)终止

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

这篇关于遗传编程(Genetic Programming)学习笔记(二):GP流程示例的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!