Diskussion zum Artikel "Algorithmen zur Optimierung mit Populationen: Evolution sozialer Gruppen (ESG)"

 

Neuer Artikel Algorithmen zur Optimierung mit Populationen: Evolution sozialer Gruppen (ESG) :

Wir werden das Prinzip des Aufbaus von Algorithmen mit mehreren Populationen besprechen. Als Beispiel für diese Art von Algorithmus werden wir uns den neuen nutzerdefinierten Algorithmus - Evolution of Social Groups (ESG) - ansehen. Wir werden die grundlegenden Konzepte, die Mechanismen der Populationsinteraktion und die Vorteile dieses Algorithmus analysieren und seine Leistung bei Optimierungsproblemen untersuchen.

Im Bereich der Optimierung gibt es eine breite Palette von Populationsalgorithmen, die darauf ausgelegt sind, optimale Lösungen für verschiedene Probleme zu finden. Trotz ihrer Bedeutung sind die Algorithmen mit mehreren Populationen und Schwärmen bisher in meinen Artikeln nicht ausreichend behandelt worden. In diesem Zusammenhang halte ich es für notwendig, dieses faszinierende und vielversprechende Thema ausführlicher zu behandeln.

Algorithmen mit mehreren Populationen basieren auf der Idee, mehrere unabhängige Populationen zur Lösung von Optimierungsproblemen zu verwenden. Die Populationen arbeiten logisch parallel und können Informationen über optimale Lösungen austauschen, wodurch es möglich ist, gleichzeitig verschiedene Regionen des Parameterraums zu untersuchen und verschiedene Optima zu finden. Andererseits verwenden Multischwarm-Algorithmen soziale Gruppen (Schwärme) aus vielen interagierenden Partikeln (Mitgliedern), die auch miteinander kooperieren und Informationen austauschen können, um optimale Lösungen zu erzielen.

In diesem Artikel werden wir den ESG-Algorithmus mit mehreren Populationen betrachten, den ich speziell für diesen Artikel entwickelt habe. Wir werden uns mit den Grundprinzipien solcher Algorithmen befassen. Darüber hinaus werden wir die Ergebnisse vergleichender Studien berücksichtigen, die es uns ermöglichen, die Effektivität dieser Algorithmen im Vergleich zu Monopopulations-Optimierungsmethoden zu bewerten.

Autor: 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 #:

wie viele Durchläufe von ff und wie oft wurde der Test durchgeführt? sind dies Durchschnittswerte?
 
Andrey Dik #:

wie viele Durchläufe von ff und wie oft wurde der Test durchgeführt? sind dies Durchschnittswerte?

Warum wird das durchschnittliche Ergebnis genommen und nicht das höchste?

    aveResult += AO.fB;
  }

  aveResult /=(double)NumberRepetTest_P;
 
fxsaber #:

Warum nimmt man das durchschnittliche Ergebnis und nicht das höchste?

Weil das größte Ergebnis nicht garantiert ist. Bei der stochastischen Suche ist kein Ergebnis garantiert.

Sie können nur das durchschnittliche Ergebnis für eine bestimmte Anzahl von Tests schätzen, in den Artikeln nehmen wir 10 Tests, das ist genug für eine gute Bewertung des Vergleichs der Algos untereinander. Es ist natürlich möglich, die Anzahl der Tests noch weiter zu erhöhen, zum Beispiel auf 100 oder mehr, aber das macht keinen Sinn mehr, weil die Messgenauigkeit schnell abnimmt. Kurz gesagt, 10 ist das Beste, früher habe ich 5 Tests verwendet - das war nicht genug.

Außerdem weisen einige Algorithmen eine sehr große Streuung der Konvergenz auf, was eine sehr wichtige Eigenschaft von Optimierungsalgorithmen ist - die Wiederholbarkeit der Ergebnisse, die die Stabilität des probabilistischen Modells des Algorithmus kennzeichnet (es sei denn, es handelt sich um deterministische Suchstrategien, deren Ergebnisse immer gleich sind, aber solche Algorithmen haben in der Regel eine geringe Konvergenz).

Im Allgemeinen müssen mindestens 10 Tests durchgeführt werden, um Algorithmen mit stochastischer Suchstrategie angemessen vergleichen zu können.

Ganz grob kann man eine Analogie anführen: Welche der Strategien, einen Speer in einen Heuhaufen zu stoßen, ist effektiver, um einen Apfel in einem Strohhaufen zu finden? Der Vergleich kann nur in mehreren Versuchen durchgeführt werden, da die Wahrscheinlichkeit, den Apfel mit dem Speer beim ersten Mal zu treffen, nicht Null ist, wenn man streng von der Spitze des Stapels in die Mitte sticht, und es ist falsch zu glauben, dass dies ein natürliches Ergebnis einer solchen Strategie ist.

Außerdem sind die Strategien in absolut reiner Form gegeben, man kann sagen, es ist ein Elixier von Strategien, ungetrübt durch die Anwendung von Duplikat-Screening und anderen Techniken der Suchbeschleunigung für eine begrenzte Anzahl von FF-Läufen. Jeder neue Dublettensatz verschwendet einen Durchlauf, und Algorithmen in dieser reinen Form sind sehr leicht zu vergleichen.

Wenn der Suchraum klein ist, kann der Ausschluss von Duplikaten einen sehr großen Unterschied machen, und selbst sehr schwache Algos können gute Ergebnisse erzielen. Aber je größer der Suchraum wird, desto schneller wird der Ausschluss von Duplikaten bedeutungslos, und desto mehr werden die Unterschiede in den Fähigkeiten der Suchstrategien deutlich.

Es mag sein, dass ich mich mit diesem Beitrag schlecht ausgedrückt habe, manche Dinge sind leider sehr schwer zu erklären.

 
Andrey Dik #:

Es ist nur möglich, das durchschnittliche Ergebnis über eine bestimmte Anzahl von Tests zu schätzen

Ich denke, es ist logisch, einen Eingabeparameter "Anzahl der Wiederholungen" zu haben, um nach dem globalen Maximum zu suchen. Wir optimieren zum Beispiel einen TS im Standardtester. Manchmal ist es logisch, den Optimierer mehrere Male hintereinander laufen zu lassen, um die Wahrscheinlichkeit zu verringern, dass man in lokalen Extrema stecken bleibt. Ja, die Berechnungsgeschwindigkeit sinkt durch eine entsprechende Anzahl von Durchläufen, aber die Wahrscheinlichkeit, ein globales Maximum zu erreichen, ist höher.
 
fxsaber #:
Ich sehe es als logisch an, einen Eingabeparameter "Anzahl der Wiederholungen" zu haben, um das globale Maximum zu suchen.


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 - die Anzahl der unabhängigen Aufrufe des Algorithmus.

AmountCycles - die Anzahl der FF-Aufrufe bei jedem Versuch (siehe Repeats).

Für jeden Algorithmus wird das beste Ergebnis ausgegeben (siehe Repeats).

 
  MathSrand ((int)GetMicrosecondCount ()); // Zurücksetzen des Generators

Ich würde es auf diese Weise machen.

Sleep(1); // random GetMicrosecondCount ().
MathSrand ((int)TimeLocal() + (int)GetMicrosecondCount ()); // Zurücksetzen des Generators

Andernfalls wird es bei jeder Ausführung des Skripts wiederholt.

 
fxsaber #:
Ich denke, es ist logisch, einen Eingabeparameter "Anzahl der Wiederholungen" zu haben, um nach dem globalen Maximum zu suchen. Wir optimieren zum Beispiel einen TS im Standardtester. Manchmal ist es logisch, den Optimierer mehrere Male hintereinander laufen zu lassen, um die Wahrscheinlichkeit zu verringern, dass man in lokalen Extrema stecken bleibt. Ja, die Geschwindigkeit der Berechnungen wird durch die entsprechende Anzahl von Durchläufen sinken, aber die Wahrscheinlichkeit, einen globalen Spitzenwert zu erreichen, wird höher sein.
fxsaber #:


Wiederholungen - Anzahl der unabhängigen Aufrufe des Algorithmus.

AmountCycles - Anzahl der FF-Aufrufe bei jedem Versuch (siehe Repeats).

Für jeden Algorithmus wird das beste Ergebnis angezeigt (siehe Wiederholungen).

Ja, um die Chance zu erhöhen, ein globales Ergebnis zu finden, müssen Sie nur die Anzahl der Versuche erhöhen und die beste gefundene Lösung verwenden, wenn alle anderen Dinge gleich sind. Sogar der RND-Algorithmus hat eine von Null abweichende Chance, mit diesem Ansatz zu finden, was Sie brauchen.

Aber, wie ich oben beschrieben habe, kann nur das durchschnittliche Ergebnis einen Vergleich der Algorithmen untereinander ermöglichen.

 
fxsaber #:

Ich hätte es so gemacht.

Andernfalls wiederholt es sich bei jeder Ausführung des Skripts.

Ich bezweifle, dass der GetMicrosecondCount-Wert die Werte bei wiederholten Durchläufen wiederholen kann, selbst wenn man sich Mühe gibt. Vorausgesetzt natürlich, die einzelnen Tests sind länger als eine Mikrosekunde.