Обсуждение статьи "Популяционные алгоритмы оптимизации: Эволюция социальных групп (Evolution of Social Groups, ESG)"

 

Опубликована статья Популяционные алгоритмы оптимизации: Эволюция социальных групп (Evolution of Social Groups, ESG):

В статье рассмотрим принцип построения многопопуляционных алгоритмов и в качестве примера такого вида алгоритмов разберём Эволюцию социальных групп (ESG), новый авторский алгоритм. Мы проанализируем основные концепции, механизмы взаимодействия популяций и преимущества этого алгоритма, а также рассмотрим его производительность в задачах оптимизации.

В области оптимизации существует широкий спектр популяционных алгоритмов, предназначенных для поиска оптимальных решений в различных задачах. Однако, несмотря на их важность, многопопуляционные и многороевые алгоритмы ранее не были достаточно освещены в моих статьях и исследованиях. В связи с этим я пришел к мысли о необходимости более подробного рассмотрения этой увлекательной и перспективной темы.

Многопопуляционные алгоритмы основаны на идее использования нескольких независимых популяций для решения задач оптимизации. Популяции работают логически параллельно и могут обмениваться информацией об оптимальных решениях, что позволяет исследовать одновременно разные области пространства параметров и находить различные оптимумы. С другой стороны, многороевые алгоритмы используют социальные группы (рои) из множества взаимодействующих частиц, которые могут так же сотрудничать друг с другом и обмениваться информацией для достижения оптимальных решений.

В данной статье заполним этот пробел и рассмотрим в качестве примера многопопуляционный алгоритм ESG, созданный мной специально для этой статьи. Мы рассмотрим основные принципы работы подобных алгоритмов. Кроме того, мы рассмотрим результаты сравнительных исследований, которые позволят оценить эффективность этих алгоритмов по сравнению с моно-популяционными методами оптимизации.

Автор: Andrey Dik

 
34: OPTIMIZATION_METHOD_AO_HS = 1e-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 #:

сколько запусков фф и сколько раз проведён тест? это усреднённые результаты?
 
Andrey Dik #:

сколько запусков фф и сколько раз проведён тест? это усреднённые результаты?

Почему берете средний результат, а не наибольший?

    aveResult += AO.fB;
  }

  aveResult /=(double)NumberRepetTest_P;
 
fxsaber #:

Почему берете средний результат, а не наибольший?

Потому что такой наибольший результат не гарантирован. Больше скажу, никакой результат не гарантирован при стохастическом поиске.

Можно только оценивать средний результат за какое-то количество тестов, в статьях берётся 10 тестов, этого достаточно для хорошей оценки сравнения алго между собой. Можно ещё больше увеличивать количество тестов, конечно, например 100 и более, но это перестаёт иметь смысл из-за стремительного снижения точности измерений. Короче, 10 - самое то, ранее использовал 5 тестов - было недостаточно.

И, некоторые алгоритмы демонстрируют очень большой разброс в сходимости, это очень важное свойство алгоритмов оптимизации - повторяемость результатов, характеризующее стабильность вероятностной модели алгоритма (если конечно не идёт речь о детерминированных стратегиях поиска, результаты которых будут неизменно одинаковыми, но, как правило, у таких алгоритмов и сходимость низкая).

В общем, нужно делать как минимум 10 тестов, что бы иметь возможность адекватного сравнения алго между собой, имеющих стохастическую природу стратегии поиска в своей основе.

Очень грубо можно привести аналогию: какая из стратегий тыкания копьём в стог сена более эффективна, что бы найти яблоко среди груды соломы? Сравнивать можно только при проведении нескольких тестов, иначе есть ненулевая вероятность попасть в яблоко копьём с первого раза, если тыкнуть строго сверху стога по центру, и ошибочно думать, что это закономерный результат такой стратегии.

Кроме того, стратегии приведены в абсолютно чистом виде, это можно сказать эликсир стратегий, не замутнённых применением отсева дубликатов и прочими приёмами ускорения поиска за ограниченное количество запусков ФФ. Каждый новый дубликат сета тратит запуск, и алгоритмы в таком чистом виде очень удобно сравнивать.

При небольшом пространстве поиска исключение дубликатов может очень сильно влиять на результат, и даже очень слабые алго могут показать хорошие результаты. Но с увеличением пространства поиска отсев дубликатов теряет смысл быстрее, чем увеличивается пространство поиска, и тем сильнее становятся очевидными различия в способностях стратегий поиска.

Возможно, я плохо передал свою мысль этим постом, некоторые вещи очень сложно объяснить, к сожалению.

 
Andrey Dik #:

Можно только оценивать средний результат за какое-то количество тестов

Вижу логичным для поиска глобального максимума иметь входной параметр "количество повторов". Например, оптимизируем ТС в штатном Тестере. Иногда логично запустить оптимизатор несколько раз подряд, чтобы уменьшить вероятность застревания в локальных экстремумах. Да, скорость расчетов упадет в соответствующее количество раз, но вероятность нарваться на глобальный пик будет выше.
 
fxsaber #:
Вижу логичным для поиска глобального максимума иметь входной параметр "количество повторов".


34: OPTIMIZATION_METHOD_AO_HS = -1.7976931348623157e+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 - количество вызовов ФФ в каждой попытке (см. Repeats).

Для каждого алгоритма выводится лучший результат (см. Repeats).

 
  MathSrand ((int)GetMicrosecondCount ()); // reset of the generator

Сделал бы так.

Sleep(1); // random GetMicrosecondCount ().
MathSrand ((int)TimeLocal() + (int)GetMicrosecondCount ()); // reset of the generator

Иначе повторы при каждом запуске скрипта.

 
fxsaber #:
Вижу логичным для поиска глобального максимума иметь входной параметр "количество повторов". Например, оптимизируем ТС в штатном Тестере. Иногда логично запустить оптимизатор несколько раз подряд, чтобы уменьшить вероятность застревания в локальных экстремумах. Да, скорость расчетов упадет в соответствующее количество раз, но вероятность нарваться на глобальный пик будет выше.
fxsaber #:


Repeats - количество независимых вызовов алгоритма.

AmountCycles - количество вызовов ФФ в каждой попытке (см. Repeats).

Для каждого алгоритма выводится лучший результат (см. Repeats).

Да, что бы увеличить шанс нахождения глобала, то при прочих равных - нужно просто увеличивать количество тестов и использовать лучшее найденное решение. Даже алгоритм RND имеет ненулевой шанс найти то что нужно при таком подходе.

Но, как описал выше, только усреднённый результат может позволить сравнивать алго между собой.

 
fxsaber #:

Сделал бы так.

Иначе повторы при каждом запуске скрипта.

Сомневаюсь, что значение GetMicrosecondCount может повторить значения при повторных запусках, даже если сильно постараться. При условии, что отдельные тесты проходят дольше микросекунды, конечно.