| / | 知识园地 |
知识园地
测试
基因演算规则:数学运算
想要通过新文章,请 登陆 或 注册
|
基因演算规则:数学运算 [ en | ru ]基因演算使用于智能交易的数据优化。 这些用途的范例是一个神经网络的学习,即, 这样的值得到的误差最小。基因演算是以随机搜索的方法为基础的。 随机搜索的主要问题在于我们不能够预测解决问题所需要的时间。为了避免浪费时间,他们运用生物创建的方法,即,方法在研究过程中的起源和革新。在革新过程中只有最适合的东西会留下来。结果是这种运算方法能够适应环境状态的调整。 这种基因演算最早是由美国密西根大学的 John H. Holland于1975发现的。该算法被命名为 Holland'的再生计划。这基本上是基因演算方法的全部类型。 我们需要近距离地研究这个计划,将讨论如何将基因演算规则使用到代码的重新编译上。 介绍对象
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 二进制代码 | 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 |
所以,当代码为整数特性时,我们将其分成四元组并按照Gray代码规则传送每个四元组。
在真实的 基因演算过程中,通常不需要传送特性值到基因值中。 实际执行中要注意相应的基因值必须找到特性值。
因此,在整数特性基因值的解码问题上就显得很微不足道了。
最简单的代码方法是使用它的比特值。在浮点代码特性中使用这种方法的缺点与整数代码特性相同。所以我们要按照以下列出的次序执行:
我们现在通过范例来了解以上介绍的执行次序:
我们假设特性值得范围在[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 比特:
| 0010 | 1010 | 1001 | 0100 | 1101 |
我们现在可以确定特性值
| 特性 | 基因值 | 二进制值特性 | 小数值特性 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 特性 1 | 0010 | 0011 | 3 | ||||||||
| 特性 2 | 1010 | 1100 | 12 | ||||||||
| 特性 3 | 1001 | 1110 | 14 | ||||||||
| 特性 4 | 0100 | 0111 | 7 | ||||||||
| 特性 5 | 1101 | 1001 | 9 |
众所周知,在演变的理论中原有特性对新生事物的遗传影响很重要。在基因演算中, 基因运算符的交叉 使用到改变染色体的程序中。这种运算操作存在以下几种方法:
我们来看看这些运算符函数
| 染色体_1: | 0000000000 |
| 染色体_2: | 1111111111 |
假设转折点放置在第三染色体后,那么:
| 染色体_1: | 0000000000 | >> | 000 | 1111111 | 结果_ 染色体_1 |
| 染色体_2: | 1111111111 | >> | 111 | 0000000 | 结果_ 染色体_2 |
那么结果染色体可能被确定为 0.5作为子体。
另外一个运算符是维持运算的变化。被称作变种运算符。这个运算符可以从它的初始状态再染色体中改变其值。相应地,每个比特在染色体中从中心位置倒序排列。
另外,还有一个运算符,被称为倒装运算符 使用在基因演算中。它将染色体分为两个部分并改变染色体的位置。简单地代表如下:
| 000 | 1111111 | >> | 1111111 | 000 |
理论上,这两个基因运算符已经可以完成基因演算的操作。不过在实际操作中还需要添加一些运算符,并且对现有的两个运算符做适当的修改。例如, 在基因演算中不可能只有一个交叉点 (如上所述),但是同样可以有多个交叉点。这种情况下,需要创建几个转折点 (通常是两个)。另外,倒装运算符的执行必须是在染色体种选择比特之后随意地使用执行。
现在,带着上面的知识我们来解释一下基因值。我们讨论基因演算的函数何在。近距离地观看基因运算的流程图和它的古典表示法。
一些运算的步骤还需要周密的计划和考虑。
步骤 3和4,选择染色体的母体步骤在函数的成功运算中扮演着最重要的角色。 对于这个步骤可能有多种多样的选择。最经常使用的方法被称作一般旋轮线 。 当使用这种方法时,这些或那些染色体的概率将会选择确定为它的合适性,即, PGet(Ai) ~ Fit(Ai)/Fit(Bt)。这种方法使用的结果可能会导致子体的单元生成概率的过量。另外一种经常使用的方法是淘汰赛。 它包括几个单元(通常2个)。在母体中随意地选择。最适合的单元将被使用。在一些运算的实施中,会使用名称为 菁英策略,说明保证进入母体的为最优秀的单元。 这种算法常常会加速基因演算的汇合。该策略的缺点是可能增加运算在最小地方点获取值。
确定运算停止的标准同样非常重要。演算函数的时期限定或演算汇合的确定(通常,当参量确定后,在几个时期内比较母体的适合性) 都需要使用一些尺度。
![]() Strategy Tester:交易策略测试中模式化的方式
技术分析的很多程序允许在历史数据上测试交易策略。在大多数情况下, 测试被连接到已经完成的数据上,在价格柱内这些数据不带有任何试图模式化的趋势。测试会快速进行,但是不精确。 |
![]() 在 MetaTrader 4 中比较基因演算方法和简单搜索
文章比较了使用基因演算方法和简单搜索获取的智能交易的时间和结果。 |
| 上一个 | 下一个 |