文章 "种群优化算法:社群进化(ESG)" - 页 2 123 新评论 fxsaber 2024.02.03 16:02 #11 Andrey Dik #: 我怀疑 GetMicrosecondCount 值能否在重复运行时重复这些值,即使你很努力也不行。当然,前提是单个测试的时间超过一微秒。 2024.02.03 16:11:25.824 OPTIMIZATION_METHOD_AO_BGA 2024.02.03 16:11:25.873 AmountCycles = 5000, Repeats = 1 2024.02.03 16:11:25.873 BestResult = 0.9999285571886549: X1 = -1.48, Y1 = 0.6299999999999999, X2 = -1.48, Y2 = 0.6299999999999999, X3 = -1.48, Y3 = 0.6299999999999999 2024.02.03 16:11:25.873 Check = 0.9999285571886549: X1 = -1.48, Y1 = 0.6299999999999999, X2 = -1.48, Y2 = 0.6299999999999999, X3 = -1.48, Y3 = 0.6299999999999999 2024.02.03 16:11:36.957 OPTIMIZATION_METHOD_AO_BGA 2024.02.03 16:11:37.007 AmountCycles = 5000, Repeats = 1 2024.02.03 16:11:37.007 BestResult = 0.9999285571886549: X1 = -1.48, Y1 = 0.6299999999999999, X2 = -1.48, Y2 = 0.6299999999999999, X3 = -1.48, Y3 = 0.6299999999999999 2024.02.03 16:11:37.007 Check = 0.9999285571886549: X1 = -1.48, Y1 = 0.6299999999999999, X2 = -1.48, Y2 = 0.6299999999999999, X3 = -1.48, Y3 = 0.6299999999999999 2024.02.03 16:11:47.218 OPTIMIZATION_METHOD_AO_BGA 2024.02.03 16:11:47.267 AmountCycles = 5000, Repeats = 1 2024.02.03 16:11:47.267 BestResult = 0.9999285571886549: X1 = -1.48, Y1 = 0.6299999999999999, X2 = -1.48, Y2 = 0.6299999999999999, X3 = -1.48, Y3 = 0.6299999999999999 2024.02.03 16:11:47.267 Check = 0.9999285571886549: X1 = -1.48, Y1 = 0.6299999999999999, X2 = -1.48, Y2 = 0.6299999999999999, X3 = -1.48, Y3 = 0.6299999999999999 2024.02.03 16:12:49.104 OPTIMIZATION_METHOD_AO_BGA 2024.02.03 16:12:49.152 AmountCycles = 5000, Repeats = 1 2024.02.03 16:12:49.152 BestResult = 0.9999285571886549: X1 = -1.48, Y1 = 0.6299999999999999, X2 = -1.48, Y2 = 0.6299999999999999, X3 = -1.48, Y3 = 0.6299999999999999 2024.02.03 16:12:49.152 Check = 0.9999285571886549: X1 = -1.48, Y1 = 0.6299999999999999, X2 = -1.48, Y2 = 0.6299999999999999, X3 = -1.48, Y3 = 0.6299999999999999 左侧是脚本运行时间列。 Andrey Dik 2024.02.03 16:50 #12 fxsaber #:左侧是一列脚本开始时间。 99.99% 是所选步骤能达到的最大值,据我所知,小数点后两位的精度是在 BGA 设置中选择的。 因此,这并不是 gcc 初始化相同的结果,而是在设定任务内理论上完全可能收敛的结果。 如果打印每个测试中创建的第一个染色体,就能确保这一点,因为它们将是不同的染色体。这就是优化算法的神奇之处--在不同的(随机)初始状态下找到相同的解决方案。 Andrey Dik 2024.02.03 17:05 #13 我想出了一个测试方法,来测试算法对陷入局部困境的抵抗力。我们需要在第一次迭代时,不是在整个区域内随机放置所有代理,而是放置在全局最小值处。我们的任务是找到全局最大值。我相信,很多算法都会这样停留在洞里。这只是一个非常人为的案例,但却能得出有趣的结论。 Andrey Dik 2024.02.03 17:13 #14 Andrey Dik #:我想到了一个测试算法对陷入本地化的抵抗力的方法。 我们需要在第一次迭代时,不是随机地将所有代理放置在整个区域内,而是放置在全局最小值处。我们的任务是找到全局最大值。我相信很多算法都会停留在洞里。 这只是一个非常人为的案例,但却能得出有趣的结论。 整个种群在某一点上是一个退化种群。这也是对种群多样性下降影响的测试,算法应该能够摆脱这种瓶颈。 这只是胡思乱想。 fxsaber 2024.02.04 09:59 #15 Andrey Dik #:我们需要在第一次迭代时,不是随机地将所有代理放置在整个区域,而是放置在全局最小值处。我们的任务就是找到全局最大值。 通常的启动方式是搜索全局最大值。 然后从找到的点(MaxTmp)开始寻找全局最小值。 然后从找到的点(MinTmp)开始寻找全局最大值。 进入第 2 步。 在步骤 2-3 中,我们将测量离全局最小值/最大值的距离(MaxGlobal - MaxTmp + MinTmp - MinGlobal)。平均值就是优化算法的评分1。 取(MaxTmp[i]-MinTmp[i])之和的平均值就是优化算法的评分 2。 现在还没有允许从某一点开始运行算法的函数。 Andrey Dik 2024.02.04 12:28 #16 fxsaber #: 正常启动,搜索全局最大值。 然后从找到的点(MaxTmp)开始搜索全局最小值。 然后从找到的点(MinTmp)开始搜索全局最大值。 转到步骤 2。 在步骤 2-3 中,我们将测量离全局最小值/最大值的距离(MaxGlobal - MaxTmp + MinTmp - MinGlobal)。平均值是优化算法的评分1。 我们取总和(MaxTmp[i]-MinTmp[i])的平均值-优化算法的评分 2。 你可以这样做)) Сейчас нет функции, позволяющей запускать алгоритм из точки. 您可以在第一个纪元测量 FF 之前,"强制 "将代理的坐标初始化为任意值。代理的字段是公开的。算法的 "内脏 "试图让它们尽可能地从外部访问,当然,这与确保字段安全的通常做法相矛盾,但无论如何,想自取灭亡的人总会找到办法的,因此使用算法的便利性得以保留。 那么,HCS 的初始化问题解决了吗? fxsaber 2024.02.04 14:34 #17 Andrey Dik #: 99.99% 是所选间距能达到的最大值,据我所知,在 BGA 设置中,所选精度为小数点后两位。 因此,这并不是 gcc 初始化相同的结果,而是在设定任务内理论上完全可能收敛的结果。 如果打印每个测试中创建的第一个染色体,就能确定这一点,因为每个测试创建的染色体都不一样。这就是优化算法的神奇之处--在不同的(随机)初始状态下找到相同的解决方案。 您说得对,谢谢! void OnStart() { Print(GetMicrosecondCount()); } 2024.02.04 15:31:28.422 2142 2024.02.04 15:31:40.553 2367 2024.02.04 15:31:42.385 2326 fxsaber 2024.02.04 14:35 #18 Andrey Dik #:在第一次测量 FF 之前,可以 "强制 "从外部将代理的坐标初始化为任何值。 请举例说明你们的两种算法。 Andrey Dik 2024.02.04 15:28 #19 fxsaber #:请举例说明您的两种算法。 在历时的主循环中插入一段代码,用函数全局最小值的坐标覆盖代理的坐标: for (int epochCNT = 1; epochCNT <= epochCount && !IsStopped (); epochCNT++) { AO.Moving (); //--插入的代码----插入的代码----插入者 if (epochCNT == 1) { for (int set = 0; set < ArraySize (AO.a); set++) { for (int i = 0; i < funcCount; i++) { AO.a [set].c [i * 2] = f.GetMinFuncX (); AO.a [set].c [i * 2 + 1] = f.GetMinFuncY (); } } } //--插入的代码----插入的代码----插入者 for (int set = 0; set < ArraySize (AO.a); set++) { AO.a [set].f = f.CalcFunc (AO.a [set].c, funcCount); } AO.Revision (); if (Video_P) { //drawing a population-------------------------------------------------- SendGraphToCanvas (1, 1); for (int i = 0; i < ArraySize (AO.a); i++) { PointDr (AO.a [i].c, f, 1, 1, funcCount, false); } PointDr (AO.cB, f, 1, 1, funcCount, true); MaxMinDr (f); //绘制收敛图--------------------------------------------- xConv = (int)Scale (epochCNT, 1, epochCount, H + 2, W - 3, false); yConv = (int)Scale (AO.fB, f.GetMinFun (), f.GetMaxFun (), 2, H - 2, true); Canvas.FillCircle (xConv, yConv, 1, COLOR2RGB (clrConv)); Canvas.Update (); } } 这一招对 BGA 算法不起作用,因为这样我们只能覆盖表型,而二进制基因型将保持不变。为此,我们必须进入算法内部,当种群处于初级阶段时,我们就必须执行这样的外科手术。 这就是以这种方式初始化 ESG 的结果: 在这里,我拍摄了一段 ESG 的视频,你可以看到它是如何从一个点爬出来,向四周扩散,寻找全局最大值的。并不是所有算法都会这样,我在文章中提到过,有些算法根本没有 "逃离陷阱 "的机制。 tanner gilliland 2024.03.01 02:47 #20 你好,我刚刚开始了解内置快速遗传算法的 替代方案。我想知道你能否帮助我实现 BGA 优化。我一直在看你们关于这个主题的一些文章。不过,我觉得自己起步晚了,错过了一些信息,也不知道如何使用不同的算法来优化 EA。我下载并编译了 test_ao_bga.mq5。当我加载终端时,它显示:"程序类型无效,加载 Test_AO_BGA.ex5 失败"。如果我尝试运行它,终端报告说 "未找到 Test_AO_BGA.ex5"。能否请您帮助我使其正常运行?我如何配置自己的 EA 以使用 BGA 优化?谢谢。 123 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我怀疑 GetMicrosecondCount 值能否在重复运行时重复这些值,即使你很努力也不行。当然,前提是单个测试的时间超过一微秒。
左侧是脚本运行时间列。
左侧是一列脚本开始时间。
整个种群在某一点上是一个退化种群。这也是对种群多样性下降影响的测试,算法应该能够摆脱这种瓶颈。
这只是胡思乱想。
在步骤 2-3 中,我们将测量离全局最小值/最大值的距离(MaxGlobal - MaxTmp + MinTmp - MinGlobal)。平均值就是优化算法的评分1。
取(MaxTmp[i]-MinTmp[i])之和的平均值就是优化算法的评分 2。
现在还没有允许从某一点开始运行算法的函数。
在步骤 2-3 中,我们将测量离全局最小值/最大值的距离(MaxGlobal - MaxTmp + MinTmp - MinGlobal)。平均值是优化算法的评分1。
我们取总和(MaxTmp[i]-MinTmp[i])的平均值-优化算法的评分 2。
你可以这样做))
您可以在第一个纪元测量 FF 之前,"强制 "将代理的坐标初始化为任意值。代理的字段是公开的。算法的 "内脏 "试图让它们尽可能地从外部访问,当然,这与确保字段安全的通常做法相矛盾,但无论如何,想自取灭亡的人总会找到办法的,因此使用算法的便利性得以保留。
那么,HCS 的初始化问题解决了吗?
您说得对,谢谢!
在第一次测量 FF 之前,可以 "强制 "从外部将代理的坐标初始化为任何值。
请举例说明你们的两种算法。
请举例说明您的两种算法。
在历时的主循环中插入一段代码,用函数全局最小值的坐标覆盖代理的坐标:
这一招对 BGA 算法不起作用,因为这样我们只能覆盖表型,而二进制基因型将保持不变。为此,我们必须进入算法内部,当种群处于初级阶段时,我们就必须执行这样的外科手术。
这就是以这种方式初始化 ESG 的结果:
在这里,我拍摄了一段 ESG 的视频,你可以看到它是如何从一个点爬出来,向四周扩散,寻找全局最大值的。并不是所有算法都会这样,我在文章中提到过,有些算法根本没有 "逃离陷阱 "的机制。