简介
遗传规划本身是一种最优化算法,以达尔文的进化论思想为基础,采用优胜劣汰,适者生存的策略。
不同于遗传算法的求解最优解,遗传规划一般用于求解最优的解结构,而解的结构一般用图或者树状的结构。
数学表达
定义{(xi, yi); xi∈X, yi∈Y, i∈I} 是给定的一对输入输出集合,其中X, Y均为有限维空间上的子集,I为指标集;C(X)是X上所有连续函数的全体,F是C(X)上的子集,ρ为乘积空间Π(i∈I)上的距离。
则遗传规划是求解f'∈F,使得任意f∈F,有:
算法步骤
-
初始化(Initialization)
随机生成多个个体,初始化种群(population) -
评价函数(Evaluation)
确定适当的适应度函数(Fitness),并评价所有个体 -
选择(Selection)
通过适应度函数和随机因子,在种群中选择下一代的个体 -
交换(Crossover)
随机选中两个个体的子树,进行交换 -
突变(Mutation)
随机选中个体的一个节点,将以节点为根的子树用随机生成的突变树替换 -
终止(Terminal Criterion)
重复步骤2~5,直至满足终止条件
终止条件,出现是适应度满足需求的个体或者达到循环次数
大致的算法流程图:
关注点一:初始化种群
终止集
解结构中的叶子节点,一般可以是常量或者变量。以我自己的图像处理为例,一般是输入的图像
函数集
一般是解结构中的运算符,也就是函数。以图像处理为例,多为各种滤波器,一个或者两个输入的滤波器都可以。
解结构
节点 I 属于终止集,其他节点 f 属于函数集。
关注点二:适应度函数
图像处理过程中,适应度函数相对较为容易确定。一般取目标图像和输出图像的像素差的方差等即可。
关注点三:选择算法
选择算法很多。一般采用轮盘算法,可以在一定程度上平衡物种多样性和优胜劣汰,从而更快得到最优结构。
关注点四:遗传操作-交叉、突变
遗传操作也不局限于这么几种,但交叉(Crossover)和变异(Mutation)是最常见的两种遗传操作。
工具箱
-
C语言 DGPC(Dave’s Genetic Programming code in C)
- 没有完善文档
- 添加滤波器、处理图片不方便
-
Matlab GPLab ToolBox √
- 英文文档
- 可以通过函数添加滤波器
-
GPOLSV2
- Matlab 工具箱
图像处理与GPLab
还没有完成程序,但是想法上是这样的: 1. 终止集应该是待处理图像。在GPLab中,个人觉得可以写一个没有参数的函数,返回值是image。 2. 函数集就是图像处理过程中需要的各种滤波器。应该单输入和双输入的滤波器都包含一些。 3. 适应度函数追求简单高效。
--- EOF --- 未完待续