策略测试仪的优化 - 页 7

 

简而言之。

  • 合理的充分性是指适合于2到64次方的搜索领域。
  • 合理的行为是预先估计搜索字段,而不是把所有要搜索的变量拉到最大。

拉希德,不太可能有人敢于做直接的列举。一个2^64的遗传优化器将很容易检查,但这并不意味着我们需要暴露出无限的搜索区域。毕竟,我们必须为这些区域生成基因,然后对它们进行操作。

 
Rosh:

好吧,让我们来算算看。假设测试器中的一次通过需要1秒,那么通过的次数是2^64-1除以60,我们得到的优化时间是分钟。18 446 744 073 709 551 615/60.

接下来,用这个时间除以8(计算机上有8个核心),就可以得到在8个核心的计算机上有这个数量的优化时间。以小时或天为单位,要花多少钱?

不要计较,我说的不是直接的列举。让遗传算法 自己决定它需要多少个。

如果你把它与人脑相比,根据科学家的说法,大脑包含大约10^10个神经元,每个神经元有大约10^4个突触连接。

这就是我们都在努力的方向,创造更多、更先进的程序。

云计算是为了什么而生的?得益于此,用户不再局限于一台电脑,对此非常感谢。

Генетические алгоритмы - это просто!
Генетические алгоритмы - это просто!
  • 2010.05.25
  • Andrey Dik
  • www.mql5.com
В статье автор расскажет об эволюционных вычислениях с использованием генетического алгоритма собственной реализации. Будет показано на примерах функционирование алгоритма, даны практические рекомендации по его использованию.
 
Renat:

说来话长。

  • 合理的充分性是指适合于2到64次方的搜索领域。
  • 合理的行为是预先估计搜索字段,而不是把所有要搜索的变量拉到最大。

拉希德,不太可能有人敢于做直接的超标。一个2^64的遗传优化器将很容易检查,但这并不意味着你必须暴露出无限的搜索域。毕竟,我们必须为这些区域生成基因,然后对其进行操作。

什么是2/64是一个牵强的问题。

遗传算法 中,你不需要保留最差的结果?

是什么阻止了你将所有的变量扭曲到最大?

我搞不清楚基因和2^64之间有什么联系?

Генетические алгоритмы - это просто!
Генетические алгоритмы - это просто!
  • 2010.05.25
  • Andrey Dik
  • www.mql5.com
В статье автор расскажет об эволюционных вычислениях с использованием генетического алгоритма собственной реализации. Будет показано на примерах функционирование алгоритма, даны практические рекомендации по его использованию.
 

尽管如此,它可能会在搜索大量变量时派上用场(如神经网络),这种限制并不好。

所以希望能摆脱束缚))。

 

该策略测试器似乎使用了具有二进制染色体编码的GA。

这里有一句话

"然而,当在大维度的连续空间中搜索时,染色体的二进制表示法会带来一定的困难,当需要高精确度 时,会使用一种特殊的技术,其基础是将特征[ai,bi]的整个可接受值区间划分为具有所需精确度的部分。所需的精度p是由表达式定义的


其中N是编码一个比特串的比特数。

这个公式表明,p强烈地依赖于N,即表示的准确性是由用于编码一个染色体的比特数决定的。因此,随着N的增加,搜索空间扩大,变得巨大。一个著名的书中例子:让100个变量在区间[-500;500]内变化,要求找到小数点后6位以内的极值。在这种情况下,使用二进制编码的GA,字符串长度将是3000个元素,搜索空间将是大约101000个 染色体。"

因此,即使是标准优化器中规模相对较小的神经网络,当限制在64个待优化的参数时,也无法进行训练。还有一个缺点--如果有很多可优化的变量,手动填入参数是非常耗时的。这就是为什么我已经建议你可以通过编程指定带有可优化参数的数组。

但也有好消息。测试器和终端所缺少的一切,都可以用本地的MQL5手段来实现。稍后我将发布一些使用测试器和程序代码的优化测试结果。

 

然而,我从来没有在测试任务上等待过测试人员的结果(我的意思是,等待是一种懒惰)。

但任何人都可以自己做这些测试。为此,你可以采取文章 中的第一个例子。不要忘记设置优化模式--搜索最大值(以便能够与只有最大值的标准优化器进行比较)。

让我们写一个简单的专家顾问,它比绿萝卜还简单,除了计算用户的测试函数,什么都不做。

//+------------------------------------------------------------------+
//|                                                  Test expert.mq5 |
//|                                      Copyright 2010, JQS aka Joo |
//|                              https://www.mql5.com/ru/users/joo |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, JQS aka Joo"
#property link      "https://www.mql5.com/ru/users/joo"
#property version   "1.00"
//--- input parameters
input double   x1=0.0;
input double   x2=0.0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

  }
//+------------------------------------------------------------------+

double OnTester()
  {
   return
   (
    pow(cos((double)(2*x1*x1))-0.11 e1,0.2 e1)+
    pow(sin(0.5 e0 *(double) x1)-0.12 e1,0.2 e1) -
    pow(cos((double)(2*x2*x2))-0.11 e1,0.2 e1)+
    pow(sin(0.5 e0 *(double) x2)-0.12 e1,0.2 e1)
    );
  }
//+------------------------------------------------------------------+

测试仪窗口中的设置如下。


在 "输入参数 "选项卡中,执行以下操作。


而去。

大概的结论如下。

1)测试器中的优化器要慢10-100倍(对我来说是有效的,尽管测试器中的优化是在两个处理器核心上进行的,而软件优化是在一个核心上进行的)。最有可能的是,如此巨大的差异是由于测试仪除了直接计算FF外,还要写日志,在屏幕上显示信息等,也就是说,它有 "强制制动",而不是软件优化。

2)在测试器中不可能使用超过64个可优化的参数(在创建专家顾问的Wizard中,它被限制在60个参数),因此不可能训练任何重要规模的神经网络。

要么自己编写测试替代程序(MQL5允许这样做,它是一个优秀的 "鱼竿",但不是 "鱼"),要么 等到测试器的二进制遗传算法被连续算法取代,对优化参数数量的限制将被取消。第二种情况不具有建设性,所以第一种情况仍然存在。:)

全球结论:学习MQL5。


PS 一个好的解决方案是,启用或禁用优化信息的输出(日志、优化图),甚至更好的是,自定义显示信息的细节,以提高测试者的性能。

 
joo,还有更多的事情,除了为这种不小的计算写一个测试器和优化器之外,你还需要做一个计算的分配器,这将涉及到所有的处理器核心,并可能连接远程代理(如果你做集体计算)。首先,它的速度无法与标准测试器相比--一切都将运行得更慢,其次,为了编写这一切,你需要花费大量的时间和数百KB的代码,而这一切究竟是因为什么?
 
Mr.FreeMan:
joo,还有更多的事情,除了为这种不小的计算写一个测试器和优化器之外,你还需要做一个计算的分配器,这将涉及到所有的处理器核心,并可能连接远程代理(如果你做集体计算)。首先,它不能与标准测试器相提并论--一切都会慢得多;其次,为了写这些东西,你需要花费大量的时间和数百KB的代码,原因是什么呢?
joo的GA已经比标准的快了,通过将代码移植到CPP与studio 10(适用于多核处理器),速度仍然快6倍。
 
Mr.FreeMan:
joo,还有更重要的一点;除了为这种小型计算写一个测试器和优化器外,你还需要为会涉及所有处理器核心的计算做一个分配器,并可能连接远程代理(如果你想举行集体计算)。首先,它的速度无法与标准测试器相比--一切都将运行得更慢其次,为了编写这一切,你需要花费大量的时间和数百KB的代码,而这一切究竟是因为什么

关于红色的Urain 回答说。

至于绿色,当然是为了钱。时间就是金钱。我通常是个慢热的人,但却是个快速的骑手(我花了一年多的时间来开发和调试GA),现在我的收件箱中不断收到文章发表 后的感谢信息。:)

我不是在批评内部测试员。我只是把开发者的注意力集中在必须特别注意的地方。事实上,不管优化器有多好(优化器,而不是测试者),如果它慢得可怕,它的所有优势就会消失。

 

刚才,我想到了一个大胆的想法。虽然,事实上,为什么不呢?

我很荣幸能在MetaQuotes软件公司Meta Trader 5 优化器中使用我的UGA。这将是完全免费的,当然我不会拒绝红利。

UGA是简单而高效的。在设置上非常灵活。在测试器中,你可以输入三种设置模板--"粗糙"、"中等 "和 "精细",还可以单独显示设置,并注明 "如果你不清楚你需要什么,就不要在这些设置中做任何改变"。然后,它将有可能以所需的细节搜索程度进行优化--从非常快速的近似到TC最佳设置的精确最终搜索。目前,内置优化器不允许自己以任何方式进行配置。

Торговая платформа MetaTrader 5 для организации брокерского обслуживания / MetaQuotes Software Corp.
  • www.metaquotes.net
Торговая платформа MetaTrader 5 предназначена для проведения торговых операций на различных финансовый рынках. Терминал обладает большой базой аналитических возможностей и поддерживает более 70 различных инструментов для выполнения технического анализа