Algorithmus zur Partikelschwarmoptimierung
Algorithmusübersicht
particleswarm basiert auf dem in Kennedy und Eberhart [1] beschriebenen Algorithmus und verwendet Modifikationen, die in Mezura-Montes und Coello Coello [2] und in Pedersen [3] vorgeschlagen wurden.
Der Partikelschwarm-Algorithmus beginnt mit der Erstellung der ersten Partikel und der Zuweisung ihrer Anfangsgeschwindigkeiten.
Es wertet die Zielfunktion an jedem Partikelstandort aus und bestimmt den besten (niedrigsten) Funktionswert und den besten Standort.
Es wählt neue Geschwindigkeiten auf Grundlage der aktuellen Geschwindigkeit, der besten individuellen Standorte der Partikel und der besten Standorte ihrer Nachbarn.
Anschließend werden iterativ die Partikelpositionen (die neue Position ist die alte plus die Geschwindigkeit, die so geändert wird, dass die Partikel innerhalb der Grenzen bleiben), Geschwindigkeiten und Nachbarn aktualisiert.
Die Iterationen werden fortgesetzt, bis der Algorithmus ein Abbruchkriterium erreicht.
Hier sind die Einzelheiten der Schritte.
Initialisierung
Standardmäßig erstellt particleswarm zufällig und gleichmäßig Partikel innerhalb der Grenzen. Wenn eine unbegrenzte Komponente vorhanden ist, erstellt particleswarm Partikel mit einer zufälligen, gleichmäßigen Verteilung von –1000 bis 1000. Wenn Sie nur eine Grenze haben, verschiebt particleswarm die Erstellung so, dass die Grenze der Endpunkt ist und das Erstellungsintervall 2000 breit ist. Partikel i hat Position x(i), ein Zeilenvektor mit nvars Elementen. Steuern Sie die Spanne des anfänglichen Schwarms mit der Option InitialSwarmSpan.
In ähnlicher Weise erzeugt particleswarm anfängliche Partikelgeschwindigkeiten v zufällig und gleichmäßig innerhalb des Bereichs [-r,r], wobei r der Vektor der anfänglichen Bereiche ist. Der Bereich der Komponente k ist min(ub(k) - lb(k),InitialSwarmSpan(k)).
particleswarm wertet die Zielfunktion an allen Partikeln aus. Es zeichnet die aktuelle Position p(i) jedes Partikels i auf. In nachfolgenden Iterationen ist p(i) der Speicherort der besten Zielfunktion, die das Partikel i gefunden hat. Und b ist das beste aller Partikel: b = min(fun(p(i))). d ist die Position, sodass b = fun(d).
particleswarm initialisiert die Nachbarschaftsgröße N bis minNeighborhoodSize = max(2,floor(SwarmSize*MinNeighborsFraction)).
particleswarm initialisiert die Trägheit W = max(InertiaRange), oder wenn InertiaRange negativ ist, setzt es W = min(InertiaRange).
particleswarm initialisiert den Stall-Zähler c = 0.
Legen Sie der Einfachheit halber die Variablen y1 = SelfAdjustmentWeight und y2 = SocialAdjustmentWeight fest, wobei SelfAdjustmentWeight und SocialAdjustmentWeight Optionen sind.
Iterationsschritte
Der Algorithmus aktualisiert den Schwarm wie folgt. Für Partikel i, das sich an Position x(i) befindet:
Wählen Sie eine zufällige Teilmenge
SvonN-Partikeln außeri.Finden Sie
fbest(S), die beste Zielfunktion unter den Nachbarn, undg(S), die Position des Nachbarn mit der besten Zielfunktion.Für
u1undu2gleichmäßig (0,1) verteilte Zufallsvektoren der Längenvarsaktualisieren Sie die Geschwindigkeitv = W*v + y1*u1.*(p-x) + y2*u2.*(g-x).Dieses Update verwendet eine gewichtete Summe aus:
Die vorherige Geschwindigkeit
vDie Differenz zwischen der aktuellen Position und der besten Position, die das Partikel gesehen hat
p-xDer Unterschied zwischen der aktuellen Position und der besten Position in der aktuellen Nachbarschaft
g-x
Aktualisiere die Position
x = x + v.Setzen Sie die Grenzen durch. Wenn eine beliebige Komponente von
xaußerhalb einer Grenze liegt, setzen Sie sie auf diese Grenze. Wenn für die Komponenten, die gerade auf eine Grenze festgelegt wurden, die Geschwindigkeitvdieser Komponente außerhalb der Grenze liegt, setzen Sie diese Geschwindigkeitskomponente auf Null.Bewerten Sie die Zielfunktion
f = fun(x).Wenn
f < fun(p), dann setzep = x. Dieser Schritt stellt sicher, dasspdie beste Position hat, die das Partikel je gesehen hat.Die nächsten Schritte des Algorithmus beziehen sich auf Parameter des gesamten Schwarms, nicht auf einzelne Partikel. Betrachten Sie das kleinste
f = min(f(j))unter denj-Partikeln im Schwarm.Wenn
f < b, dann setzeb = fundd = x. Dieser Schritt stellt sicher, dassbdie beste Zielfunktion im Schwarm unddden besten Standort hat.Wenn im vorherigen Schritt der beste Funktionswert gesenkt wurde, setzen Sie
flag = true. Andernfallsflag = false. Der Wert vonflagwird im nächsten Schritt verwendet.Aktualisieren Sie die Nachbarschaft. Wenn
flag = true:Setzen Sie
c = max(0,c-1).Setzen Sie
NaufminNeighborhoodSize.Wenn
c < 2, dann setzeW = 2*W.Wenn
c > 5, dann setzeW = W/2.Stellen Sie sicher, dass
Winnerhalb der Grenzen der OptionInertiaRangeliegt.
Wenn
flag = false:Setzen Sie
c = c+1.Setzen Sie
N = min(N + minNeighborhoodSize,SwarmSize).
Abbruchkriterien
particleswarm iteriert, bis ein Abbruchkriterium erreicht ist.
| Stoppoption | Test beenden | Ausstiegsbedingung |
|---|---|---|
MaxStallIterations und FunctionTolerance | Die relative Änderung des besten Zielfunktionswerts g über die letzten MaxStallIterations Iterationen ist kleiner als FunctionTolerance. | 1 |
MaxIterations | Die Anzahl der Iterationen erreicht MaxIterations. | 0 |
OutputFcn oder PlotFcn | OutputFcn oder PlotFcn können die Iterationen anhalten. | -1 |
ObjectiveLimit | Der beste Zielfunktionswert g ist kleiner als ObjectiveLimit. | -3 |
MaxStallTime | Der beste Zielfunktionswert g hat sich in den letzten MaxStallTime Sekunden nicht geändert. | -4 |
MaxTime | Die Funktionsausführungszeit überschreitet MaxTime Sekunden. | -5 |
Wenn particleswarm mit dem Exit-Flag 1 stoppt, ruft es nach dem Beenden optional eine Hybridfunktion auf.
Referenzen
[1] Kennedy, J., and R. Eberhart. "Particle Swarm Optimization." Proceedings of the IEEE International Conference on Neural Networks. Perth, Australia, 1995, pp. 1942–1945.
[2] Mezura-Montes, E., and C. A. Coello Coello. "Constraint-handling in nature-inspired numerical optimization: Past, present and future." Swarm and Evolutionary Computation. 2011, pp. 173–194.
[3] Pedersen, M. E. "Good Parameters for Particle Swarm Optimization." Luxembourg: Hvass Laboratories, 2010.