Hauptinhalt

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

particleswarm

Partikelschwarmoptimierung

Beschreibung

x = particleswarm(fun,nvars) versucht, einen Vektor x zu finden, der ein lokales Minimum von fun erreicht. nvars ist die Dimension (Anzahl der Entwurfsvariablen) von fun.

Hinweis

Passing Extra Parameters erklärt, wie bei Bedarf zusätzliche Parameter an die Zielfunktion übergeben werden.

Beispiel

x = particleswarm(fun,nvars,lb,ub) definiert eine Reihe von Unter- und Obergrenzen für die Entwurfsvariablen x, sodass eine Lösung im Bereich lb x ub gefunden wird.

Beispiel

x = particleswarm(fun,nvars,lb,ub,options) minimiert, wobei die Standardoptimierungsparameter durch Werte in options ersetzt werden. Setzen Sie lb = [] und ub = [], wenn keine Grenzen vorhanden sind.

Beispiel

x = particleswarm(problem) findet das Minimum für problem, eine in problem beschriebene Struktur.

[x,fval,exitflag,output,points] = particleswarm(___) gibt außerdem Folgendes zurück, wobei eine der Eingabeargumentkombinationen aus den vorherigen Syntaxen verwendet wird:

  • fval, ein Skalar, der den Zielfunktionswert fun(x) darstellt

  • exitflag, ein Wert, der die Beendigungsbedingung beschreibt

  • output, eine Struktur, die Informationen über den Optimierungsprozess enthält

  • points, eine Struktur, die die endgültigen Schwarmpositionen in points.X und die zugehörigen Zielfunktionswerte in points.Fval enthält

Beispiel

Beispiele

alle reduzieren

Minimieren Sie eine einfache Funktion mit zwei Variablen.

Definieren Sie die Zielfunktion.

fun = @(x)x(1)*exp(-norm(x)^2);

Rufen Sie particleswarm auf, um die Funktion zu minimieren.

rng default  % For reproducibility
nvars = 2;
x = particleswarm(fun,nvars)
Optimization ended: relative change in the objective value 
over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.

x =

  629.4474  311.4814

Diese Lösung ist weit vom wahren Minimum entfernt, wie Sie in einem Funktionsdiagramm sehen können.

fsurf(@(x,y)x.*exp(-(x.^2+y.^2)))

Normalerweise ist es am besten, Grenzen zu setzen. Siehe Minimieren Sie eine einfache Funktion mit Grenzen.

Minimieren Sie eine einfache Funktion zweier Variablen mit gebundenen Einschränkungen.

Definieren Sie die Zielfunktion.

fun = @(x)x(1)*exp(-norm(x)^2);

Legen Sie Grenzen für die Variablen fest.

lb = [-10,-15];
ub = [15,20];

Rufen Sie particleswarm auf, um die Funktion zu minimieren.

rng default  % For reproducibility
nvars = 2;
x = particleswarm(fun,nvars,lb,ub)
Optimization ended: relative change in the objective value 
over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.
x = 1×2

   -0.7071   -0.0000

Verwenden Sie eine größere Population und eine Hybridfunktion, um eine bessere Lösung zu erhalten.

Geben Sie die Zielfunktion und die Grenzen an.

fun = @(x)x(1)*exp(-norm(x)^2);
lb = [-10,-15];
ub = [15,20];

Geben Sie die Optionen an.

options = optimoptions('particleswarm','SwarmSize',100,'HybridFcn',@fmincon);

Rufen Sie particleswarm auf, um die Funktion zu minimieren.

rng default  % For reproducibility
nvars = 2;
x = particleswarm(fun,nvars,lb,ub,options)
Optimization ended: relative change in the objective value 
over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.
x = 1×2

   -0.7071   -0.0000

Geben Sie die optionalen Ausgabeargumente zurück, um den Lösungsprozess detaillierter zu untersuchen.

Definieren Sie das Problem.

fun = @(x)x(1)*exp(-norm(x)^2);
lb = [-10,-15];
ub = [15,20];
options = optimoptions('particleswarm','SwarmSize',50,'HybridFcn',@fmincon);

Rufen Sie particleswarm mit allen Ausgaben auf, um die Funktion zu minimieren und Informationen zum Lösungsprozess zu erhalten.

rng default  % For reproducibility
nvars = 2;
[x,fval,exitflag,output,points] = particleswarm(fun,nvars,lb,ub,options)
Optimization ended: relative change in the objective value 
over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.
x = 1×2

   -0.7071   -0.0000

fval = -0.4289
exitflag = 1
output = struct with fields:
      rngstate: [1x1 struct]
    iterations: 43
     funccount: 2203
       message: 'Optimization ended: relative change in the objective value ...'
    hybridflag: 1

points = struct with fields:
       X: [50x2 double]
    Fval: [50x1 double]

Eingabeargumente

alle reduzieren

Zielfunktion, angegeben als Funktionshandle oder Funktionsname. Schreiben Sie die Zielfunktion so, dass sie einen Zeilenvektor der Länge nvars akzeptiert und einen Skalarwert zurückgibt.

Wenn die Option 'UseVectorized' true lautet, schreiben Sie fun, um eine popx-nvars-Matrix zu akzeptieren, wobei pop die aktuelle Populationsgröße ist. In diesem Fall gibt fun einen Vektor derselben Länge wie pop zurück, der die Werte der Fitnessfunktion enthält. Stellen Sie sicher, dass fun für pop keine bestimmte Größe annimmt, da particleswarm auch in einer vektorisierten Berechnung ein einzelnes Mitglied einer Population übergeben kann.

Beispiel: fun = @(x)(x-[4,2]).^2

Datentypen: char | function_handle | string

Anzahl der Variablen, angegeben als positive Ganzzahl. Der Solver übergibt Zeilenvektoren der Länge nvars bis fun.

Beispiel: 4

Datentypen: double

Untergrenzen, angegeben als reeller Vektor oder Array von Doubles. lb stellt die Untergrenzen elementweise in lb x ub dar.

Intern konvertiert particleswarm ein Array lb in den Vektor lb(:).

Beispiel: lb = [0;-Inf;4] bedeutet x(1) ≥ 0, x(3) ≥ 4.

Datentypen: double

Obergrenzen, angegeben als reeller Vektor oder Array von Doubles. ub stellt die Obergrenzen elementweise in lb x ub dar.

Intern konvertiert particleswarm ein Array ub in den Vektor ub(:).

Beispiel: ub = [Inf;4;10] bedeutet x(2) ≤ 4, x(3) ≤ 10.

Datentypen: double

Optionen für particleswarm, angegeben als Ausgabe der Funktion optimoptions.

In der optimoptions-Anzeige fehlen einige Optionen. Diese Optionen sind kursiv aufgeführt. Einzelheiten finden Sie unter View Optimization Options.

CreationFcn

Funktion, die den anfänglichen Schwarm erstellt. Geben Sie es als 'pswcreationuniform' oder als Funktionshandle an. Der Standardwert ist 'pswcreationuniform'. Siehe Swarm Creation.

Display

Anzeigeebene, die an die Befehlszeile zurückgegeben wird.

  • 'off' oder 'none' zeigt keine Ausgabe an.

  • 'final' zeigt nur die endgültige Ausgabe an (Standard).

  • 'iter' bietet eine iterative Anzeige.

DisplayIntervalIntervall für die iterative Anzeige. Die iterative Anzeige druckt für jede DisplayInterval-Iteration eine Zeile. Der Standardwert ist 1.
FunctionToleranceNichtnegativer Skalar mit Standard 1e-6. Iterationen enden, wenn die relative Änderung des besten Zielfunktionswerts über die letzten MaxStallIterations Iterationen kleiner als options.FunctionTolerance ist.
FunValCheck

Überprüfen Sie, ob die Werte der Zielfunktion und Einschränkungen gültig sind. 'on' zeigt einen Fehler an, wenn die Zielfunktion oder Einschränkungen einen komplexen, Inf oder NaN Wert zurückgeben. Der Standardwert 'off' zeigt keinen Fehler an.

HybridFcn

Funktion, die die Optimierung fortsetzt, nachdem particleswarm beendet wurde. Geben Sie es als Namen oder als Funktionshandle an. Mögliche Werte:

  • 'fmincon'

  • 'fminsearch'

  • 'fminunc'

  • 'patternsearch'

Kann auch ein Zellenarray sein, das die Hybridfunktion und ihre Optionen angibt, z. B. {@fmincon,fminconopts}. Der Standardwert ist []. Siehe Hybrid Function.

Siehe Wann wird eine Hybridfunktion verwendet?.

InertiaRangeZweielementiger reeller Vektor mit gleichen Vorzeichenwerten in aufsteigender Reihenfolge. Gibt die Unter- und Obergrenze der adaptiven Trägheit an. Um eine konstante (nicht adaptive) Trägheit zu erhalten, setzen Sie beide Elemente von InertiaRange auf den gleichen Wert. Der Standardwert ist [0.1,1.1]. Siehe Algorithmus zur Partikelschwarmoptimierung.
InitialPoints

Anfangspopulation oder Teilpopulation von Partikeln, angegeben als Matrix oder Struktur.

  • Eine Matrix hat die Größe M-mal-nvars. Jede Reihe stellt ein Teilchen dar. Wenn M < SwarmSize, dann erzeugt particleswarm weitere Partikel, sodass die Gesamtzahl SwarmSize beträgt. Wenn M > SwarmSize, dann verwendet particleswarm die ersten SwarmSize Zeilen.

  • Eine Struktur muss das Feld X haben, das die Matrix der Anfangspunkte darstellt.

  • Wenn die Struktur mehr als ein Feld hat, muss die Struktur das Feld Fval enthalten, das einen Vektor von Zielfunktionswerten für die Punkte InitialPoints.X enthält.

InitialSwarmSpan

Anfänglicher Bereich der von @pswcreationuniform erstellten Partikelpositionen. Kann ein positiver Skalar oder ein Vektor mit nvars Elementen sein, wobei nvars die Anzahl der Variablen ist. Der Bereich für jede Partikelkomponente beträgt -InitialSwarmSpan/2,InitialSwarmSpan/2 und wird bei Bedarf verschoben und skaliert, um allen Grenzen zu entsprechen. Der Standardwert ist 2000.

InitialSwarmSpan beeinflusst auch den Bereich der anfänglichen Partikelgeschwindigkeiten. Siehe Initialisierung.

MaxIterationsMaximale Anzahl an Iterationen, die particleswarm benötigt. Der Standardwert ist 200*nvars, wobei nvars die Anzahl der Variablen ist.
MaxStallIterationsPositive Ganzzahl mit Standard 20. Iterationen enden, wenn die relative Änderung des besten Zielfunktionswerts über die letzten MaxStallIterations Iterationen kleiner als options.FunctionTolerance ist.
MaxStallTimeMaximale Anzahl von Sekunden ohne Verbesserung des besten bekannten Zielfunktionswerts. Positiver Skalar mit Standard Inf.
MaxTimeMaximale Zeit in Sekunden, die particleswarm ausgeführt wird. Der Standardwert ist Inf.
MinNeighborsFractionMinimale adaptive Nachbarschaftsgröße, ein Skalar von 0 bis 1. Der Standardwert ist 0.25. Siehe Algorithmus zur Partikelschwarmoptimierung.
ObjectiveLimitMindestzielwert, ein Abbruchkriterium. Skalar, mit Standard -Inf.
OutputFcnFunktionshandle oder Zellenarray von Funktionshandles. Ausgabefunktionen können iterative Daten lesen und den Solver stoppen. Der Standardwert ist []. Siehe Output Function and Plot Function.
PlotFcnFunktionsname, Funktionshandle oder Zellenarray von Funktionshandles. Übergeben Sie Funktionshandles für benutzerdefinierte Plotfunktionen. Plotfunktionen können iterative Daten lesen, jede Iteration plotten und den Solver stoppen. Der Standardwert ist []. Verfügbare integrierte Plotfunktion: 'pswplotbestf'. Siehe Output Function and Plot Function.
SelfAdjustmentWeightGewichtung der besten Position jedes Partikels bei der Anpassung der Geschwindigkeit. Endlicher Skalar mit Standard 1.49. Siehe Algorithmus zur Partikelschwarmoptimierung.
SocialAdjustmentWeightGewichtung der besten Position der Nachbarschaft bei der Anpassung der Geschwindigkeit. Endlicher Skalar mit Standard 1.49. Siehe Algorithmus zur Partikelschwarmoptimierung.
SwarmSizeAnzahl der Partikel im Schwarm, eine Ganzzahl größer als 1. Der Standardwert ist min(100,10*nvars), wobei nvars die Anzahl der Variablen ist.
UseParallelBerechnen Sie die Zielfunktion parallel, wenn true. Der Standardwert ist false. Siehe Parallel or Vectorized Function Evaluation.
UseVectorizedBerechnen Sie die Zielfunktion vektorisiert, wenn true. Der Standardwert ist false. Siehe Parallel or Vectorized Function Evaluation.

Optimierungsproblem, angegeben als Struktur mit folgenden Feldern.

solver'particleswarm'
objectiveFunktionshandle zur Zielfunktion oder Name der Zielfunktion.
nvarsAnzahl der Variablen im Problem.
lbVektor oder Array von Untergrenzen.
ubVektor oder Array von Obergrenzen.
optionsVon optimoptions erstellte Optionen.
rngstateOptionaler Zustand des Zufallszahlengenerators zu Beginn des Lösungsprozesses.

Datentypen: struct

Ausgabeargumente

alle reduzieren

Lösung, zurückgegeben als reeller Vektor, der die Zielfunktion unter Berücksichtigung aller gebundenen Einschränkungen minimiert.

Zielwert, zurückgegeben als reeller Skalar fun(x).

Bedingung zum Stoppen des Algorithmus, zurückgegeben als Ganzzahl, die den Grund für das Stoppen des Algorithmus angibt. Nachfolgend sind die Werte von exitflag und die entsprechenden Gründe für den Stopp von particleswarm aufgeführt.

1

Die relative Änderung des Zielwerts über die letzten options.MaxStallIterations Iterationen ist geringer als options.FunctionTolerance.

0

Anzahl der Iterationen hat options.MaxIterations überschritten.

-1

Iterationen werden durch die Ausgabefunktion oder Plotfunktion gestoppt.

-2

Grenzen sind inkonsistent: für einige i, lb(i) > ub(i).

-3

Der beste Zielfunktionswert liegt unter options.ObjectiveLimit.

-4

Der beste Zielfunktionswert hat sich innerhalb von options.MaxStallTime Sekunden nicht geändert.

-5

Die Laufzeit hat options.MaxTime Sekunden überschritten.

Zusammenfassung des Lösungsprozesses, zurückgegeben als Struktur mit Informationen zum Optimierungsprozess.

iterations

Anzahl der Solveriterationen

funccount

Anzahl der Zielfunktionsauswertungen.

message

Grund, warum der Algorithmus gestoppt wurde.

hybridflag

Exit-Flag der Hybridfunktion. Bezieht sich auf HybridFcn options.

rngstate

Zustand des Standard-Zufallszahlengenerators unmittelbar vor dem Start des Algorithmus.

Endgültige Schwarmpositionen und Zielfunktionswerte, zurückgegeben als Struktur mit diesen Feldern:

  • X – Positionen des letzten Schwarms, zurückgegeben als Matrix. Jede Zeile der Matrix stellt einen Punkt dar.

  • Fval – Zielfunktionswerte des endgültigen Schwarms. Für jedes i ein Index eines Mitglieds des endgültigen Schwarms, points.Fval(i) = fun(points.X(i)).

Um eine Optimierung fortzusetzen, können Sie points als Option InitialPoints übergeben. Dieser Ansatz ist jedoch nicht dasselbe wie das Ausführen einer Optimierung über einen längeren Zeitraum von Anfang an, da viele Aspekte des Algorithmus nicht identisch sind, wenn die Optimierung von einer endgültigen Population aus neu gestartet wird. Siehe Algorithmus zur Partikelschwarmoptimierung.

Datentypen: struct

Einschränkungen

  • Die problembasierte Aufgabe Optimieren des Live-Editors unterstützt derzeit nicht die Angabe mehrerer Anfangspunkte oder anfänglicher Zielfunktionswerte. Um Anfangspunkte festzulegen, verwenden Sie die Solver-basierte Aufgabe oder die Befehlszeile.

Algorithmen

Eine Beschreibung des Algorithmus zur Partikelschwarmoptimierung finden Sie unter Algorithmus zur Partikelschwarmoptimierung.

Alternative Funktionalität

App

Die Aufgabe Live-Editor optimieren bietet eine visuelle Schnittstelle für particleswarm.

Erweiterte Fähigkeiten

alle erweitern

Versionsverlauf

Eingeführt in R2014b

alle erweitern