文章 "遗传算法 - 很简单!" - 页 12

 
Urain:

....

一般来说,我们应该明白,GA 找到的不是精确的解决方案,而是稳健的解决方案。也就是说,与所有可能的解决方案相比,它是一个相当成功的解决方案。

测试功能被 "击败"。它们必须被打败。

所以--你说得都对。

 
joo:

测试功能被 "击败"。它们必须被击败。

但你说的都是对的。

是的,是的,我没有详细说明,这就是为什么它们是测试函数,算法必须接受它们,否则这样的算法就不能被认为是成功的。

如果算法连测试都没有通过,很难想象它能在未知领域找到什么。

 

谢谢大家,成功了。

我一定是太笨了,把减法和乘法搞混了。

 
ivandurak:

谢谢大家,成功了

你是说你的算法?恭喜你
 

我想知道,如果我们需要优化具有相同拟合函数值的不同变量,以最小化近似误差,那么如何正确拧紧 UGA?经典问题。例如,一个有 4 个神经元的五通两层神经网络,需要在 [-1...1] 范围内搜索 22 个系数和偏差,精度为 0.0001,同时在同一目标函数中选择输入指标的参数 5 个*2 个参数= 10 个变量,范围为 5...50。或者单独进行,但步长为 0.01。

当然,您也可以在权重范围内对指标值进行编码。但这有点不同。

还有一个问题。是否可以将跳过基因的条件传递给 UGA?例如,负责指标的基因应对应于 G23< G24 G25<G26 等条件。

 
miklelv:

我想知道,如果我们需要优化具有相同拟合函数值的不同变量,以最小化近似误差,那么如何正确拧紧 UGA?经典问题。例如,一个有 4 个神经元的五通两层神经网络,需要在 [-1...1] 范围内搜索 22 个系数和偏差,精度为 0.0001,同时在同一目标函数中选择输入指标的参数 5 个*2 个参数= 10 个变量,范围为 5...50。或者单独进行,但步长为 0.01。

当然,您也可以在权重范围内对指标值进行编码。但这有点不同。

还有一个问题。是否可以将跳过基因的条件传递给 UGA?例如,负责指标的基因应对应 G23< G24 G25<G26 等条件。

就是这样,就是这样、

大部分参数都有一个工作范围,其余参数只需通过移位和缩放进行调整。

要知道,文章中的代码并不是为消费者的每一个喷嚏而进行的商业开发。

我们希望为每个参数设置范围,没有人拉着你的手,但不要忘了,由于参数的数量以千计,手工设置范围将变得非常困难。


有一个基因范围 [-1;1] --> (int)NormaliseDouble( ((gene+1)/2)*45+5 ,0) --> [5;50] 。

虽然我同意会有很多不同的基因给出相同的结果,但在这里,你可以为组合基因制作一个精确度设置器,例如,从 0 到第 1000 个基因的精确度为 3 位数,从 1000 到 1010 个基因的精确度为 0 位数。

 
miklelv:

还有一个问题。是否有可能将基因跳转的条件传递给 UGA?例如,负责指标的基因必须满足 G23< G24 G25<G26 等条件。

我们可以这样做: 参数 1=G23 参数 2=G23+G24。
 
her.human:
可以这样做: 参数 1=G23 参数 2=G23+G24。

在转换范围时,最好进行逻辑检查转换,其中包括断点。

否则,断裂范围的一部分与另一部分之间将没有任何联系,这里需要理解的是,从不同 染色体借入的基因只能是相应的,借入的第二个基因只能用于产生新染色体的第二个基因。

如果一个参数由两个基因代表,它们之间就没有任何联系。

 
Urain:

最好在进行转化时进行逻辑检查,其中包括断裂。

否则,断裂范围的一部分与另一部分之间将没有任何联系,要知道,基因从不同的 染色体中借入只能是相应的,借入的第二个基因只能用于产生新染色体的第二个基因。

如果一个参数由两个基因代表,它们之间就没有任何联系。

也许这样更好。

我提出了一个简单的变体。GA 可以毫无问题地处理它。

一般来说,基因并不总是借来的,也有可能产生新的基因。

 
感谢您的评论。这当然更容易编写代码。我正在尝试在 mql 上复制 Neuroshell 的预测向导。从这 20 个最佳指标(例如 5 个)中选取 2-4 个参数,在 200-2000 条历史记录的一个周期内,用 2-3 秒钟的时间在 20 个指标的 200-2000 条历史记录上形成 5...50 个参数。所有这些都是用 VBbasic 编写的。这一定是一种很酷的算法。UGA 会做得很好。