首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

基于遗传编程自动进化开发交易策略4

第四部分 GP设置

遗传编程的主要使用一套运算符(选择selection,变异mutation,交叉crossover,精英保留elitism等)和相关参数(世代数number of generations,种群大小population size等)来运行。

关于GP参数和运算符,我们首先要明白它们是构成一个复杂的系统的基本。一个参数的更改可能会或也可能不会影响其他参数的行为方式。一个参数的微小变化可能导致整个进化结果的非线性变化,而有些时候,参数的重大变化可能根本不会改变整体结果。一个例子是是设置种群大小。刚接触到GP的初学者通常认为种群规模越大越好,因为他们觉得种群中的个体越多,搜索到好的结果的总体机会就越大。但这恰恰搞错了。通常,一个较小的(但不是太小的!)种群实际上比较大的种群要更好。种群中个体数量多少与整体的噪音水平之间有一个平衡。种群中个体数量越多,会减少单个相对适应的个体创造后代的机会,所以噪音水平增加。一些GP商业软件宣称它们很短时间内可以处理成千个个体。从我的经验来看,如果你设置了很多,譬如种数里个数超过500个,你很可能做错了。

那么,让我们仔细看看一些参数和运算符。

种群大小Population Size

尝试从可能有100个的小参数开始。 这也将减少计算时间。 如上所述,由于噪声水平的增加,增加种群大小不一定会导致更好的结果。

世代数 Number of generations

如果你的GP算法有效,你会发现在进化的早期阶段,可以相对容易地进化出更适应(fiiter)的个体,尽管有的时候会是这样,几代都没有什么提升,但突然会有一个很大的进化提升。经过几代之后,进化改进发生的机率就没有那么高了。所以,建议尝试从10到15世代数开始。 如果从第一代到最后一代只有微小的改进,那么可能是哪里搞错了。同时如果一定代数之后,进化过程没有进一步提升,引入限定世代数来停止进化过程的设置也非常有用(至少会节省很多时间)。

决策树的数量和树的大小 Number of decision trees and tree size

在第一篇,我们已经写过如何用决策树对交易规则进行编码。

这里需要注意决策树的复杂程度与健壮性的平衡取舍问题。你的决策树深度/大小depth/size越大,子决策树数量越多,整体系统越复杂,越有可能过拟合。一般来说,不复杂的系统更应当受得青睐,尽管它可能对多头和空头使用不同的规则。在后面的文章,我们将关注通过parsimony pressure来惩罚复杂性的主题。

遗传编程算法 Genetic Programming Algorithm

虽然基本的GP算法相对简单,但它有各种变体,例如线性遗传编程 Linear Genetic Programming ,笛卡尔遗传编程Cartesian Genetic Programming ,非支配排序遗传算法(Non-dominated Sorting Genetic Algorithm,NSGA),强度帕累托进化算法(Strength Pareto Evolutionary Algorithm,SPEA)等等。

选择不同的具体算法,通常会影响个体的编码方式,适应度函数以及选择,变异和交叉操作的实现。经典的算法里,突变,交叉和精英保留的操作互相排斥,而不是组合使用。譬如作为后代出来的两个个体,不会发生突变,尽管这当然也有可能。

选择 Selection

选择运算(selection)是如何从池中为特定目的(例如突变或交叉)选择一个或多个个体。有许多选择策略,每种选择策略都是基于某种标准来比较个体。在大多数情况下,最好的(就适应度函数而言)个体就是我们需要的,但有时它也可能是最糟糕的个体。在多目标适应度函数的情况下,选择过程可能变得非常复杂。

通常,选择运算必须选择两个个体,但确保不要两次都选择同一个个体。仅选择一个最佳个体进行繁殖是不明智的,因为这可能导致在搜索空间中过早收敛到局部而非全局最优。采取一种平衡的方法很有必要,譬如在对最好的个体给予更高地被选择、繁殖的机会的同时,也继续选择较弱的个体。这将在生存压力和预留空间之间创造一个模糊地带,以使得新方案能涌现出来或被搜索到。

有各种选择方法,但最流行的选择方法可能是“锦标赛选择”tournament selection 。锦标赛选择分为两步。首先,随机选择一些(例如7个)个体 - “锦标赛”。其次,根据适应度从比赛中选择一个或两个个体。较大的锦标赛规模使得较弱的个体总体上被选中的机会较低。

精英保留 Elitism

有时,允许将群体中最好的一个或两个个体直接复制到下一代可能是个好主意,因为不这样操作它们可能会丢失。 精英保留的问题通常是,如果不采取进一步措施,后代可能会有许多相同的个体。 然而,平等地比较个体可能是计算比较耗时的操作。 因为这个原因,我个人不喜欢使用精英保留操作。

突变 Mutation

突变应该只以很低的概率发生,例如: 在0% - 2%的情况下。 一些GP在进化过程会实行动态变化的变异率。 请注意,变异必须遵循决策树中节点的类型化的原则。

交叉 Crossover

交叉操作,一般概率很高(例如80%-100%),被用来选出繁殖后代。 使用类型化节点可确保交叉运算符仅创建有效且有意义的后代。 一个问题是在进化过程中,该运算符倾向于增加决策树的平均大小,从而导致代码膨胀。 通常,最适合的个体实际是过度拟合历史时间序列的,他们也通常是决策树规模最大的。 选择操作符以高概率选择它们,交叉操作随后产生的后代增加了决策树的大小。 适当的控制措施是parsimony pressure,我将在后面的文章中讨论这个话题。

进化出结构相似个体的问题

一个常见的问题是,随着时间的推移,进化过程往往会发展出许多几乎相同的交易策略。出现这种现象有各种不同的原因。

其中一个原因是种群中好的个体的适应度的进化是不连续的。从某一代到下一代,好的个体适应度存在明显的“跳跃”,好的个体具有较高机会留到下一代。因此,连续几代中,几个最适合的个体将有最大的创造后代的机会,自然后代将在结构上与其父母相似。结果就是,越来越多结构相似的个体占据着种群中靠前的位置,从而减少了整个种群的进化的多样性。

我们很难为这个问题找到满意的解决办法。一种可能是将突变参数保持在高水平。另一种解决方案是引入自适应的GP参数,例如在整个进化过程中使用变化的突变、或交叉的概率。或者对选择运算符进行动态更改。不幸的是,这些方案通常不是非常有效,并且可能非常难以正确实施或校准。计算上比较耗时的解决方案是对每一代都比较其中的交易策略,并禁止种群中存在结构上相同的个体。这需要在构建下一代种群时对每个个体进行相互比较,这将在很大程度上减缓进化过程。

有趣的是,根据我的经验,当从单目标切换到强大的多目标适应度函数/进化过程(例如非支配排序遗传算法(NSGA)和强度帕累托进化算法(SPEA)算法)时,这个问题显着减少。 。这些算法在选择用于繁殖的个体时定义了不同的方法,这比单个目标适应度函数更少地减少了基因样本中的预期的变化。我将在后面的文章中更多地介绍这两种算法。

系列回顾

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190101A0CMBO00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券