遗传算法及其可能的应用 - 页 4

 
Edgar Akhmadeev:

很久以前我就写过这个问题,当时我在EA中使用框架。我不记得确切的点,但我似乎没有得到所有的框架(和最好的结果)。我将寻找旧的帖子并尝试澄清。

但我清楚地记得,这在我的专家顾问中是可以清楚重现的--只要超调的数量超过一定的数量,并以科学的形式显示出来,我的遗传学就被打破了。重要的是,不仅变量的步数要大,而且变量的数量也要大。

这一切都很有意义。

关于 "大 "遗传学的框架有一个问题。

我们会解决这个问题。

 
Slava:

你说 "完全不能正常工作 "是什么意思?

我们如何才能重现该故障?

https://www.mql5.com/ru/forum/321656/page17#comment_13569022

我不再用框架检查,我放弃了。

但是用常规的遗传学,我在最后一次建立时检查了它。下面是没有 "数字溢出 "的结果。


中断后。

2020.03.16 20:50:57.436 Tester  genetic optimization finished on pass 646 (of 160164854439975000)
2020.03.16 20:50:57.436 Statistics      optimization done in 8 minutes 36 seconds
2020.03.16 20:50:57.436 Statistics      shortest pass 0:00:00.002, longest pass 0:00:23.060, average pass 0:00:06.276

有了 "溢出"。


在经历了EA的几次中断后(检查输入变量是否正确),遗传学永远停止了。 中断后。

2020.03.16 20:59:08.235 Tester  genetic optimization finished on pass 18
2020.03.16 20:59:08.235 Statistics      optimization done in 6 minutes 10 seconds
2020.03.16 20:59:08.235 Statistics      shortest pass 0:00:00.003, longest pass 0:00:05.978, average pass 0:00:01.339

没有一个真正的结果。

以Advisors/MAPSARSizeOptimized.ex5为例进行了尝试,它是有效的。很明显,"数字溢出 "和框架问题只在我的EA中再现,但如何找到问题......那里的一切都非常复杂,OnTradeTransaction等等。我还删除了框架。我不能给你看代码,它很庞大,大约一兆字节。而把它切割成一个可复制的例子将需要一个无望的漫长时间。如果我有时间,我将尝试删除OnTradeTransaction,也许还有其他一些技巧。

事实是,如果我们不超过通行证的数量,一切都能正常工作。

帧工作正常(没有超过),直到构建2286(包括)。

Тестер стратегий MetaTrader 5: ошибки, баги, предложения по улучшению работы
Тестер стратегий MetaTrader 5: ошибки, баги, предложения по улучшению работы
  • 2019.10.16
  • www.mql5.com
В настоящий момент тестер стратегий MetaTrader 5 подвергается глубокой переработки командой MQ...
 
Igor Makanu:

...

到目前为止有一个问题 - GAs可以在一段时间后开始围绕一小群优化参数收敛 - 这在我看来是正常的,所有的GAs都是这样工作的,这是他们使用的一个问题。

...

收敛到某个极值是任何优化算法的一个完全正常的现象,没有任何建议认为这部分不是/不是全局或局部。

另一个问题是,AO应该有一个允许放大突变百分比的机制(或其他相当于允许放大搜索邻域的逻辑),当开始践踏某些片段时,极值会不会被发现更好--这事先不知道,但肯定需要在其他地方搜索。

例如,设定了一个最大余额的标准,几个或许多点可能在绝对值上与之对应,但只有其中一些是有实际价值的,即在1523次交易中达到了98756423的余额,缩水率为11%,在12次交易中达到了同样的余额,缩水率为95%,两者之间有什么区别?

 
Edgar Akhmadeev:

在经历了专家的几次中断后(检查输入变量是否正确),遗传学已经永远停止了。中断之后。

没有一个真正的结果。

我不记得我是否在论坛上写过这个问题,但这确实是一个问题,而且不清楚为什么在MT中实施。在想法中,如果专家返回错误代码"错误的参数",测试人员有义务生成另一个实例,这样人口就完整了。

 
Stanislav Korotky:

我不记得我是否在论坛上写过这个问题,但这确实是一个问题,而且不清楚为什么在MT中实施。在想法中,如果专家返回错误代码"错误的参数",测试人员有义务生成另一个实例,这样人口就完整了。

如果我为所有不正确的参数组合返回INIT_PARAMETERS_INCORRECT,那么这些参数就太多了,生成将以错误结束。所以,我只在特定的参数出错时返回INIT_PARAMETERS_INCORRECT,如果它超出了范围。如果组合错误(一个参数不应该超过另一个),我就停止传递,返回INIT_SUCCEEDED和Custom = -N。这可能搞砸了遗传学,但我没有看到任何选择。或者说,有一个选项,可以摆脱错误的组合(在特殊情况下--使一个参数成为另一个参数的delta:v1=X,v2=Y+v1),但这是太强的诱变剂。这两个参数将被僵硬地联系在一起,如果你改变了一个,所有的东西都会移位。我已经放弃了这个选项,转而选择了一个假的结果而不是一个错误。

 
Edgar Akhmadeev:

如果你对所有错误的参数组合都返回INIT_PARAMETERS_INCORRECT,那么这些参数太多了,生成将以错误结束。所以我只在特定的参数出错时返回INIT_PARAMETERS_INCORRECT,如果它超出了范围。如果组合错误(一个参数不应该超过另一个),我就停止传递,返回INIT_SUCCEEDED和Custom = -N。这可能搞砸了遗传学,但我没有看到任何选择。或者说,有一个选项,可以摆脱错误的组合(在特殊情况下--使一个参数成为另一个参数的delta:v1=X,v2=Y+v1),但这是太强的诱变剂。 这两个参数将被僵硬地联系在一起,改变一个参数就会使所有的东西移位。我已经放弃了这个选项,而选择了一个假的结果而不是一个错误。

一个好的选择是在无效的变体上返回-DBL_MAX而不是错误。

总的来说,我设法实现了外部Ga,同时保留了MT测试器多币种保真度的所有魅力,同时能够使用所有的处理器内核和/或网络代理,包括云代理,同时避免了代理因过早完成通关或Ga人口不足而闲置的情况。

有信息显示,只有tSSSSS....,有计划在常规优化器中实现几种类型的AO,甚至有参数,但这是不准确的。

 
Andrey Dik:

一个好的选择是在无效的变体上返回-DBL_MAX而不是错误。

如果你返回一个随机值--对AO来说会更糟吗?

 
Igor Makanu:

如果你返回一个渲染过的值,对AO来说是不是更糟?

糟糕得多。

如果目标是扰乱AO的头脑,最好的方法是返回一个随机数。

 
Andrey Dik:

一个好的选择是在无效的变体中返回-DBL_MAX,而不是错误。

这太多了,图表的比例太大,以至于你无法看到有用的结果。我返回一个比最坏情况下的Custom略高的值。不过,最主要的是要确定正确的改进方向。

伊戈尔-马卡努

如果你返回一个渲染过的值--对AO来说会更糟吗?

这有什么意义?最主要的是确定正确的方向,所以你必须向GA表明,他在这里表现出了最差的结果,而不仅仅是一个弱点。

 
Slava:

你说 "完全不起作用 "是什么意思?

我怎样才能重现操作的不正确性?

删除了OnTradeTransaction,没有任何帮助我将继续思考。