私募

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz

期货量化软件:赫兹量化中并行粒子群优化的研究

[复制链接]
发表于 2023-10-25 08:24:45 | 显示全部楼层 |阅读模式
根据这个代码,每个粒子都有一个当前的位置、速度和过去“最佳”点的记忆。这里,“最佳”点是指达到该粒子目标函数最高值的点(一组EA输入参数)。让我们在类里面描述一下。
2 s& t# v, U2 L) J6 Z class Particle  {    public:      double position[];    // current point      double best[];        // best point known to the particle      double velocity[];    // current speed            double positionValue; // EA performance in current point      double bestValue;     // EA performance in the best point      int    group;            Particle(const int params)      {        ArrayResize(position, params);        ArrayResize(best, params);        ArrayResize(velocity, params);        bestValue = -DBL_MAX;        group = -1;      }  };9 g. q- K2 ?/ R& f+ E# L- E  a
所有数组的大小都等于优化空间的维数,因此它等于正在优化的专家顾问参数的数目(传递给构造函数)。默认情况下,目标函数值越大,优化效果越好。因此,用最小可能的 -DBL_MAX 数值来初始化 bestValue 字段。其中一个交易指标通常被用来作为评估EA的标准,如利润、盈利能力、夏普比率等。如果通过较低值被认为更好的参数,例如回撤,来执行优化,则可以进行适当的转换以最大化相反的值。. M) K4 S5 e0 B) d! {( @
数组和变量是公有的,以简化访问和它们的重新计算代码。严格遵守OOP原则需要使用“private”修饰符隐藏它们,并描述读取和修改方法。
( a; q6 q; Y  {2 D5 u; v除了单个粒子外,该算法还处理所谓的“拓扑”或粒子子集。它们可以根据不同的原则来创建。“社会群体拓扑”将用于我们的案例。这样的组存储有关其所有粒子中最佳位置的信息。9 l1 l' l6 k& c, y  E% [# K
class Group  {    private:      double result;    // best EA performance in the group        public:      double optimum[]; // best known position in the group            Group(const int params)      {        ArrayResize(optimum, params);        ArrayInitialize(optimum, 0);        result = -DBL_MAX;      }            void assign(const double x)      {        result = x;      }            double getResult() const      {        return result;      }            bool isAssigned()      {        return result != -DBL_MAX;      }  };
/ i* h, U$ U" a% g通过在粒子类的“group”字段中指定组名,我们可以指示粒子所属的组(见上文)。
; A3 G- }6 L' I# q2 e1 y1 j, {2 j现在,让我们继续对粒子群算法本身进行编码。它将作为一个单独的类实现。让我们从粒子和群的数组开始。
& S; q4 f) J8 O! O! f4 p' U0 F class Swarm  {    private:      Particle *particles[];      Group *groups[];      int _size;             // number of particles      int _globals;          // number of groups      int _params;           // number of parameters to optimize
$ f1 l7 Z1 p- ]6 l; M6 p0 a对于每个参数,我们需要指定执行优化的值的范围,以及增量(步长)。
+ |) _6 r2 E) V     double highs[];      double lows[];      double steps[];
http://www.simu001.cn/x282946x1x1.html
最好的私募社区 | 第一私募论坛 | http://www.simu001.cn

精彩推荐

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Archiver| ( 桂ICP备12001440号-3 )|网站地图

GMT+8, 2025-2-2 21:38 , Processed in 3.698022 second(s), 31 queries .

Powered by www.simu001.cn X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表