文章 "种群优化算法:二进制遗传算法(BGA)。第 I 部分"

 

新文章 种群优化算法:二进制遗传算法(BGA)。第 I 部分已发布:

在本文中,我们将探讨二进制遗传和其它种群算法中所用的各种方法。我们将见识到算法的主要组成部分,例如选择、交叠和突变,以及它们对优化的影响。此外,我们还将研究数据表示方法,及其对优化结果的影响。

优化问题的参数通常称为 “特征”,必须以某种方式表示,才可在优化算法的逻辑中所用。在遗传学中,这些特征划分为表现型和基因型。表现型是正被优化的参数的外观,基因型是它在算法中的表示方式。在大多数优化算法中,表现型与基因型相同,并表示为实数。基因是优化参数,反过来,染色体是一组基因,即一组优化参数。

实数数据表示法常用来表示分数。实数可以有十进制部分和分数部分,用小数点分隔。例如,“3.14” 和 “0.5” 是实数。

数据的二进制表示,另一方面,使用二进制数字系统,其数字使用两个符号表示:“0” 和 “1”,每个数位称为比特位(二进制数位)。例如,数字 “5” 可以用二进制形式表示为 “101”。


数据的实数表示和二进制表示之间的主要区别在于数字的编码方式。实数通常使用 IEEE 754 等标准进行编码,IEEE 754 定义了浮点数的表示格式。在 MQL5 语言中,“double(双精度)” 数据类型用于实数。它可以在一个数字中描述总共 16 个有效数位。这意味着总数位量不能超过 16,例如,“9 999 999 999 999 999.0” 和 “9 999 999.999 999 99” 和 “0.999 999 999 999 9” 在小数点前后总共有 16 个 “9”。我稍后会解释为什么这很重要。

实数便于在编写程序和日常生活中所用,而二进制数则用于计算系统,以及执行低级运算,包括逻辑和按位运算。

作者:Andrey Dik

 
fxsaber #:
这刺伤了我。
谢谢你,改正了。
 
读一读。现在缺少的是一个显示优化算法一般表示方法的图表。
 
fxsaber #:
读一读。我们缺少的是一张显示优化算法一般表示方法的图表。

对于所有优化算法来说,无一例外,不仅是 GA,运算符(方法)的顺序总是相同的,与目录中的顺序一致:

1.选择。

2.交叉。

突变。

每个特定的算法都可能缺少一两个运算符,但顺序总是如此。这种顺序在逻辑上肯定是合理的,而且与概率有关,任何优化算法的目标都是将有利于解决问题的概率组合起来。

还有第四种方法,即把新个体放入种群的方法,但它通常不被视为一种独立的方法。

也许,画一张 "优化算法 "的结构图是有意义的,我会考虑的。

 
Andrey Dik #:

对于所有优化算法,不仅是 GA,运算符(方法)的顺序无一例外都是相同的

我不明白为什么有些算法在没有输入的情况下会移动,而有些算法在有输入的情况下会移动。
for (uint i = epochCount; (bool)i--;)
{
  AO.Moving() // 移动(i)

  for (uint set = ArraySize(AO.aName); (bool)set--;)
    AO.aName[set].f = FF(AO.aName[set].c);
                                                                     
  AO.Revision();
}
 
fxsaber #:
我不明白为什么有的 Moving 算法没有输入,而有的则有输入。

这是因为在算法的一个公式中需要考虑当前历元的数量。在其他算法中,历时计数器是其自身的内部计数器。