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

 
我告诉过你,我的脑子很乱,所以我走错了方向。
哈希可以应用于在聚落内查找重复的内容,而且查找哈希的功能可以变得简单快捷,因为即使有 1-2 个重复的内容也不会使天气变坏,也不会破坏结果。
 

与 FF 的执行时间相比,GA 算法的执行时间少得不可比拟。因此,试图进一步加快算法速度是毫无意义的,就像把 GA 移到 dll 上一样。

我们应该在保证结果准确性的前提下,尽量减少 FF 运行的次数。算法为此提供了灵活的设置。此外,还可以通过提高一般遗传算法的搜索质量,特别是运算符的搜索质量,进一步缩短搜索时间。我建议将研究潜力引向这些方向。

 
joo:

与 FF 的执行时间相比,GA 算法的执行时间少得不可比拟。因此,试图进一步加快算法速度是毫无意义的,就像把 GA 移到 dll 上一样。

我们应该在保证结果准确性的前提下,尽量减少 FF 运行的次数。算法可以为此进行灵活设置。此外,还可以通过提高一般遗传算法的搜索质量,特别是运算符的搜索质量,来进一步缩短搜索时间。我建议将研究潜力引向这些方向。


看来现在的 dll 不会比 mql 5 更快。
好吧,一旦我写出一个库,我就会对它进行测试,然后再写出结果)))。

 

文章重要说明。

不要使用算法参数

FFNormaliseDigits GeneNormaliseDigits

你不需要将拟合函数值和基因归一化。归一化会降低算法的可搜索性,增加 FF 运行次数。此外,舍弃的小数位数越多,对算法的负面影响就越大。

换句话说,在算法中引入归一化操作是一个错误。

不要与精度 参数控制的采样操作混淆!

 
不要使用算法参数

FFNormalizeDigitsGeneNormalizeDigits

没有必要将适合度函数 和基因的值归一化。归一化会降低算法的搜索能力,增加启动 FF 的数量。

换句话说,在算法中引入归一化操作是一个错误。

不要与参数Precision 中的数字化操作相混淆!

 
joo:

文章重要说明。

不要使用算法参数

FFNormaliseDigits GeneNormaliseDigits

你不需要将拟合函数值和基因归一化。归一化会降低算法的可搜索性,增加 FF 运行次数。此外,舍弃的小数位数越多,对算法的负面影响就越大。

换句话说,在算法中引入归一化操作是一个错误。

这与精度 参数控制的采样操作不能混为一谈!

因此,在 UGAlib 库中,最好去除归一化操作,或者只在 FF 中去除归一化操作。
 
Serj_Che:
在 UGAlib 库中移除归一化更好,还是只在 FF 中移除更好。
FFNormalizeDigits 在 FF 中用于对适合度值进行归一化,而GeneNormalizeDigits 则在算法本身中用于对基因进行归一化。没有 必要对两者都进行归一化处理。
 
joo:
FFNormalizeDigits 在 FF 中用于对适配值进行归一化处理,而GeneNormalizeDigits 则在算法本身中用于对基因进行归一化处理。没有 必要将两者都归一化。

我明白了。当然,我会自己更正,但如果不难的话,请将更正后的 UGAlib 版本发布出来。

我担心自己会出错。

 
更新了文章中的 UGA 库和示例。当前的作者免费版本 1.1.0 可通过文章末尾的链接获取。
 

非常感谢作者提供的程序库!

在父搜索函数的循环中添加一行 "cnt++;",否则可能会进入永恒循环!

 //Отбор двух родителей.

void SelectTwoParents

(

int &address_mama,

int &address_papa

)

{

  //-----------------------Переменные-------------------------------------

  int cnt=1;

  address_mama=0;//адрес материнской особи в популяции

  address_papa=0;//адрес отцовской особи в популяции

  //----------------------------------------------------------------------

  //----------------------------Отбор родителей--------------------------

  //Десять попыток выбрать разных родителей.

  while (cnt<=10)

  {

    //Для материнской особи

    address_mama=NaturalSelection();

    //Для отцовской особи

    address_papa=NaturalSelection();

    if (address_mama!=address_papa)

      break;

    cnt++; 

  }

  //---------------------------------------------------------------------

}