Hauptinhalt

Diese Seite wurde mithilfe maschineller Übersetzung übersetzt. Klicken Sie hier, um die neueste Version auf Englisch zu sehen.

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:

  1. Wählen Sie eine zufällige Teilmenge S von N-Partikeln außer i.

  2. Finden Sie fbest(S), die beste Zielfunktion unter den Nachbarn, und g(S), die Position des Nachbarn mit der besten Zielfunktion.

  3. Für u1 und u2 gleichmäßig (0,1) verteilte Zufallsvektoren der Länge nvars aktualisieren Sie die Geschwindigkeit

    v = W*v + y1*u1.*(p-x) + y2*u2.*(g-x).

    Dieses Update verwendet eine gewichtete Summe aus:

    • Die vorherige Geschwindigkeit v

    • Die Differenz zwischen der aktuellen Position und der besten Position, die das Partikel gesehen hat p-x

    • Der Unterschied zwischen der aktuellen Position und der besten Position in der aktuellen Nachbarschaft g-x

  4. Aktualisiere die Position x = x + v.

  5. Setzen Sie die Grenzen durch. Wenn eine beliebige Komponente von x außerhalb einer Grenze liegt, setzen Sie sie auf diese Grenze. Wenn für die Komponenten, die gerade auf eine Grenze festgelegt wurden, die Geschwindigkeit v dieser Komponente außerhalb der Grenze liegt, setzen Sie diese Geschwindigkeitskomponente auf Null.

  6. Bewerten Sie die Zielfunktion f = fun(x).

  7. Wenn f < fun(p), dann setze p = x. Dieser Schritt stellt sicher, dass p die beste Position hat, die das Partikel je gesehen hat.

  8. 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 den j-Partikeln im Schwarm.

    Wenn f < b, dann setze b = f und d = x. Dieser Schritt stellt sicher, dass b die beste Zielfunktion im Schwarm und d den besten Standort hat.

  9. Wenn im vorherigen Schritt der beste Funktionswert gesenkt wurde, setzen Sie flag = true. Andernfalls flag = false. Der Wert von flag wird im nächsten Schritt verwendet.

  10. Aktualisieren Sie die Nachbarschaft. Wenn flag = true:

    1. Setzen Sie c = max(0,c-1).

    2. Setzen Sie N auf minNeighborhoodSize.

    3. Wenn c < 2, dann setze W = 2*W.

    4. Wenn c > 5, dann setze W = W/2.

    5. Stellen Sie sicher, dass W innerhalb der Grenzen der Option InertiaRange liegt.

    Wenn flag = false:

    1. Setzen Sie c = c+1.

    2. Setzen Sie N = min(N + minNeighborhoodSize,SwarmSize).

Abbruchkriterien

particleswarm iteriert, bis ein Abbruchkriterium erreicht ist.

StoppoptionTest beendenAusstiegsbedingung
MaxStallIterations und FunctionToleranceDie relative Änderung des besten Zielfunktionswerts g über die letzten MaxStallIterations Iterationen ist kleiner als FunctionTolerance.1
MaxIterationsDie Anzahl der Iterationen erreicht MaxIterations.0
OutputFcn oder PlotFcnOutputFcn oder PlotFcn können die Iterationen anhalten.-1
ObjectiveLimitDer beste Zielfunktionswert g ist kleiner als ObjectiveLimit.-3
MaxStallTimeDer beste Zielfunktionswert g hat sich in den letzten MaxStallTime Sekunden nicht geändert.-4
MaxTimeDie 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.

Siehe auch

Themen