Optimieren mit Partikelschwarm
Dieses Beispiel zeigt, wie mit dem particleswarm-Solver optimiert wird.
Die Zielfunktion in diesem Beispiel ist die fünfte Funktion von De Jong, die verfügbar ist, wenn Sie dieses Beispiel ausführen.
dejong5fcn

Diese Funktion hat 25 lokale Minima.
Versuchen Sie, das Minimum der Funktion mit den Standardeinstellungen particleswarm zu finden.
fun = @dejong5fcn; nvars = 2; rng default % For reproducibility [x,fval,exitflag] = particleswarm(fun,nvars)
Optimization ended: relative change in the objective value over the last OPTIONS.MaxStallIterations iterations is less than OPTIONS.FunctionTolerance.
x = 1×2
-31.9521 -16.0176
fval = 5.9288
exitflag = 1
Ist die Lösung x das globale Optimum? Das ist zum jetzigen Zeitpunkt unklar. Ein Blick auf das Funktionsdiagramm zeigt, dass die Funktion lokale Minima für Komponenten im Bereich [-50,50] hat. Daher hilft die Beschränkung des Variablenbereichs auf [-50,50] dem Löser dabei, ein globales Minimum zu finden.
lb = [-50;-50]; ub = -lb; [x,fval,exitflag] = 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
-16.0079 -31.9697
fval = 1.9920
exitflag = 1
Das sieht vielversprechend aus: Die neue Lösung hat einen niedrigeren fval als die vorherige. Aber ist x wirklich eine globale Lösung? Versuchen Sie die Minimierung erneut mit mehr Partikeln, um die Region besser durchsuchen zu können.
options = optimoptions('particleswarm','SwarmSize',100); [x,fval,exitflag] = 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
-31.9781 -31.9784
fval = 0.9980
exitflag = 1
Das sieht noch vielversprechender aus. Aber ist diese Antwort eine globale Lösung und wie genau ist sie? Führen Sie den Solver mit einer Hybridfunktion erneut aus. particleswarm ruft die Hybridfunktion auf, nachdem particleswarm seine Iterationen abgeschlossen hat.
options.HybridFcn = @fmincon; [x,fval,exitflag] = 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
-31.9783 -31.9784
fval = 0.9980
exitflag = 1
particleswarm hat im Wesentlichen die gleiche Lösung wie zuvor gefunden. Dies gibt Ihnen eine gewisse Sicherheit, dass particleswarm ein lokales Minimum meldet und dass das endgültige x die globale Lösung ist.