期货股票量化软件:群体优化算法粒子群(PSO)

1. 概述

大概有不少人读过斯坦尼斯瓦夫·莱姆(Stanisław Lem)的精彩科幻畅销书《无敌》("The Invincible")。 令人惊讶的是,对“群体”智能的最早描述之一正是随着这部科幻小说的发行而诞生的。 这个故事是有关未集中控制的幸存机器人。 值得注意的是,最简单且数量庞大的标本幸存下来,而非那些最复杂、最聪明、和最强大的标本。

在数千年的宏观演化过程中,这些机器已经学会了有效地应对他们的竞争对手,在智力和能源利用方面都遥遥领先。 他们不仅要与其他机器人作战,还要与星球上的生命世界作战。 这部作品中的幻想元素能够可靠地与进化和自然本身进行比较。

自远古时代以来,人们就对群体动物的行为(所谓的群体行为)感兴趣 — 迁徙到温暖国度的鸟群如何运作;蜂群如何生产食物;蚁群如何在创造复杂结构的同时生存;鱼群如何在行动整齐划一,且为什么它们的行为如此同步。 社会中的独立组织展现出协调良好的整体有机体的某些模式,这些都激发了算法优化领域的新思路。

群体智能描述的是模拟自组织系统的集体行为。 此类算法的数量相当多。 在 J.Kennedy 和 R.Eberhart 于 1995 年编写的规范版本中,该方法的基础模型是通过简化雷诺兹(Reynolds)模型获得的。 这种简化的成果,种群中不同的个体开始作为单独物体出现,这些物体没有大小,但具有一定的速度。

由于这极端类似物质粒子,产出的的简单物体被称为粒子,它们的种群被称为群体。 在每个时刻(每次迭代),粒子在空间中都具有一定位置和速度矢量。 针对粒子的每个位置,计算出目标函数的相应值,并在此基础上,根据一定的规则,粒子在搜索空间中改变其位置和速度。 在判定粒子的下一个位置时,也会考虑来自所有其它相邻粒子当中的最佳位置信息,对应于适应度函数的任务。

群算法示例:

  • 粒子群法
  • 蚂蚁算法
  • 蜜蜂算法
  • 人工免疫系统
  • 灰狼算法
  • 蝙蝠算法
  • 引力搜索算法
  • 利他主义算法
  • 以及许多其它

赫兹量化HERZ

从模拟集体行为到集体优化的过渡基于以下生物学思想:群居的生物体团结一致,能改善其生活条件。 平均而言,群居中的每个生物体,在与捕食者的斗争中都有更好的生存机会,与独立生物体相比,群居可以更有效地搜索、加工和储存食物,等等。 换言之,任何群居生物在其生存的整个时间段里,都会以不同程度的效率解决各种优化问题,例如,最大化食物量,同时最小化来自捕食者的损失。 考虑到这些,形成了构造各种数学优化方法的基础。

粒子群自始创以来,就是最著名和最流行的优化算法之一。 其各种实现的众多作者声称该算法在优化具有许多参数的复杂函数方面非常有效,甚至也适用于训练神经网络。

在本文中,我将尝试找出该算法是否真的适合解决复杂问题。 在算法的经典版本,及其许多修订版中,存在重大限制,关联的事实就是优化函数必须是平滑和连续的,这意味着它完全不适合离散函数。 然而,根据该系列文章,所有正在考虑的算法都将以这种方式进行修改(如果有任何限制),从而消除缺陷,令算法至少能纯技术性地工作。 换言之,所有算法都必须无无差别对待函数的平滑性(例如在交易者的问题中),并且在参数步骤上没有限制。

2. 算法原理

虽然上一篇文章介绍了优化世界,但它没有涵盖主程序(EA、脚本、指标)与优化算法核心的相交原理。 注意这一点很重要,因为无论如何,细心的读者都会有一个问题:为什么算法和示例程序要以这种方式编写。 优化算法的现有版本,均以这般方式构造,算法引用适应度函数作为外部对象,而算法是主要的可执行程序。

下面的图例 1 显示出算法将优化的参数传递给适应度函数,并获取适应度值(评估准则)的图表。 该系统不便于构建程序来解决用户、包括交易者的问题。 为何不方便呢? 例如,我们不能调用测试器依据整个历史记录运行。

图例 1. PSO 与适应度函数的相交

图例 2 中显示出的结构则要方便得多。 这里的优化算法不是一个独立的程序,而是一个单独的模块、或“黑匣子”。 该模块为每个优化参数提供“最小”、“最大”、和“步长”参数。 MQL 程序根据请求接收优化的参数,并返回适应度值,换眼言之,适应度函数值。 这种结构允许构建一系列非常灵活的解决方案,从在智能交易系统中使用自动优化,到编写自定义优化管理器。

图例 2. PSO 与 MQL程序的相交

还值得一提的是,调用优化算法方法(图例 2 中的 MQL 模块)的组织可用一个针对所有优化算法 (AO) 都通用的相同设计流图来表示:

Initialization_АО_0

迭代周期(世代)
{
1) Method_АО_1
2) 获取优化参数的每个变体的适应度值
3) Method_АО_2
}

因此,我们看到只用到了三种公开方法:Initialization_АО_0Method_АО_1 和 Method_АО_2。 这足以在任何复杂程度的用户项目中组织优化过程。

PSO 工作流本身如图例 3 所示,包括以下逻辑步骤:

  1. 随机粒子生成(第一次迭代)
  2. 获取每个粒子的适应度值
  3. 获取所有粒子的一般适应度值
  4. 粒子速度调节
  5. 断点或转到步骤 2
  6. 程序完成。

图例 3. PSO 工作流
 

我们赫兹量化软件来更详细地研究粒子群算法。

群体智能系统由许多粒子相互之间,以及与环境相互作用组成。 每个粒子都遵循简单的规则,尽管没有中央行为控制系统来告诉每个粒子该做什么。 它们之间的局部和随机相交作用导致出现不受个体控制的智能群体行为。
如果我们用羊群来类比,那么我们可以说所有粒子都必须执行简单的任务:

  • 避免与其它粒子相交;
  • 根据周围粒子的速度调整速度;
  • 尽量在自己与环境之间保持相当小的距离。

PSO 算法从种群初始化开始。 第二步是计算每个粒子的适应度值,然后更新单个和全局最佳分数,然后更新粒子的速度和位置。 当使用 PSO 时,数值优化问题的可能解由粒子的位置表示。 此外,每个粒子都有一个当前速率,反映其至新位置的绝对大小和方向,据推测更好的解/位置。

粒子还存储其适应度值、当前位置、已知最佳位置(含有已知最适应度的以前位置)、和已知最佳位置的适应度。 重复步骤 2 到 4,直到满足完成条件。 在第一次迭代中,所有粒子都被打散,以便找到最佳解(探索)。 每个颗粒都进行评估。 找到了邻域拓扑的最佳解,并更新群体中每个成员的个体和全局最佳粒子。 收敛是将所有粒子吸引到具有最佳解的粒子周围来达成的。 

尽管 PSO 算法的核心非常简单,但我们需要理解它,以便能够修改本文中的代码,来满足我们的需求。 PSO 是一个迭代过程。 在主处理循环的每次迭代中,首先更新每个粒子的当前速度。 粒子的当前速度,其局部信息和群的全局信息,需要通盘考虑。 然后取该粒子的新速度值更新每个粒子的位置。

在数学上,这两个粒子坐标更新方程如下所示:

v(t+1) = w * v(t) + c1 * rp * (p(t) –  x(t)) + (c2 * rg * (g(t) –  x(t))

x(t+1) = x(t) + v(t+1)

位置更新过程实际上比建议的方程简单得多。 第一个方程用于更新粒子的速度。

v(t+1) 项表示时间 t+1 处的速度。 新的速度取决于三项。

  • 第一个: w * v(t)。 w 因子称为惯性的重量分数,只是一个常数;v(t) 是时间 t 处的当前速度。
     
  • 第二项: c1 * rp * (p(t) – x(t))。 c1 因子是一个常数,称为认知(或个人或局部)权重分数。 rp 乘数是 [0, 1] 范围内的随机变量。 p(t) 向量是迄今为止找到的粒子的最佳位置,x(t) 向量是粒子的当前位置。
     
  • 第三项: 速度更新 c2 * rg * (g(t) – x(t)。 c2 因子是一个常数,称为社会(或全局)权重分数。 rg 乘数是 [0, 1] 范围内的随机变量。 g(t) 矢量的值是迄今为止在群体中发现的任何粒子的已知最佳位置。 一旦确定了新速度 v(t+1),它就被用来计算粒子的新位置 x(t+1)。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赫兹量化软件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值