时间演化旅行算法(TETA)
内容
概述
我们研究过许多基于物理定律的算法,例如 CSS、EM、GSA、AEFA、AOSm,然而,宇宙持续以新的现象取悦我们,并令我们充满各种假想和思路。宇宙的基本组成部分之一,譬如时间,给了我创建一种新优化算法的思路。时间不仅激发新的发现,而且仍然是一个难以理解的神秘实体。它像河流一样流淌,带走我们生命中的瞬间,只留下回忆。时间旅行一直是人类着迷和幻想的话题。为了更好地理解算法思路,我们想象一位科学家的故事。
从前,生活着一位物理学家,他痴迷于走向光明的未来,远离他所犯的错误。在深入研究时间流后,他面临着一个痛苦的发现:穿越到未来是不可能的。他没有被吓倒,转而研究返回过去旅行的能力,希望能够改正自己的错误,但就此他也很失望。
然而,他对于时间流假设的研究令他得出了一个惊人的发现:平行宇宙的存在。为了在世界之间移动,开发了一个理论机器模型之后,他发现了一些惊人的事情:虽然直接时间旅行是不可能的,但有可能选择一系列事件,来导致一个或另一个平行宇宙。
任何人的每一个行为都会催生一个新的平行现实,但这位科学家只对那些直接影响他生活的宇宙感兴趣。为了在它们之间导航,他在方程组中建立了特殊的锚点(在世界之间加以区分)— 他的命运关键点:家庭、事业、科学发现、友谊和重大事件。在他的机器中这些锚点成为变量,令他能够在概率世界之间选择最优路径。
推出了他的发明之后,他开始了周游平行世界的旅程,但不再寻求获得现成的光明未来。他意识到了更重要的事情:他亲手创造这个未来的能力,在当下制定决策。每一个新的选择都铺平了通往现实版本的道路,即他自己向往的生活。因此,他不再是理想未来梦想的囚徒,而是成为建筑师。他的机器不再成为逃避现实的手段,而是在每时每刻遍历选择最优解,有意识地创造自己命运的工具。
在本文中,我们将研讨时间演化旅行算法(TETA),它实现了时间旅行的概念,其特点是它没有参数、或可更改的变量。该算法在寻找最佳解并细化解之间维持自然平衡。典型情况下,没有外部参数的算法仍会拥有影响其性能的常量形式的内部参数。然而,TETA 也没有这样的常数,这令其在同类产品中独一无二。
算法的实现
在所讲述的故事中,一位科学家在生活中通过改变关键变量,发现了一种在平行宇宙之间旅行的途径。这个比喻构成了所提出的优化算法的基础。为了令这一点更清清晰,参考下面的图例,其概括了每次做出决策时,都会出现的平行宇宙的算法思路。每个拥有完整空间的宇宙都是按锚点形式的特征表述来定义的:家庭、事业、成就、等等。
通过组合这些锚点的属性,就能创建一个代表优化问题之解的新宇宙,其中锚点是被优化的参数。

图例 1. 具有自己独特锚点(特征)的平行宇宙
TETA 算法基于多个平行宇宙的概念,每个平行宇宙都代表优化问题的潜在解。在其技术具现中,每个这样的宇宙都由坐标向量(a[i].c)描述,其中每个坐标都是一个锚点 — 判定所给现实配置的一个关键变量。这些锚点可被认为是最重要的参数,其设置会影响整体的解品质。
为了评估每个宇宙的品质,用到了适应度函数(a[i].f),它判定所给现实中的“存在舒适度”。该函数的数值越高,认为宇宙就越有利。每个宇宙不仅存储有关其当前状态的信息,还存储有关最知名配置(a[i].cB)的信息,这可与最成功场景的“记忆”进行比较。此外,该算法还维护全局最佳状态(cB),其代表所有发现的选项中最有利的配置。
N 个个体组成的种群形成一组平行宇宙,每个平行宇宙都由自己的一组锚点值来描述。这些宇宙不断根据适应度函数的值进行排位,这就创造了一种从最不利状态到最有利状态的层次结构。现实的每个锚点都是一个可优化的变量,这些变量的任何变化都会产生新的宇宙配置。完整的锚点集合形成一个变量 x = (x₁, x₂, ..., xₙ) 的向量,它完整描述了一个特定的现实。甚至,对于每个变量,定义了可接受数值的边界,这可解释为每个宇宙的物理定律,限制可能的变化。
每个宇宙的有利度评估是通过适应度函数 f(x) 进行的,该函数将宇宙的配置映射为实数。该值越高,认为给定现实越可取。以这种方式,创建了一个数学上严格的机制,用于评估和比较多个平行宇宙中各种可能的发展。
该算法的关键特征是单一概率比(rnd *= rnd),它既决定了选择宇宙进行交互的概率,也决定了锚点变化的强度。这为系统创造了一种自然的自我平衡机制:最好的宇宙被选中的机会更高,但它们的锚点变化较小(与 rnd 成正比),而最差的宇宙虽然选择频率较低,但变化更强烈(与 1.0 - rnd 成正比)。
这种方法反映出深邃的哲学思想,即不可能同时在所有事情上都达成完美。改进是经由各层面的不断平衡而发生的:有时最好的锚点或许会为了整体平衡而略有恶化,而最差的锚点则努力改进。变化的强度与宇宙的“良好”程度成正比,反映了现实生活,当有些事情走岔时,更有可能发生戏剧性的变化。
如是结果,该算法不是简单地优化数值,而是模拟在复杂的多维生活环境系统中寻找平衡的过程,经由对其各层面的微妙平衡,努力寻找并非理想,而是最和谐的现实版本。

图例 2. 红线是根据品质选择宇宙的概率函数,绿线是相应宇宙的锚点变化程度
算法伪码:
1. 创建 N 个平行宇宙的种群
2. 对于每个宇宙:
- 在可接受范围内随机初始化锚点(坐标)值
- 设置初始最佳值等于当前值
主循环:
1. 按品质(适应度函数)对宇宙进行排序
- 最好的宇宙获得较低的索引
- 最差的宇宙获得较高的索引
2. 对于 N 个宇宙的第 i 个:
对于每个锚点(坐标):
a) 选择一个用于交互的宇宙:
- 生成一个从 0 到 1 的随机数 rnd
- 平方 rnd,提升最佳宇宙的优先级
- 选择与 rnd 成正比的 'pair' 索引
b) 如果当前宇宙与所选不匹配(i ≠ pair):
如果当前宇宙优于所选(i < pair): - 锚点的轻微变化与 rnd 成正比
- 新数值 = 当前值 + rnd * (所选数值 - 当前值)
否则(当前宇宙比所选要差):
如果(随机数字 > rnd):
- 锚点的强烈变化与(1 - rnd)成正比
- 新数值 = 当前值 + (1-rnd) * (所选数值 - 当前值)
否则:
- 从最佳宇宙完整复制锚点数值
- 新数值 = 所选数值
c) 否则(与自己互动):
- 按高斯分布局部搜索
- x新数值 = 高斯分布(当前值)
d) 在可接受的限定内调整新锚点数值
3. 更新最佳值:
对于每个宇宙:
- 如果当前解优于个体最佳,则更新个体最佳
- 如果当前解优于全局最佳,则更新全局最佳
4. 重复主循环,直到满足停止准则
现在我们已准备好在代码中实现平行宇宙旅行机器的一切。我们来编写 C_AO_TETA 类,它将派生自 C_AO 类。以下是简要说明:
- 构造函数 — 初始化名称、描述、以及链接到算法,并设置种群规模
- SetParams 参数 — 取来自 “params” 数组中的值设置参数。
- Init、Moving 和 Revision 方法均已声明,但将在另一段代码中实现。
class C_AO_TETA : public C_AO { public: //-------------------------------------------------------------------- ~C_AO_TETA () { } C_AO_TETA () { ao_name = "TETA"; ao_desc = "Time Evolution Travel Algorithm"; ao_link = "https://www.mql5.com/en/articles/16963"; popSize = 50; // number of parallel universes in the population ArrayResize (params, 1); params [0].name = "popSize"; params [0].val = popSize; } void SetParams () { popSize = (int)params [0].val; } bool Init (const double &rangeMinP [], // minimum values for anchors const double &rangeMaxP [], // maximum values for anchors const double &rangeStepP [], // anchor change step const int epochsP = 0); // number of search epochs void Moving (); void Revision (); private: //------------------------------------------------------------------- }; //——————————————————————————————————————————————————————————————————————————————
C_AO_TETA 类的 Init 初始化方法执行算法的初始设置。
方法参数:- rangeMinP — 锚点的最小值数组。
- rangeMaxP — 锚点的最大值数组。
- rangeStepP — 锚点变化步骤数组。
- epochsP — 搜索局次数量(默认为 0)。
- 该方法调用 StandardInit,执行锚点的检查、并设置范围。如果初始化失败,则返回 'false'。
- 如果所有检查和设置都成功,则该方法返回 “true”,示意算法初始化成功。
//—————————————————————————————————————————————————————————————————————————————— // TETA - Time Evolution Travel Algorithm // An optimization algorithm based on the concept of moving between parallel universes // through changing the key anchors (events) of life //—————————————————————————————————————————————————————————————————————————————— bool C_AO_TETA::Init (const double &rangeMinP [], // minimum values for anchors const double &rangeMaxP [], // maximum values for anchors const double &rangeStepP [], // anchor change step const int epochsP = 0) // number of search epochs { if (!StandardInit (rangeMinP, rangeMaxP, rangeStepP)) return false; //---------------------------------------------------------------------------- return true; } //——————————————————————————————————————————————————————————————————————————————
C_AO_TETA 类的 Moving 方法负责更改平行宇宙中的锚点,以便在算法中创建新锚点。
检查修订状态:- 如果 “revision” 为 'false',则该方法取来自给定范围内的随机值,初始化所有平行宇宙的初始锚点值,并应用函数将它们设置为有效值(基于步骤)。
- 如果已经运作了修订,则发生一个跨所有平行宇宙的迭代。对于每个锚点,都会生成一个概率,并计算其新值:
- 如果当前的宇宙更有利,那么锚点就朝着积极方向稍微调整一下,从而找到更好的平衡点。
- 如果当前宇宙不太有利,概率测试或许会导致锚点发生重大变化、或彻底采用更有利宇宙的锚点。
- 如果宇宙冲突,则使用高斯分布进行局部锚点调整。
- 计算新数值之后,锚点会带至可接受的范围。
该方法在实践中负责适配和改进解值(平行宇宙),这是优化算法的关键部分。
//—————————————————————————————————————————————————————————————————————————————— void C_AO_TETA::Moving () { //---------------------------------------------------------------------------- if (!revision) { // Initialize the initial values of anchors in all parallel universes for (int i = 0; i < popSize; i++) { for (int c = 0; c < coords; c++) { a [i].c [c] = u.RNDfromCI (rangeMin [c], rangeMax [c]); a [i].c [c] = u.SeInDiSp (a [i].c [c], rangeMin [c], rangeMax [c], rangeStep [c]); } } revision = true; return; } //---------------------------------------------------------------------------- double rnd = 0.0; double val = 0.0; int pair = 0.0; for (int i = 0; i < popSize; i++) { for (int c = 0; c < coords; c++) { // Generate a probability that determines the chance of choosing a universe, // as well as the anchor change force rnd = u.RNDprobab (); rnd *= rnd; // Selecting a universe for sharing experience pair = (int)u.Scale (rnd, 0.0, 1.0, 0, popSize - 1); if (i != pair) { if (i < pair) { // If the current universe is more favorable: // Slightly change the anchor (proportional to rnd) to find a better balance val = a [i].c [c] + (rnd)*(a [pair].cB [c] - a [i].cB [c]); } else { if (u.RNDprobab () > rnd) { // If the current universe is less favorable: // Significant change of anchor (proportional to 1.0 - rnd) val = a [i].cB [c] + (1.0 - rnd) * (a [pair].cB [c] - a [i].cB [c]); } else { // Full acceptance of the anchor configuration from a more successful universe val = a [pair].cB [c]; } } } else { // Local anchor adjustment via Gaussian distribution val = u.GaussDistribution (cB [c], rangeMin [c], rangeMax [c], 1); } a [i].c [c] = u.SeInDiSp (val, rangeMin [c], rangeMax [c], rangeStep [c]); } } } //——————————————————————————————————————————————————————————————————————————————
C_AO_TETA 类的 Revision 方法负责更新平行宇宙中的锚点配置,并按品质对这些宇宙进行排序。更多详情:
- 该方法遍历所有平行宇宙(从 0 到 popSize)。
- 如果当前宇宙的 f 函数(a[i].f)的值大于 fB 全局最佳值,则:
- fB 按(a[i].f)的数值更新。
- 当前宇宙锚点配置将复制到 cB 局配置。
- 如果当前宇宙的 f 函数值大于其已知最佳值(a[i].fB),则:
- (a[i].fB)的值更新为(a[i].f)。
- 当前宇宙的锚点配置被复制到其最知名的配置(a[i].cB)。
- aT 静态数组被声明为存储个体。
- 数组大小更改为 popSize。
- 使用 u.Sorting_fB 函数按其最知名独体属性对宇宙进行排序。
//—————————————————————————————————————————————————————————————————————————————— void C_AO_TETA::Revision () { for (int i = 0; i < popSize; i++) { // Update globally best anchor configuration if (a [i].f > fB) { fB = a [i].f; ArrayCopy (cB, a [i].c); } // Update the best known anchor configuration for each universe if (a [i].f > a [i].fB) { a [i].fB = a [i].f; ArrayCopy (a [i].cB, a [i].c); } } // Sort universes by their degree of favorability static S_AO_Agent aT []; ArrayResize (aT, popSize); u.Sorting_fB (a, aT, popSize); } //——————————————————————————————————————————————————————————————————————————————
测试结果
TETA results:
TETA|Time Evolution Travel Algorithm|50.0|
=============================
5 Hilly's; Func runs: 10000; result: 0.9136198796338938
25 Hilly's; Func runs: 10000; result: 0.8234856192574587
500 Hilly's; Func runs: 10000; result: 0.3199003852163246
=============================
5 Forest's; Func runs: 10000; result: 0.970957820488216
25 Forest's; Func runs: 10000; result: 0.8953189778250419
500 Forest's; Func runs: 10000; result: 0.29324457646900925
=============================
5 Megacity's; Func runs: 10000; result: 0.7346153846153844
25 Megacity's; Func runs: 10000; result: 0.6856923076923078
500 Megacity's; Func runs: 10000; result: 0.16020769230769372
=============================
All score: 5.79704 (64.41%)
最终结果:5.79704(64.41%)。考虑到测试函数的复杂性,这是一个优异的结果。该算法极快速地检测到最具前景最优解的表面重要区域,并立即开始细化它们,这能够在算法每次运算的可视化中看到。

Hilly 测试函数上的 TETA

Forest 测试函数上的 TETA

Megacity 测试函数上的 TETA
值得注意的是,该算法在所有优化算法中达成了最佳结果,取代了种群算法组的领导者,在优化算法测试函数样本集中包含的 GoldsteinPrice 函数上,经受测试。

在 Goldstein 测试函数(可从测试函数列表中选择)上的 TETA
GoldsteinPrice 的结果:
5 GoldsteinPrice's; Func runs: 10000; result: 0.9999786723616957
25 GoldsteinPrice's; Func runs: 10000; result: 0.9999750431600845
500 GoldsteinPrice's; Func runs: 10000; result: 0.9992343490683104
测试完成后,TETA 算法跻身十大最佳优化算法之列,并获得了可敬的第 6 名。
| # | AO | 描述 | Hilly | Hilly 最终 | Forest | Forest 最终 | Megacity (离散) | Megacity 最终 | 最终结果 | % 最大 | ||||||
| 10 p (5 F) | 50 p (25 F) | 1000 p (500 F) | 10 p (5 F) | 50 p (25 F) | 1000 p (500 F) | 10 p (5 F) | 50 p (25 F) | 1000 p (500 F) | ||||||||
| 1 | ANS | 跨邻里搜索 | 0.94948 | 0.84776 | 0.43857 | 2.23581 | 1.00000 | 0.92334 | 0.39988 | 2.32323 | 0.70923 | 0.63477 | 0.23091 | 1.57491 | 6.134 | 68.15 |
| 2 | CLA | 代码锁定算法(JOO) | 0.95345 | 0.87107 | 0.37590 | 2.20042 | 0.98942 | 0.91709 | 0.31642 | 2.22294 | 0.79692 | 0.69385 | 0.19303 | 1.68380 | 6.107 | 67.86 |
| 3 | AMOm | 动物迁徙优化 M | 0.90358 | 0.84317 | 0.46284 | 2.20959 | 0.99001 | 0.92436 | 0.46598 | 2.38034 | 0.56769 | 0.59132 | 0.23773 | 1.39675 | 5.987 | 66.52 |
| 4 | (P+O)ES | (P+O)进化策略 | 0.92256 | 0.88101 | 0.40021 | 2.20379 | 0.97750 | 0.87490 | 0.31945 | 2.17185 | 0.67385 | 0.62985 | 0.18634 | 1.49003 | 5.866 | 65.17 |
| 5 | CTA | 彗尾算法(JOO) | 0.95346 | 0.86319 | 0.27770 | 2.09435 | 0.99794 | 0.85740 | 0.33949 | 2.19484 | 0.88769 | 0.56431 | 0.10512 | 1.55712 | 5.846 | 64.96 |
| 6 | TETA | 时间演化旅行算法(JOO) | 0.91362 | 0.82349 | 0.31990 | 2.05701 | 0.97096 | 0.89532 | 0.29324 | 2.15952 | 0.73462 | 0.68569 | 0.16021 | 1.58052 | 5.797 | 64.41 |
| 7 | SDSm | 随机扩散搜索 M | 0.93066 | 0.85445 | 0.39476 | 2.17988 | 0.99983 | 0.89244 | 0.19619 | 2.08846 | 0.72333 | 0.61100 | 0.10670 | 1.44103 | 5.709 | 63.44 |
| 8 | AAm | 射箭算法 M | 0.91744 | 0.70876 | 0.42160 | 2.04780 | 0.92527 | 0.75802 | 0.35328 | 2.03657 | 0.67385 | 0.55200 | 0.23738 | 1.46323 | 5.548 | 61.64 |
| 9 | ESG | 社会群体进化(JOO) | 0.99906 | 0.79654 | 0.35056 | 2.14616 | 1.00000 | 0.82863 | 0.13102 | 1.95965 | 0.82333 | 0.55300 | 0.04725 | 1.42358 | 5.529 | 61.44 |
| 10 | SIA | 模拟各向同性退火(JOO) | 0.95784 | 0.84264 | 0.41465 | 2.21513 | 0.98239 | 0.79586 | 0.20507 | 1.98332 | 0.68667 | 0.49300 | 0.09053 | 1.27020 | 5.469 | 60.76 |
| 11 | ACS | 人工协同搜索 | 0.75547 | 0.74744 | 0.30407 | 1.80698 | 1.00000 | 0.88861 | 0.22413 | 2.11274 | 0.69077 | 0.48185 | 0.13322 | 1.30583 | 5.226 | 58.06 |
| 12 | BHAm | 黑洞算法 M | 0.75236 | 0.76675 | 0.34583 | 1.86493 | 0.93593 | 0.80152 | 0.27177 | 2.00923 | 0.65077 | 0.51646 | 0.15472 | 1.32195 | 5.196 | 57.73 |
| 13 | ASO | 无政府状态社会优化 | 0.84872 | 0.74646 | 0.31465 | 1.90983 | 0.96148 | 0.79150 | 0.23803 | 1.99101 | 0.57077 | 0.54062 | 0.16614 | 1.27752 | 5.178 | 57.54 |
| 14 | AOSm | 原子轨道搜索 M | 0.80232 | 0.70449 | 0.31021 | 1.81702 | 0.85660 | 0.69451 | 0.21996 | 1.77107 | 0.74615 | 0.52862 | 0.14358 | 1.41835 | 5.006 | 55.63 |
| 15 | TSEA | 龟壳进化算法(JOO) | 0.96798 | 0.64480 | 0.29672 | 1.90949 | 0.99449 | 0.61981 | 0.22708 | 1.84139 | 0.69077 | 0.42646 | 0.13598 | 1.25322 | 5.004 | 55.60 |
| 16 | DE | 差异进化 | 0.95044 | 0.61674 | 0.30308 | 1.87026 | 0.95317 | 0.78896 | 0.16652 | 1.90865 | 0.78667 | 0.36033 | 0.02953 | 1.17653 | 4.955 | 55.06 |
| 17 | CRO | 化学反应优化 | 0.94629 | 0.66112 | 0.29853 | 1.90593 | 0.87906 | 0.58422 | 0.21146 | 1.67473 | 0.75846 | 0.42646 | 0.12686 | 1.31178 | 4.892 | 54.36 |
| 18 | BSA | 鸟群算法 | 0.89306 | 0.64900 | 0.26250 | 1.80455 | 0.92420 | 0.71121 | 0.24939 | 1.88479 | 0.69385 | 0.32615 | 0.10012 | 1.12012 | 4.809 | 53.44 |
| 19 | HS | 谐波搜索 | 0.86509 | 0.68782 | 0.32527 | 1.87818 | 0.99999 | 0.68002 | 0.09590 | 1.77592 | 0.62000 | 0.42267 | 0.05458 | 1.09725 | 4.751 | 52.79 |
| 20 | SSG | 苗木播种和生长 | 0.77839 | 0.64925 | 0.39543 | 1.82308 | 0.85973 | 0.62467 | 0.17429 | 1.65869 | 0.64667 | 0.44133 | 0.10598 | 1.19398 | 4.676 | 51.95 |
| 21 | BCOm | 细菌趋化性优化 M | 0.75953 | 0.62268 | 0.31483 | 1.69704 | 0.89378 | 0.61339 | 0.22542 | 1.73259 | 0.65385 | 0.42092 | 0.14435 | 1.21912 | 4.649 | 51.65 |
| 22 | ABO | 非洲水牛优化 | 0.83337 | 0.62247 | 0.29964 | 1.75548 | 0.92170 | 0.58618 | 0.19723 | 1.70511 | 0.61000 | 0.43154 | 0.13225 | 1.17378 | 4.634 | 51.49 |
| 23 | (PO)ES | (PO)进化策略 | 0.79025 | 0.62647 | 0.42935 | 1.84606 | 0.87616 | 0.60943 | 0.19591 | 1.68151 | 0.59000 | 0.37933 | 0.11322 | 1.08255 | 4.610 | 51.22 |
| 24 | TSm | 禁忌搜索 M | 0.87795 | 0.61431 | 0.29104 | 1.78330 | 0.92885 | 0.51844 | 0.19054 | 1.63783 | 0.61077 | 0.38215 | 0.12157 | 1.11449 | 4.536 | 50.40 |
| 25 | BSO | 头脑风暴优化 | 0.93736 | 0.57616 | 0.29688 | 1.81041 | 0.93131 | 0.55866 | 0.23537 | 1.72534 | 0.55231 | 0.29077 | 0.11914 | 0.96222 | 4.498 | 49.98 |
| 26 | WOAm | 韦尔优化算法 M | 0.84521 | 0.56298 | 0.26263 | 1.67081 | 0.93100 | 0.52278 | 0.16365 | 1.61743 | 0.66308 | 0.41138 | 0.11357 | 1.18803 | 4.476 | 49.74 |
| 27 | AEFA | 人工电场算法 | 0.87700 | 0.61753 | 0.25235 | 1.74688 | 0.92729 | 0.72698 | 0.18064 | 1.83490 | 0.66615 | 0.11631 | 0.09508 | 0.87754 | 4.459 | 49.55 |
| 28 | AEO | 基于人工生态系统的优化算法 | 0.91380 | 0.46713 | 0.26470 | 1.64563 | 0.90223 | 0.43705 | 0.21400 | 1.55327 | 0.66154 | 0.30800 | 0.28563 | 1.25517 | 4.454 | 49.49 |
| 29 | ACOm | 蚁群优化 M | 0.88190 | 0.66127 | 0.30377 | 1.84693 | 0.85873 | 0.58680 | 0.15051 | 1.59604 | 0.59667 | 0.37333 | 0.02472 | 0.99472 | 4.438 | 49.31 |
| 30 | BFO-GA | 细菌觅食优化 - GA | 0.89150 | 0.55111 | 0.31529 | 1.75790 | 0.96982 | 0.39612 | 0.06305 | 1.42899 | 0.72667 | 0.27500 | 0.03525 | 1.03692 | 4.224 | 46.93 |
| 31 | SOA | 简单优化算法 | 0.91520 | 0.46976 | 0.27089 | 1.65585 | 0.89675 | 0.37401 | 0.16984 | 1.44060 | 0.69538 | 0.28031 | 0.10852 | 1.08422 | 4.181 | 46.45 |
| 32 | ABHA | 人工蜂巢算法 | 0.84131 | 0.54227 | 0.26304 | 1.64663 | 0.87858 | 0.47779 | 0.17181 | 1.52818 | 0.50923 | 0.33877 | 0.10397 | 0.95197 | 4.127 | 45.85 |
| 33 | ACMO | 大气云层模型优化 | 0.90321 | 0.48546 | 0.30403 | 1.69270 | 0.80268 | 0.37857 | 0.19178 | 1.37303 | 0.62308 | 0.24400 | 0.10795 | 0.97503 | 4.041 | 44.90 |
| 34 | ADAMm | 自适应动量评估 M | 0.88635 | 0.44766 | 0.26613 | 1.60014 | 0.84497 | 0.38493 | 0.16889 | 1.39880 | 0.66154 | 0.27046 | 0.10594 | 1.03794 | 4.037 | 44.85 |
| 35 | ATAm | 人工部落算法 M | 0.71771 | 0.55304 | 0.25235 | 1.52310 | 0.82491 | 0.55904 | 0.20473 | 1.58867 | 0.44000 | 0.18615 | 0.09411 | 0.72026 | 3.832 | 42.58 |
| 36 | ASHA | 人工降雨算法 | 0.89686 | 0.40433 | 0.25617 | 1.55737 | 0.80360 | 0.35526 | 0.19160 | 1.35046 | 0.47692 | 0.18123 | 0.09774 | 0.75589 | 3.664 | 40.71 |
| 37 | ASBO | 自适应社会行为优化 | 0.76331 | 0.49253 | 0.32619 | 1.58202 | 0.79546 | 0.40035 | 0.26097 | 1.45677 | 0.26462 | 0.17169 | 0.18200 | 0.61831 | 3.657 | 40.63 |
| 38 | MEC | 心智进化计算 | 0.69533 | 0.53376 | 0.32661 | 1.55569 | 0.72464 | 0.33036 | 0.07198 | 1.12698 | 0.52500 | 0.22000 | 0.04198 | 0.78698 | 3.470 | 38.55 |
| 39 | IWO | 入侵杂草优化 | 0.72679 | 0.52256 | 0.33123 | 1.58058 | 0.70756 | 0.33955 | 0.07484 | 1.12196 | 0.42333 | 0.23067 | 0.04617 | 0.70017 | 3.403 | 37.81 |
| 40 | Micro-AIS | 微型人工免疫系统 | 0.79547 | 0.51922 | 0.30861 | 1.62330 | 0.72956 | 0.36879 | 0.09398 | 1.19233 | 0.37667 | 0.15867 | 0.02802 | 0.56335 | 3.379 | 37.54 |
| 41 | COAm | 布谷鸟优化算法 M | 0.75820 | 0.48652 | 0.31369 | 1.55841 | 0.74054 | 0.28051 | 0.05599 | 1.07704 | 0.50500 | 0.17467 | 0.03380 | 0.71347 | 3.349 | 37.21 |
| 42 | SDOm | 螺旋动力学优化 M | 0.74601 | 0.44623 | 0.29687 | 1.48912 | 0.70204 | 0.34678 | 0.10944 | 1.15826 | 0.42833 | 0.16767 | 0.03663 | 0.63263 | 3.280 | 36.44 |
| 43 | NMm | Nelder-Mead 方法 M | 0.73807 | 0.50598 | 0.31342 | 1.55747 | 0.63674 | 0.28302 | 0.08221 | 1.00197 | 0.44667 | 0.18667 | 0.04028 | 0.67362 | 3.233 | 35.92 |
| 44 | BBBC | 大爆炸-大紧缩算法 | 0.60531 | 0.45250 | 0.31255 | 1.37036 | 0.52323 | 0.35426 | 0.20417 | 1.08166 | 0.39769 | 0.19431 | 0.11286 | 0.70486 | 3.157 | 35.08 |
| 45 | CPA | 循环孤雌生殖算法 | 0.71664 | 0.40014 | 0.25502 | 1.37180 | 0.62178 | 0.33651 | 0.19264 | 1.15093 | 0.34308 | 0.16769 | 0.09455 | 0.60532 | 3.128 | 34.76 |
| RW | 随机游走 | 0.48754 | 0.32159 | 0.25781 | 1.06694 | 0.37554 | 0.21944 | 0.15877 | 0.75375 | 0.27969 | 0.14917 | 0.09847 | 0.52734 | 2.348 | 26.09 | |
汇总
在研究 TETA 算法时,我始终在努力创造简单而高效的东西。平行宇宙和时间旅行的隐喻最初似乎是一个简单、巧妙的想法,但在开发过程中,它有机地演变成一种有效的优化机制。
该算法的关键特点是不可能在所有事情上都一次性达到完美 — 您需要找到一个平衡点。在生活中,我们不断地在家庭、事业和个人成就之间取得平衡,而我经由锚点系统的这个概念,奠定了算法的基础。每个锚点都代表一个需要优化的重要层面,但不能以牺牲其它为代价。
最有趣的技术解决方案,是在选择宇宙的概率、及其影响其它宇宙强度之间的连结。这创造了一种自然机制,其中最佳解被选中的机会更高,并且它们的影响取决于它们的品质。该方式在探索新的可能性、与利用已找到的优良解之间提供了平衡。
测试该算法亦有出乎意料的优异结果。这令该算法对于计算资源有限的实际问题特别宝贵。甚至,该算法在不同类型的函数上始终表现出优异的结果,展示其全能型。特别令人愉快的是实现的紧凑性。只有大约 50 行关键代码,没有可自定义的参数,但却如此有效。这是一个真正成功的解决方案,将实现结合了简单性与高性能。
终极,TETA 超出了我最初的预期。时间旅行的比喻催生了一种实用而有效的优化工具,可以应用于广泛的领域。这表明有时基于清晰的自然类比的简单解决方案也能非常有效。该算法是一口气创建的 — 从概念到实现 — 我非常满意在该算法上所做的工作,它可成为研究人员和从业者快速找到最优解决方案的好助手。

图例 3. 算法颜色渐变是根据相应测试

图例 4. 算法测试结果直方图(从 0 到100,越高越好,其中 100 是最大可能的理论结果,存档中有一个用于计算评级表的脚本)
TETA 的优点和缺点:
优点:
- 唯一的外部参数是种群规模。
- 实现简单。
- 非常快速的 EA。
- 小维度和大维度问题两者均为平衡量级。
缺点:
- 低维离散问题的结果散射。
本文附有一个存档,其中包含当前版本的算法代码。文章作者不对规范算法描述的绝对准确性负责。其中许多都进行了修改,以提高搜索能力。文章中提出的结论和判断是基于实验结果。
文章中用到的程序
| # | 名字 | 类型 | 描述 |
|---|---|---|---|
| 1 | #C_AO.mqh | 包含 | 种群优化算法的父类 |
| 2 | #C_AO_enum.mqh | 包含 | 种群优化算法的枚举 |
| 3 | TestFunctions.mqh | 包含 | 测试函数库 |
| 4 | TestStandFunctions.mqh | 包含 | 测试台函数库 |
| 5 | Utilities.mqh | 包含 | 辅助函数库 |
| 6 | CalculationTestResults.mqh | 包含 | 计算比较表中结果的脚本 |
| 7 | Testing AOs.mq5 | 脚本 | 所有种群优化算法的统一测试台 |
| 8 | Simple use of population optimization algorithms.mq5 | 脚本 | 无可视化的种群优化算法的简单示例 |
| 9 | Test_AO_TETA.mq5 | 脚本 | TETA 测试台 |
本文由MetaQuotes Ltd译自俄文
原文地址: https://www.mql5.com/ru/articles/16963
注意: MetaQuotes Ltd.将保留所有关于这些材料的权利。全部或部分复制或者转载这些材料将被禁止。
本文由网站的一位用户撰写,反映了他们的个人观点。MetaQuotes Ltd 不对所提供信息的准确性负责,也不对因使用所述解决方案、策略或建议而产生的任何后果负责。
开发多币种 EA 交易(第 21 部分):准备重要实验并优化代码
价格行为分析工具包开发(第十八部分):四分位理论(3)——四分位看板
MQL5交易策略自动化(第十二部分):实现缓解型订单块(MOB)策略
MQL5自动化交易策略(第十一部分):开发多层级网格交易系统