不适合MT开发者!用什么来代替INIT_PARAMETERS_INCORRECT? - 页 2

 

你可以在OnTesterInit中创建你自己的优化集,让优化器认为只有一个sinput int NumPass被优化。

很难说这对最终结果会有什么影响--是否会找到所需的全局(局部)极值。

我还没有准备好为你提供一个例子,请看一下文件。那里写得很好。

 
fxsaber:

一个药方是让开发商把不正确的通行证的结果算作以前计算的最近的正确通行证。这将使优化表面的孔洞变得均匀。

这就是开发商所反对的。在这种情况下,人口中的其他个体将 "幸存 "下来。而遗传学将开始与错误一起工作。

 

编写一个只按数字输出有效链的函数如何?

首先想到的是一个117649个数值的表格,让遗传学在这个表格中寻找数字。

 
Sergey Savinkin:

这就是开发商所反对的。在这种情况下,人口中的其他个体将 "幸存 "下来。而遗传学将开始出现故障。

我也会反对这种算法。INCORRECT是一组不可接受的参数,它不能被 "最接近的可接受 "的参数所取代。

 
Sergey Savinkin:

这就是开发商所反对的。在这种情况下,人口中的其他个体将 "幸存 "下来。而遗传学将开始在错误中发挥作用。

遗传学在实践中几乎总是错误的,这是常态。如果没有这方面的适当研究,我不会对拟议的方案提出任何要求。

 
Georgiy Merts:

一个只按数字返回有效链的函数如何?

首先想到的是一个有117649个数值的表格,让遗传学在这个表格中寻找数字。

关于交易、自动交易系统和策略测试的论坛

不适合MT开发者!用什么来代替INIT_PARAMETERS_INCORRECT?

fxsaber, 2018.07.10 16:22

你可以在OnTesterInit中创建你的优化集,让优化器认为只有一个sinput int NumPass在被优化。

很难说这对最终结果会有什么影响--是否会找到所需的全局(局部)极值。

这在很大程度上取决于对最终结果是否满意的标准。


很明显,如果我们按照y=x^2的完整列举法。然后随机洗牌,在洗牌的基础上创建一个新的集合。GA将不会找到抛物线的顶点。

 
fxsaber:

很明显,如果你追踪y=x^2的完整列举。然后随机洗刷优化行,并在洗刷的基础上创建一个新的集合。GA将不会找到抛物线的顶点。

是的,在这里,事实证明,这些非常INCORRECTs "撕裂 "了健身函数空间太多。

除了重新设计输入参数外,恐怕没有什么可做的。 你建议的跳过OnTick()只是取代INCORRECT参数的一个拐杖,实际上遗传算法 无论如何都会被 "杀死"。 遗传学需要一些结果函数的 "梯度",所以我们可以用它们来移动到最大值。但是当你的INCORRECTs多于有效值时--你如何找到这个最大值?

我怀疑除了完全的蛮力,这里没有什么可做的,即使是完全的蛮力也会找到一个非常不稳定的解决方案。
 

设置输入参数 需要一定的技巧。

可以举一个很常见的例子。在优化每日交易间隔时,每日开始和结束时间是最常见的两个输入参数。

但这对GA来说,比指定开始时间和持续时间等要糟糕得多。似乎是同一件事,但不是针对大会。在第二种情况下,GA会做得更好。虽然 "更好 "是一个相当主观的评估。

 

Georgiy Merts:

当我们有更多的INCORRECTs比有效值时 - 你如何找到这个最大值?

让我们采取与上述相同的抛物线。假设我们对单一输入参数的90%的测试区间进行了INCORRECT。目前的GA会在这样的任务中崩溃。然而,如果你按照建议的方案进行,GA会做得很好。


我认为@Andrey Dik 可以帮助解决这些问题。但是,即使是对常规的GA进行建设性的批评,对他来说也没有好结果......

 
fxsaber:

采取与上述相同的抛物线。假设我们在测试区间的单一输入参数值的90%上做出INCORRECT。目前的大会将死在这样的任务上。然而,如果你按照建议的变体进行,GA会做得很好。

如何?通过用最接近的修正值替换不正确的值?恐怕这完全取决于我们如何分配这些非常不正确的做法。很有可能,最近的修正--将远离顶部。

是的,结果会发现,我们会有正确的结果,而不是错误的参数集--在我看来,这也是不应该做的--那我们会发现什么?我们会得到一个最大值,它将有一个不正确的参数集 ?