文章 "遗传算法 - 很简单!" - 页 8 123456789101112131415...20 新评论 Vladimir Gomonov 2011.05.14 23:11 #71 joo:1) 讲故事的人?嗯,很遗憾,我没有领会到其中的幽默。数据库检查发生在函数 CheckHistoryChromosomes(chromos,historyHromosomes ) 中,该函数由GetFitness(historyHromosomes) 调用。这就是为什么我说的是正确的--没有重复运行 FF。2) 与数据库的核对是通过基因进行的。当出现新染色体时,每个基因都会被SelectInDiscreteSpace(temp,RangeMinimum,RangeMaximum,Precision,3) 归一化。因此,这里也没有 "童话"。3) 参见 2) 1,2,3) 明白了。差不多了。但这仍然不是 "无间隙 "比较实数是否相等的理由。:)SelectInDiscreteSpace()略有改动。我不喜欢你在内部修正 Step 的做法。对用户进行修正不是什么大不了的事。至少这次不是。用户可能有合理的考虑,使 Step 在基因变化范围方面 "不合理"。结果是这样的double SelectInDiscreteSpace ( double In, double InMin, double InMax, double step, int RoundMode ) { if (step==0.0) return(In); // 确保边界正确 if ( InMax < InMin ) { double temp = InMax; InMax = InMin; InMin = temp; } // 如果违规,返回违规边界 if ( In < InMin ) return( InMin ); // if ( In > InMax ) return( InMax );// 最后我们将这样做, всё равно придётся if ( InMax == InMin || step <= 0.0 ) return( InMin ); // 达到给定的比例 // step = (InMax - InMin) / MathCeil ( (InMax - InMin) / step ); // 不,我们不会让它达到 "给定比例"。 switch ( RoundMode ) { case 1: In = ( InMin + step * MathFloor ( ( In - InMin ) / step ) ); case 2: In = ( InMin + step * MathCeil ( ( In - InMin ) / step ) ); default: In = ( InMin + step * MathRound ( ( In - InMin ) / step ) ); } return fmin(In,InMax); } Andrey Dik 2011.05.15 02:26 #72 MetaDriver:对 SelectInDiscreteSpace() 稍作了修改。我不喜欢你纠正 Step 的做法。纠正用户不关国王的事。至少这次不是。用户可能有合理的考虑,使 Step 在基因变化范围方面 "不合理"。明白吗?这样做并不好,因为马上就会出现一个问题,即从输入数字的哪一边 "抓取 "数值行上的数值(不知道什么是"右",右边还是左边)--我的算法给出了充分的答案,但你的算法,唉。这就是为什么你需要这样做:step = (InMax - InMin) / MathCeil ( (InMax - InMin) / step );下面是你我代码结果的一些对比示例: 结果 我的 你的 在 2,2 2 2 InMIN 2 最大值 3 步长 0,8 结果 我的 您的 在 2,8 3 2,8 InMIN 2 最大值 3 步进 0,8 结果 我的 您的 在 2,2 2,25 2,3 InMIN 2 最大值 3 步进 0,3 Andrey Dik 2011.05.15 09:05 #73 这种归一化的意义与 NormalizeDouble() 不同,但这取决于所有者,如果所有者不喜欢它,可以使用归一化到所需的符号,而不是像SelectInDiscreteSpace() 中的指定步长。 Vladimir Gomonov 2011.05.15 17:33 #74 joo: 这种归一化的意义与 NormalizeDouble() 不同,但这取决于所有者,谁不喜欢它,可以使用归一化到所需的符号,而不是像在SelectInDiscreteSpace() 中那样使用指定的步长。一切都很清楚了,就像上一篇文章一样。安德烈,所有列出的变体都有权在这里存在。当然,你的也一样。在优化过程中浮动、变化的离散度值得密切关注。--关于一般的一切.....:你应该添加设置、遗传运算符库等。我正在考虑在对象上重写一切,制作一个功能更强大的程序和用户界面(图形界面,在标签页中有许多设置)。有些东西需要添加,有些东西需要共同优化。更确切地说,我还在考虑是基于你的代码(使用片段)还是重新编写一遍。如果您想参与,请私信我。我不确定是否会发表。我们将拭目以待。现在我只想为自己做这件事。 Andrey Dik 2011.05.15 22:31 #75 MetaDriver:总的来说1) 从好的方面来说--您需要添加自定义功能、基因运算符库等。2) 更准确地说,我还在考虑是基于你的代码(使用片段)还是重新编写一遍。3) 如果您想参与,请私信我。1) 相反,我正试图在不降低控制灵活性的前提下减少 UGA 参数的数量。2) 我知道有几个人在他们的项目中原封不动地使用文章中的代码,还有一些人从零开始重写代码。3) 我曾给您写过私人信息。 Mykola Demko 2011.05.15 22:56 #76 MetaDriver:这些都是可以理解的,就像上一篇文章一样。安德烈,这里列出的所有选择都有存在的权利。当然,你的也一样。浮动离散性在优化过程中会发生变化,值得密切关注。--关于一般的一切.....:你应该添加设置、遗传运算符库等。我正在考虑在对象上重写一切,制作一个功能更强大的程序和用户界面(图形界面,在标签页中有大量设置)。有些东西需要添加,有些东西需要共同优化。更确切地说,我还在考虑是以您的代码为基础(使用片段),还是重新编写一遍。...弗拉基米尔,你是想骑车还是开车?您是想要一个漂亮的代码,还是想要构建一个比测试版更酷的 GA?我个人认为测试版相当酷,但参数很少。 。 Vladimir Gomonov 2011.05.16 02:30 #77 Urain:弗拉基米尔,你想骑马还是开车?你是想要一个漂亮的代码,还是想制造一个比测试版更酷的 GA?我个人认为测试版已经很酷了,只有一个细微差别的参数是不够的。 。 我想要一个方便的代码。易于使用、扩展、修改和嵌入。 Mykola Demko 2011.05.16 12:22 #78 MetaDriver:我想要一个方便的代码。易于使用、扩展、修改和嵌入。 然后描述 GA 的对象模型。根据描述的模型创建空类,然后填充代码并规定交互方式。 Roman Zamozhnyy 2011.07.19 17:24 #79 第 175 行改为 NormalizeDouble((double)SumOfCurrentEpoch/MathMax(1,(double)resetCounterFF),2),如果不这样做,工作报告就会出错。 Andrey Dik 2011.07.19 21:13 #80 Rich:第 175 行改为如果不这样做,操作报告会出错。是的,如果自 gen. 运算符循环第一次运行以来,在给定的时间内没有任何改进,就会出现除以 0 的错误。在初始化时立即为resetCounterFF 变量赋值 1 是最简单也是更符合逻辑的做法:int resetCounterFF =1;// "没有改进的纪元 "重置计数器 123456789101112131415...20 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
1) 讲故事的人?嗯,很遗憾,我没有领会到其中的幽默。数据库检查发生在函数 CheckHistoryChromosomes(chromos,historyHromosomes ) 中,该函数由GetFitness(historyHromosomes) 调用。这就是为什么我说的是正确的--没有重复运行 FF。
2) 与数据库的核对是通过基因进行的。当出现新染色体时,每个基因都会被SelectInDiscreteSpace(temp,RangeMinimum,RangeMaximum,Precision,3) 归一化。因此,这里也没有 "童话"。
3) 参见 2)
1,2,3) 明白了。差不多了。但这仍然不是 "无间隙 "比较实数是否相等的理由。:)
SelectInDiscreteSpace()略有改动。我不喜欢你在内部修正 Step 的做法。对用户进行修正不是什么大不了的事。至少这次不是。
用户可能有合理的考虑,使 Step 在基因变化范围方面 "不合理"。
结果是这样的
对 SelectInDiscreteSpace() 稍作了修改。我不喜欢你纠正 Step 的做法。纠正用户不关国王的事。至少这次不是。
用户可能有合理的考虑,使 Step 在基因变化范围方面 "不合理"。
明白吗?
这样做并不好,因为马上就会出现一个问题,即从输入数字的哪一边 "抓取 "数值行上的数值(不知道什么是"右",右边还是左边)--我的算法给出了充分的答案,但你的算法,唉。这就是为什么你需要这样做:
step = (InMax - InMin) / MathCeil ( (InMax - InMin) / step );
下面是你我代码结果的一些对比示例:
这种归一化的意义与 NormalizeDouble() 不同,但这取决于所有者,谁不喜欢它,可以使用归一化到所需的符号,而不是像在SelectInDiscreteSpace() 中那样使用指定的步长。
一切都很清楚了,就像上一篇文章一样。
安德烈,所有列出的变体都有权在这里存在。当然,你的也一样。在优化过程中浮动、变化的离散度值得密切关注。
--
关于一般的一切.....:
你应该添加设置、遗传运算符库等。
我正在考虑在对象上重写一切,制作一个功能更强大的程序和用户界面(图形界面,在标签页中有许多设置)。有些东西需要添加,有些东西需要共同优化。
更确切地说,我还在考虑是基于你的代码(使用片段)还是重新编写一遍。
如果您想参与,请私信我。
我不确定是否会发表。我们将拭目以待。现在我只想为自己做这件事。
总的来说
1) 从好的方面来说--您需要添加自定义功能、基因运算符库等。
2) 更准确地说,我还在考虑是基于你的代码(使用片段)还是重新编写一遍。
3) 如果您想参与,请私信我。
1) 相反,我正试图在不降低控制灵活性的前提下减少 UGA 参数的数量。
2) 我知道有几个人在他们的项目中原封不动地使用文章中的代码,还有一些人从零开始重写代码。
3) 我曾给您写过私人信息。
这些都是可以理解的,就像上一篇文章一样。
安德烈,这里列出的所有选择都有存在的权利。当然,你的也一样。浮动离散性在优化过程中会发生变化,值得密切关注。
--
关于一般的一切.....:
你应该添加设置、遗传运算符库等。
我正在考虑在对象上重写一切,制作一个功能更强大的程序和用户界面(图形界面,在标签页中有大量设置)。有些东西需要添加,有些东西需要共同优化。
更确切地说,我还在考虑是以您的代码为基础(使用片段),还是重新编写一遍。
...弗拉基米尔,你是想骑车还是开车?
您是想要一个漂亮的代码,还是想要构建一个比测试版更酷的 GA?
我个人认为测试版相当酷,但参数很少。
。
弗拉基米尔,你想骑马还是开车?
你是想要一个漂亮的代码,还是想制造一个比测试版更酷的 GA?
我个人认为测试版已经很酷了,只有一个细微差别的参数是不够的。
。
我想要一个方便的代码。易于使用、扩展、修改和嵌入。
我想要一个方便的代码。易于使用、扩展、修改和嵌入。
第 175 行改为
如果不这样做,工作报告就会出错。
第 175 行改为
如果不这样做,操作报告会出错。
是的,如果自 gen. 运算符循环第一次运行以来,在给定的时间内没有任何改进,就会出现除以 0 的错误。
在初始化时立即为resetCounterFF 变量赋值 1 是最简单也是更符合逻辑的做法: