从模拟集体行为到集体优化的过渡基于以下生物学思想:群居的生物体团结一致,能改善其生活条件。 平均而言,群居中的每个生物体,在与捕食者的斗争中都有更好的生存机会,与独立生物体相比,群居可以更有效地搜索、加工和储存食物,等等。 换言之,任何群居生物在其生存的整个时间段里,都会以不同程度的效率解决各种优化问题,例如,最大化食物量,同时最小化来自捕食者的损失。 考虑到这些,形成了构造各种数学优化方法的基础。
粒子群自始创以来,就是最著名和最流行的优化算法之一。 其各种实现的众多作者声称该算法在优化具有许多参数的复杂函数方面非常有效,甚至也适用于训练神经网络。
在本文中,我将尝试找出该算法是否真的适合解决复杂问题。 在算法的经典版本,及其许多修订版中,存在重大限制,关联的事实就是优化函数必须是平滑和连续的,这意味着它完全不适合离散函数。 然而,根据该系列文章,所有正在考虑的算法都将以这种方式进行修改(如果有任何限制),从而消除缺陷,令算法至少能纯技术性地工作。 换言之,所有算法都必须无无差别对待函数的平滑性(例如在交易者的问题中),并且在参数步骤上没有限制。
2. 算法原理
虽然上一篇文章介绍了优化世界,但它没有涵盖主程序(EA、脚本、指标)与优化算法核心的相交原理。 注意这一点很重要,因为无论如何,细心的读者都会有一个问题:为什么算法和示例程序要以这种方式编写。 优化算法的现有版本,均以这般方式构造,算法引用适应度函数作为外部对象,而算法是主要的可执行程序。
下面的图例 1 显示出算法将优化的参数传递给适应度函数,并获取适应度值(评估准则)的图表。 该系统不便于构建程序来解决用户、包括交易者的问题。 为何不方便呢? 例如,我们不能调用测试器依据整个历史记录运行。
编辑切换为居中
添加图片注释,不超过 140 字(可选)
图例 1. PSO 与适应度函数的相交
图例 2 中显示出的结构则要方便得多。 这里的优化算法不是一个独立的程序,而是一个单独的模块、或“黑匣子”。 该模块为每个优化参数提供“最小”、“最大”、和“步长”参数。 MQL 程序根据请求接收优化的参数,并返回适应度值,换眼言之,适应度函数值。 这种结构允许构建一系列非常灵活的解决方案,从在智能交易系统中使用自动优化,到编写自定义优化管理器。
编辑切换为居中
添加图片注释,不超过 140 字(可选)
图例 2. PSO 与 MQL程序的相交
还值得一提的是,调用优化算法方法(图例 2 中的 MQL 模块)的组织可用一个针对所有优化算法 (AO) 都通用的相同设计流图来表示:
Initialization_АО_0 迭代周期(世代) { 1) Method_АО_1 2) 获取优化参数的每个变体的适应度值 3) Method_АО_2 }
因此,我们看到只用到了三种公开方法:Initialization_АО_0,Method_АО_1 和 Method_АО_2。 这足以在任何复杂程度的用户项目中组织优化过程。
PSO 工作流本身如图例 3 所示,包括以下逻辑步骤:
-
随机粒子生成(第一次迭代)
-
获取每个粒子的适应度值
-
获取所有粒子的一般适应度值
-
粒子速度调节
-
断点或转到步骤 2
-
程序完成。