Renascence架构原理——遗传规划算法

遗传规划算法

遗传规划算法

请先看一下遗传算法:
http://blog.csdn.net/v_JULY_v/article/details/6132775

遗传规划/遗传编程(Genetic Programming)是遗传算法的一个分支,与遗传算法中每个个体是一段染色体编码不同,它的个体是一个计算机程序。
维基上说它在70年代就已经有人实践,不过正式提出应该还是在John R. Koza教授于1990年发表的博士论文中。

遗传规划最早的应用是符号回归,比如为了拟合 z=f(x,y),它生成一个初始函数 g(x,y),然后以g(x,y)与z的相关系数为适应度,进行选择交叉变异,最终得到最优的一个函数g’,再做一次线性回归即可。

如下是GP表示的一个例子,自然,还有其他的表达方式:
线型:GEP(Gene Expression Programming),
图型:CGP(Cartesian Genetic Programming)。

以树型为例:
GPTree
这棵树表示一个函数,就是上面所述的g(x,y),至于怎么用就见仁见智了,确定好用法之后设定一个计算适应度的方案,就可以跑遗传规划了。

在遗传规划中,选择算子与遗传算法的相同,交叉变异需要根据表达方式来。
树形的交叉实现是这样:
交叉
变异实现是这样:
变异

遗传规划的目标是得到最优的计算机程序,其自由度是机器学习算法中最高的,几乎能处理任何问题。当然,能处理问题不代表能解决,解决问题还是需要精确度达到一定要求的。

Renascence架构中的应用

Renascence架构使用遗传规划算法,去动态决定ADF的公式。但与上面所描述的GP算法来说,有很大的不一样:
1.Renascence架构中,每个函数有自己的输入输出类型,子节点的输出类型必须要匹配父节点的输入类型。
2.Renascence生成的计算机程序的实现依赖于下层的函数库,不是完整的计算机程序。
由于这些不同,生成和变异算法都需要先用回溯算法找出所有可能解,然后再随机挑选,这点比起传统的遗传规划算法来说复杂不少。

树形实现最容易实现,Renascence架构中目前采用的是树形的表达方案,又因为交叉算子实现起来比较麻烦且容易造成膨胀,舍弃了交叉算子,采用进化策略(Evolution Strategy)的算法做优化。当前架构所用的结构优化算法事实上还有很大的优化空间。

参考资料

维普上的Genetic Programming的介绍:
https://en.wikipedia.org/wiki/Genetic_programming

遗传算法的介绍(这篇文章讲得较为基础,很多变种优化没有考虑,不过适合入门):
http://blog.csdn.net/v_JULY_v/article/details/6132775

这篇文章讲GEP比较详细,本文没有看懂可以看这篇:
http://blog.sciencenet.cn/blog-287179-537914.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值