文章 "种群优化算法:社群进化(ESG)"

 

新文章 种群优化算法:社群进化(ESG)已发布:

我们将研究构造多种群算法的原理。作为该算法类别的一个示例,我们将查看新的自定义算法 — 社群进化(ESG)。我们将分析该算法的基本概念、种群互动机制和优势,并检查其在优化问题中的表现。

在优化领域,有范围广阔的种群算法,旨在寻找各种问题中的最优解。然而,尽管它们很重要,但多种群和多群体算法在我以前的文章中并未得到充分的涵盖。有鉴于此,我觉得有必要针对这个迷人而有前景的话题进行更详细的研究。

多种群算法基于多个独立种群来求解优化问题的思路。种群在逻辑上并行运作,可以交流有关最优解的信息,这样就令同时探索参数空间的不同区域并、并找到不同的最优值成为可能。另一方面,多群体算法使用许多互动份子的社群(群落),其也可以彼此合作,并交流达成最佳解的信息。

在本文中,我们将研究本文专门创建的多种群 ESG 算法。我们将研究该类算法的基本原理。此外,我们将研究比较研究的结果,这将令我们能够评估这些算法相比单种群优化方法的有效性。

作者:Andrey Dik

 
34: OPTIMIZATION_METHOD_AO_HS = 1 e-323
33: OPTIMIZATION_METHOD_AO_GSA = 0.11926002964619356
32: OPTIMIZATION_METHOD_AO_ABC = 0.4042085745674859
31: OPTIMIZATION_METHOD_AO_MA = 0.612338549995716
30: OPTIMIZATION_METHOD_AO_BFO = 0.6679763921514072
29: OPTIMIZATION_METHOD_AO_BFO_GA = 0.71308437578657
28: OPTIMIZATION_METHOD_AO_CSS = 0.7316626048819873
27: OPTIMIZATION_METHOD_AO_FSS = 0.7355579934372427
26: OPTIMIZATION_METHOD_AO_GWO = 0.7390576242470235
25: OPTIMIZATION_METHOD_AO_RND = 0.8155449913938271
24: OPTIMIZATION_METHOD_AO_PSO = 0.8222303819859975
23: OPTIMIZATION_METHOD_AO_SC = 0.8340939685401099
22: OPTIMIZATION_METHOD_AO_BA = 0.845763320077643
21: OPTIMIZATION_METHOD_AO_Micro_AIS = 0.8528065344750899
20: OPTIMIZATION_METHOD_AO_SA = 0.8589854552563216
19: OPTIMIZATION_METHOD_AO_SFL = 0.8597046576708655
18: OPTIMIZATION_METHOD_AO_IWDm = 0.862259472275573
17: OPTIMIZATION_METHOD_AO_EM = 0.8779833807818905
16: OPTIMIZATION_METHOD_AO_SDS = 0.9027267066161594
15: OPTIMIZATION_METHOD_AO_NMm = 0.9076903894257041
14: OPTIMIZATION_METHOD_AO_FAm = 0.9111364322206529
13: OPTIMIZATION_METHOD_AO_ESG = 0.9128694208149278
12: OPTIMIZATION_METHOD_AO_SDOm = 0.9182612507465655
11: OPTIMIZATION_METHOD_AO_COAm = 0.9198698363722636
10: OPTIMIZATION_METHOD_AO_IWO = 0.923914294524697
09: OPTIMIZATION_METHOD_AO_SSG = 0.9304990658351672
08: OPTIMIZATION_METHOD_AO_BGA = 0.9389284935189659
07: OPTIMIZATION_METHOD_AO_ACOm = 0.944545536542497
06: OPTIMIZATION_METHOD_AO_DE = 0.9482478998933197
05: OPTIMIZATION_METHOD_AO_POES = 0.9528516011673952
04: OPTIMIZATION_METHOD_AO_SIA = 0.9540996483364099
03: OPTIMIZATION_METHOD_AO_MEC = 0.9574730447145243
02: OPTIMIZATION_METHOD_AO_SDSm = 0.9648638811101882
01: OPTIMIZATION_METHOD_PSO = 0.9653160312454183
00: OPTIMIZATION_METHOD_AO_P_O_ES = 0.9654152361899765
 
34: OPTIMIZATION_METHOD_AO_ABC = 0.42453133581346014
33: OPTIMIZATION_METHOD_AO_IWDm = 0.48360991828383987
32: OPTIMIZATION_METHOD_AO_SIA = 0.49114081735004017
31: OPTIMIZATION_METHOD_AO_EM = 0.49479704987697276
30: OPTIMIZATION_METHOD_AO_RND = 0.5085913649249508
29: OPTIMIZATION_METHOD_AO_MA = 0.5129110822292692
28: OPTIMIZATION_METHOD_AO_HS = 0.5129110822292692
27: OPTIMIZATION_METHOD_AO_CSS = 0.5138134842496185
26: OPTIMIZATION_METHOD_AO_SSG = 0.518468314742929
25: OPTIMIZATION_METHOD_AO_SC = 0.5243709181146918
24: OPTIMIZATION_METHOD_AO_SA = 0.532630712905892
23: OPTIMIZATION_METHOD_AO_FSS = 0.5405996550405998
22: OPTIMIZATION_METHOD_AO_PSO = 0.5430691869913079
21: OPTIMIZATION_METHOD_AO_FAm = 0.5629971666466362
20: OPTIMIZATION_METHOD_AO_BA = 0.5653828707497576
19: OPTIMIZATION_METHOD_AO_BFO = 0.5708620661833331
18: OPTIMIZATION_METHOD_AO_IWO = 0.5736967768562664
17: OPTIMIZATION_METHOD_AO_NMm = 0.5818790406200212
16: OPTIMIZATION_METHOD_AO_ESG = 0.5945790493029925
15: OPTIMIZATION_METHOD_AO_GWO = 0.6234871646160723
14: OPTIMIZATION_METHOD_PSO = 0.6256882439878475
13: OPTIMIZATION_METHOD_AO_GSA = 0.6735183680285166
12: OPTIMIZATION_METHOD_AO_SFL = 0.6885524892005978
11: OPTIMIZATION_METHOD_AO_DE = 0.7092034045816206
10: OPTIMIZATION_METHOD_AO_COAm = 0.7263185318109061
09: OPTIMIZATION_METHOD_AO_SDS = 0.7686064552778226
08: OPTIMIZATION_METHOD_AO_Micro_AIS = 0.7722431882203732
07: OPTIMIZATION_METHOD_AO_SDOm = 0.7808430850753312
06: OPTIMIZATION_METHOD_AO_MEC = 0.7816647439743983
05: OPTIMIZATION_METHOD_AO_ACOm = 0.7830252357918316
04: OPTIMIZATION_METHOD_AO_POES = 0.8453008986622238
03: OPTIMIZATION_METHOD_AO_P_O_ES = 0.8523920887258357
02: OPTIMIZATION_METHOD_AO_SDSm = 0.9046058644799349
01: OPTIMIZATION_METHOD_AO_BGA = 0.9856063511804057
00: OPTIMIZATION_METHOD_AO_BFO_GA = 0.9880292622094636
 
fxsaber #:

运行了多少次 ff,进行了多少次测试?
 
Andrey Dik #:

运行了多少次 ff,进行了多少次测试?

为什么取平均值而不是最高值?

    aveResult += AO.fB;
  }

  aveResult /=(double)NumberRepetTest_P;
 
fxsaber #:

为什么取平均值而不是最高值?

因为最大结果是无法保证的。我还要告诉你,在随机搜索中,没有任何结果是有保证的。

你只能估算出一定测试次数的平均结果,在文章中,我们取了 10 次测试,这足以很好地评估算法之间的比较。当然,也有可能增加测试次数,比如 100 次或更多,但这样做毫无意义,因为测量精度会迅速下降。总之,10 次测试是最好的,我之前用过 5 次测试--这还不够。

而且,有些算法在收敛性方面表现出非常大的分散性, 这是优化算法的一个非常重要的特性--结果的可重复性,它是算法概率模型稳定性的特征(当然,除非我们谈论的是确定性搜索策略,其结果将始终如一,但通常情况下,此类算法的收敛性较低)。

一般来说,要对搜索策略具有随机性的算法进行充分比较,至少需要进行 10 次测试。

我们可以非常粗略地打个比方:要在一堆稻草中找到一个苹果,哪种把矛戳进干草堆的策略更有效?这种比较只能在多次试验中进行,否则,如果严格地从草垛顶端的中心开始戳,第一次用矛戳中苹果的概率就不会为零,而认为这是这种策略的必然结果是错误的。

此外,这些策略是以绝对纯粹的形式给出的,可以说是策略的灵丹妙药,在有限的 FF 运行中,没有应用重复筛选和其他搜索加速技术。每个新的重复集都会浪费一次运行,这种纯粹形式的算法非常容易比较。

当搜索空间较小时,重复排除会带来很大的不同,即使是很弱的算法也能显示出很好的结果。但随着搜索空间的增大,重复排除就会变得毫无意义,搜索策略的能力差异也就越明显。

我在这篇文章中可能没有很好地表达我的观点,很遗憾,有些事情很难解释清楚。

 
Andrey Dik #:

只能估计一定次数测试的平均结果

我认为有一个输入参数 "重复次数 "来搜索全局最大值是合理的。例如,我们在标准测试器中优化 TS。有时,为了降低陷入局部极值的概率,连续多次运行优化器是合乎逻辑的。是的,计算速度会相应降低,但达到全局峰值的概率会更高。
 
fxsaber #:
我认为有一个输入参数 "重复次数 "来搜索全局最大值是合乎逻辑的。


34: OPTIMIZATION_METHOD_AO_HS = -1.7976931348623157 e+308
33: OPTIMIZATION_METHOD_AO_CSS = 0.49720358822818334
32: OPTIMIZATION_METHOD_AO_FSS = 0.5126268634117646
31: OPTIMIZATION_METHOD_AO_MA = 0.5456638212207142
30: OPTIMIZATION_METHOD_AO_SC = 0.5493573778417595
29: OPTIMIZATION_METHOD_AO_SFL = 0.5586288936731915
28: OPTIMIZATION_METHOD_AO_EM = 0.5622069376759021
27: OPTIMIZATION_METHOD_AO_BFO = 0.572272929264936
26: OPTIMIZATION_METHOD_AO_GWO = 0.576823172558009
25: OPTIMIZATION_METHOD_AO_BA = 0.5780620208551676
24: OPTIMIZATION_METHOD_AO_COAm = 0.6122501636921197
23: OPTIMIZATION_METHOD_AO_FAm = 0.6140389813209256
22: OPTIMIZATION_METHOD_AO_IWO = 0.668152749061326
21: OPTIMIZATION_METHOD_AO_RND = 0.6708834560036839
20: OPTIMIZATION_METHOD_AO_SDSm = 0.6949312990837662
19: OPTIMIZATION_METHOD_AO_ESG = 0.6998001260367949
18: OPTIMIZATION_METHOD_AO_DE = 0.7011196053256343
17: OPTIMIZATION_METHOD_AO_IWDm = 0.7021399692041209
16: OPTIMIZATION_METHOD_AO_GSA = 0.7220579685405103
15: OPTIMIZATION_METHOD_AO_PSO = 0.749441828773945
14: OPTIMIZATION_METHOD_AO_SA = 0.7682447940796119
13: OPTIMIZATION_METHOD_AO_MEC = 0.7861990306904714
12: OPTIMIZATION_METHOD_AO_ABC = 0.7907454297118246
11: OPTIMIZATION_METHOD_AO_SDS = 0.8196051951016118
10: OPTIMIZATION_METHOD_AO_SIA = 0.8221393904152611
09: OPTIMIZATION_METHOD_AO_SDOm = 0.8473736964247897
08: OPTIMIZATION_METHOD_PSO = 0.8554905139189528
07: OPTIMIZATION_METHOD_AO_BFO_GA = 0.9302287492114422
06: OPTIMIZATION_METHOD_AO_SSG = 0.9508929176886642
05: OPTIMIZATION_METHOD_AO_Micro_AIS = 0.9744230924005981
04: OPTIMIZATION_METHOD_AO_BGA = 0.9758026556865227
03: OPTIMIZATION_METHOD_AO_ACOm = 0.9842635986445009
02: OPTIMIZATION_METHOD_AO_P_O_ES = 0.9862393247408759
01: OPTIMIZATION_METHOD_AO_POES = 0.9939584765415376
00: OPTIMIZATION_METHOD_AO_NMm = 0.9992316949848764
inAmountCycles = 1000, inRepeats = 5

Repeats- 独立调用算法的次数。

AmountCycles- 每次尝试中调用 FF 的次数(参见重复次数)。

对于每种算法,都会输出最佳结果(见重复次数)。

 
  MathSrand ((int)GetMicrosecondCount ()); // 重置发电机

我会这样做。

Sleep(1); // 随机 GetMicrosecondCount ().
MathSrand ((int)TimeLocal() + (int)GetMicrosecondCount ()); // 重置发电机

否则每次运行脚本时都会重复。

 
fxsaber #:
我认为有一个输入参数 "重复次数 "来搜索全局最大值是合乎逻辑的。例如,我们在标准测试器中对 TS 进行优化。有时,为了降低陷入局部极值的概率,连续多次运行优化器是合乎逻辑的。是的,相应次数的计算速度会下降,但达到全局峰值的概率会更高。
fxsaber#:


重复次数- 算法的独立调用次数。

AmountCycles- 每次尝试中调用 FF 的次数(请参阅重复次数)。

显示每种算法的最佳结果(见重复次数)。

是的,在其他条件相同的情况下,要提高找到全局的几率,只需增加测试次数,并使用找到的最佳解决方案。即使是 RND 算法,使用这种方法找到所需结果的几率也不会为零。

但是,如上所述,只有平均结果才能对算法进行比较。

 
fxsaber #:

本来可以这样做的。

否则每次运行脚本时都会重复。

我怀疑 GetMicrosecondCount 值能否在重复运行时重复这些值,即使你很努力。当然,前提是每次测试的时间都超过一微秒。