English Русский Español Deutsch 日本語 Português
基因演算规则:数学运算

基因演算规则:数学运算

MetaTrader 4测试者 | 8 四月 2008, 13:38
5 104 3
MetaQuotes
MetaQuotes

基因演算使用于智能交易的数据优化。 这些用途的范例是一个神经网络的学习,即, 这样的值得到的误差最小。基因演算是以随机搜索的方法为基础的。 随机搜索的主要问题在于我们不能够预测解决问题所需要的时间。为了避免浪费时间,他们运用生物创建的方法,即,方法在研究过程中的起源和革新。在革新过程中只有最适合的东西会留下来。结果是这种运算方法能够适应环境状态的调整。

这种基因演算最早是由美国密西根大学的 John H. Holland于1975发现的。该算法被命名为 Holland'的再生计划。这基本上是基因演算方法的全部类型。 我们需要近距离地研究这个计划,将讨论如何将基因演算规则使用到代码的重新编译上。

介绍对象

我们从生物学的特点得知,任何生物体都有自己的典型代表, 就是说,在真实世界上的每个物体都具有本身的基因性, 这个基因性包含该物体的全部信息。在每个典型代表上都会反映每个基因的信息。因此,要解决我们的问题,需要知道现存的物体的模式是否适合使用基因演算。基本演算机制的将来函数在典型代表的基础上,可以避开物体内在的信息,从而对于不同的任务广泛地使用演算。

比特字串符被广泛地使用于物体基因的基因演算中。 因为,每一个物体基因 都能够代表物体相应的特性。基因是一个固定长度的比特字串符表示这个特性值。

整数编码特性

最简单的代码方法是使用它的比特值。使用这种方法就可以很简单地执行。因为一个基因的中心长度足以表示特性的一些值。但是,这种方法也存在缺点。主要是由于周围的数字号码不同于几个比特值。比如, 7和 8在比特的显示上不同于4个仓位,这种情况就使基因演算很难继续运行。为了避免这个状况的发生,最好选择使用周围数字号码和代码差距较小的仓位,最理想的是相同值。在真实的基因演算中一些可用的 代码为 Gray 代码。这些可用 Gray 代码值在以下的表格中给出:


二进制代码 Gray代码
十进制代码 二进制代码 十六进制代码 十进制代码 二进制代码 十六进制代码
0 0000 0h 0 0000 0h
1 0001 1h 1 0001 1h
2 0010 2h 3 0011 3h
3 0011 3h 2 0010 2h
4 0100 4h 6 0110 6h
5 0101 5h 7 0111 7h
6 0110 6h 5 0101 5h
7 0111 7h 4 0100 4h
8 1000 8h 12 1100 Ch
9 1001 9h 13 1101 Dh
10 1010 Ah 15 1111 Fh
11 1011 Bh 14 1110 Eh
12 1100 Ch 10 1010 Ah
13 1101 Dh 11 1011 Bh
14 1110 Eh 9 1001 9h
15 1111 Fh 8 1000 8h

表格1. 相互协调的十进制编码和Gray编码.

所以,当代码为整数特性时,我们将其分成四元组并按照Gray代码规则传送每个四元组。

在真实的 基因演算过程中,通常不需要传送特性值到基因值中。 实际执行中要注意相应的基因值必须找到特性值。

因此,在整数特性基因值的解码问题上就显得很微不足道了。

浮点编码特性

最简单的代码方法是使用它的比特值。在浮点代码特性中使用这种方法的缺点与整数代码特性相同。所以我们要按照以下列出的次序执行:

  1. 特性允许值的整个间隔时间分为期待精确值部分。
  2. 基因值作为整数号码时间间隔使用 (使用Gray代码 )。
  3. 间隔时间的中间数字用作参量值。

我们现在通过范例来了解以上介绍的执行次序:

我们假设特性值得范围在[0,1]之内。该范围为代码被分裂成 256时间间隔。编码这些数字,我们需要8个比特。比如,基因值为 00100101bG (大写字母 G 表示Gray代码)。首先使用 Gray 代码,找到相应的间隔时间数字: 25hG->36h->54d。现在,我们来检测什么样的间隔时间与其相对应。通过简单的计算,我们得到的间隔时间为 [0,20703125, 0,2109375]。 即, 参量的值将为 (0,20703125+0,2109375)/2=0,208984375。

非数字数据编码

在编译这些非数字数据编码之前,我们必须把它转换成数字。在本网站上有相关的文章-使用神经网络描述。

如何由对象的基因确定它的典型代表

确定对象的典型代表 (对象的特性值),我们需要知道与这些特性相对应的基因值 (对象的基因类型)。基因的完整描述表现在物体基因类型的染色体。在一些实践中被称为标本。 因此,在基因演算的实践中,染色体代表的是一个固定长度比特字符串。字串符的间隔与基因相对应。在染色体内的基因长度可以相同也可以不同。 要经常性地使用相同长度的基因. 现在我们来看看染色体的范例和其值的解析。对象有5个特性,每一个特性编码基因元素的长度为4个。那么,染色体的长度为 5*4=20 比特:

00101010100101001101

我们现在可以确定特性值

特性 基因值 二进制值特性 小数值特性
特性 1 0010 0011 3
特性 2 1010 1100 12
特性 3 1001 1110 14
特性 4 0100 0111 7
特性 5 1101 1001 9

基因演算的基本运算符

众所周知,在演变的理论中原有特性对新生事物的遗传影响很重要。在基因演算中, 基因运算符的交叉 使用到改变染色体的程序中。这种运算操作存在以下几种方法:

  1. 选择两个普遍的单元作为母体;
  2. 确定转折点(随意);
  3. 确定子体作为第一和第二母体的联系部分。

我们来看看这些运算符函数

染色体_1: 0000000000
染色体_2: 1111111111

假设转折点放置在第三染色体后,那么:

染色体_1:0000000000>> 0001111111结果_ 染色体_1
染色体_2:1111111111>> 1110000000结果_ 染色体_2

那么结果染色体可能被确定为 0.5作为子体。

另外一个运算符是维持运算的变化。被称作变种运算符。这个运算符可以从它的初始状态再染色体中改变其值。相应地,每个比特在染色体中从中心位置倒序排列。

另外,还有一个运算符,被称为倒装运算符 使用在基因演算中。它将染色体分为两个部分并改变染色体的位置。简单地代表如下:

0001111111>> 1111111000

理论上,这两个基因运算符已经可以完成基因演算的操作。不过在实际操作中还需要添加一些运算符,并且对现有的两个运算符做适当的修改。例如, 在基因演算中不可能只有一个交叉点 (如上所述),但是同样可以有多个交叉点。这种情况下,需要创建几个转折点 (通常是两个)。另外,倒装运算符的执行必须是在染色体种选择比特之后随意地使用执行。

基因演算的流程图

现在,带着上面的知识我们来解释一下基因值。我们讨论基因演算的函数何在。近距离地观看基因运算的流程图和它的古典表示法。

  1. 初始化开始时间, t=0. 由k单元随意组成的初始化母体 。 B0 = {A1,A2,…,Ak)。
  2. 计算每个单元的合适性, FAi = fit(Ai), i=1…k, 然后进入母体, Ft = fit(Bt)。这个函数的值在一定程度上确定适用于描述的染色体,并能解决问题。
  3. 在母体中选择Ac单元。 Ac = Get(Bt)。
  4. 在母体的中心概率选择第二个单元 (Pc概率的交叉点), Аc1 = Get(Bt),并执行交叉运算符, Ac = Crossing(Ac,Ac1)。
  5. 执行变种运算符( Pm概率的变种), Ac = mutation(Ac)。
  6. 执行倒装运算符 ( Pi概率的倒装), Ac = inversion(Ac)。
  7. 获取新的染色体到新的母体中,插入(Bt+1,Ac)。
  8. 步骤 3 到 7 可以重复 k次。
  9. 增加当前时期的数字, t=t+1.
  10. 如果遇到停止,终端会停止作业。返回至步骤2。

一些运算的步骤还需要周密的计划和考虑。

步骤 3和4,选择染色体的母体步骤在函数的成功运算中扮演着最重要的角色。 对于这个步骤可能有多种多样的选择。最经常使用的方法被称作一般旋轮线 。 当使用这种方法时,这些或那些染色体的概率将会选择确定为它的合适性,即, PGet(Ai) ~ Fit(Ai)/Fit(Bt)。这种方法使用的结果可能会导致子体的单元生成概率的过量。另外一种经常使用的方法是淘汰赛。 它包括几个单元(通常2个)。在母体中随意地选择。最适合的单元将被使用。在一些运算的实施中,会使用名称为 菁英策略,说明保证进入母体的为最优秀的单元。 这种算法常常会加速基因演算的汇合。该策略的缺点是可能增加运算在最小地方点获取值。

确定运算停止的标准同样非常重要。演算函数的时期限定或演算汇合的确定(通常,当参量确定后,在几个时期内比较母体的适合性) 都需要使用一些尺度。

本文由MetaQuotes Ltd译自俄文
原文地址: https://www.mql5.com/ru/articles/1408

最近评论 | 前往讨论 (3)
[删除] | 28 10月 2011 在 09:52

太好了,基本没有看懂。

teamstock
teamstock | 18 12月 2012 在 05:48
kaishione:

太好了,基本没有看懂。


我借用电影逃学威龙上达叔的一句话:我全部都看明白了,就是不知道什么意思!
Gang Li
Gang Li | 15 8月 2017 在 06:37

呵呵!完全是一头雾水!完全是OUT了!

在 MetaTrader 4 中比较基因演算方法和简单搜索 在 MetaTrader 4 中比较基因演算方法和简单搜索
文章比较了使用基因演算方法和简单搜索获取的智能交易的时间和结果。
Strategy Tester:交易策略测试中模式化的方式 Strategy Tester:交易策略测试中模式化的方式
技术分析的很多程序允许在历史数据上测试交易策略。在大多数情况下, 测试被连接到已经完成的数据上,在价格柱内这些数据不带有任何试图模式化的趋势。测试会快速进行,但是不精确。
在 MQL4.Community上轻松简单地公布影音图像 在 MQL4.Community上轻松简单地公布影音图像
通常通过展示总是会比文字描述收益更多。我们在本文中提供一个简单的方法。通过使用CamStudio创建影音图像在上 MQL4.community 论坛公布。
巨大程序中定单的考虑 巨大程序中定单的考虑
探讨在巨大程序和复杂程序定单考虑的基本原则。