期货量化交易软件:种群优化算法类电磁算法(EM - ElectroMagnetism)

文章介绍了类电磁(ЕМ)算法,一种元启发式搜索策略,它模拟电荷在电磁场中的行为以求解复杂优化问题。算法通过粒子间的吸引力和排斥力迭代寻找全局最优解,应用广泛于多个领域,包括机器学习和工程优化。
摘要由CSDN通过智能技术生成

赫兹量化

1. 概述

在过去的几十年间,世界各地的研究人员提出了许多元启发式搜索方法来解决复杂的全局优化问题,以及改进它们的方法。

类电磁(ЕМ)算法是一种相对较新的元启发式搜索算法,基于物理空间中电磁粒子行为的模拟,由 I. Birbil 和 S.С. Fang 于 2003 年首次引入。 它被描述为一种群体的进化算法,具有随机噪声和基于电磁的带电粒子之间相互作用。

该算法的灵感来自电磁学理论中电荷的吸引和排斥机制,用于在连续域中不受限制地求解非线性优化问题。 由于其能够解决复杂的全局优化问题,EM 在许多领域被广泛用作优化工具。

关于电磁学和电荷的有趣事实:

  • 有两种类型的电荷:正电荷和负电荷。 所有电荷即可为正值亦或为负值。
  • 电磁场可以无线电波的形式传输信息。 我们每天在收听广播或看电视时即利用的此功能。
  • 我们有地球磁场,它可以保护我们免受太阳风和宇宙射线的伤害。
  • 有各种各样的材料可以被磁化,这令制造电磁铁成为可能。 电磁铁可用于各种应用,例如发电机。
  • 有很多应用都基于电磁学。 例如,计算机、移动电话和其它设备均用到电磁技术。
  • 所有发光物体(例如灯泡和车灯)都会发出电磁辐射。
  • 电磁学在医学中也扮演着重要角色。 MRI 和 CT 等医疗设备均利用电磁场创建人体内部图像。
  • 一些动物,如鲨鱼和电鳗,可以利用电磁在水中导航。
  • 电磁力是自然界的四种基本力之一,另外还有万有引力、弱力和强力。

2. 算法

EM 以电磁学理论为指导,模拟电荷的吸引-排斥机制,利用有限变量实现全局最优解。 在算法中,所有解都被视为搜索空间中的带电粒子,每个粒子的电荷与目标函数的值相关联。 具有较佳目标输出的粒子将施加吸引力,而具有较差目标值的粒子将向其它粒子施加排斥力。 目标函数的值越好,粒子之间的吸引力或排斥力就越高。

该算法的原理是在初始阶段形成一组随机解,每个解由对应于电磁粒子上的电荷的坐标向量表示。 进而,在算法的每次迭代中,在电磁力的作用下模拟这些电荷在空间中的运动。 在运动时,每个电荷与其它电荷相互作用,导致运动方向和速度的变化。 结果,目标函数的最优值的解逐渐收敛。

EM 算法的主要组成部分是:

  1. 形成初始解(电荷)群,其中每个电荷由坐标向量表示,并对应于优化问题的某个解。
  2. 计算电荷之间相互作用的电磁力。 计算于算法的每次迭代中执行,并取决于电荷(解)之间的距离。
  3. 电荷在电磁相互作用力影响下在空间中的运动。
  4. 目标函数在每次迭代时更新公式解的群(例如,目标函数可以是机器学习问题中的损失函数)。
  5. 判定算法停止的条件,例如,达到目标函数的某个值。

粒子相互作用,根据电荷和它们之间的距离吸引或排斥。 该算法在若干次迭代中执行,每次迭代都会更新粒子的坐标和电荷,并计算适应度函数的新值。

EM 优化算法的逻辑单元是一个粒子。 它可以通过 S_Particle 结构来描述,它是搜索空间中的代理者。 每个粒子都有 c[] 坐标,它决定了其在搜索空间中的位置,以及 C 电荷,它影响与其它粒子的相互作用。 对于每个粒子,计算适应度函数 f 的值,该值评估对应于给定坐标的解的质量。 此外,对于每个粒子,计算到其它粒子的距离 R 和力矢量 F,其可判定粒子在搜索空间中的运动方向。

//——————————————————————————————————————————————————————————————————————————————
struct S_Particle
{
  double c  [];   //coordinates
  double C;       //charge
  double f;       //fitness
  double R  [];   //euclidean distance to other particles
  double F  [];   //force vector
};
//——————————————————————————————————————————————————————————————————————————————

C_AO_EM 类是电磁优化算法的实现。 它基于给出的一组实数上查找函数的最佳值。 该算法基于模拟物理系统中磁性和电粒子之间的相互作用过程。

该类包含以下字段:

  • S_Particle p[] - 表示优化问题潜在解的粒子数组。
  • double rangeMax[] — 每个坐标的最大搜索范围值数组。
  • double rangeMin[] — 每个坐标的最小搜索范围值数组。
  • double rangeStep[] - 每个坐标的搜索步骤数组。
  • double cB[] — 最佳解的坐标数组。
  • double fB - 最佳函数解的值。

该类包含以下方法:

  • void Init() 初始化算法,设置坐标数、粒子数、环境常数和移动步长。
  • void Moving(int iter) 根据磁场和电场相互作用的规则迭代运动粒子的算法。
  • void Revision() 对粒子进行修订,检查它们是否超出搜索范围,并在必要时调整它们的位置。

该类还包含私有字段:

  • int coordinatesNumber —坐标数。
  • int particlesNumber — 粒子数。
  • double envConstant — 环境常数。
  • double movConstant — 移动步长。
  • double exponent — 距离指数。
  • double vect[] — 向量数组。
  • bool revision — 指示粒子需要修订的标志。

该类包含私密方法:

  • double SeInDiSp(double In, double InMin, double InMax, double Step) 在均匀网格上分配点。
  • double RNDfromCI(double min, double max) 在给定范围内生成一个随机数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

赫兹量化软件

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

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

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

打赏作者

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

抵扣说明:

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

余额充值