Hauptinhalt

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

simulannealbnd

Finden Sie das Minimum der Funktion mithilfe des Simulated-Annealing-Algorithmus

Beschreibung

x = simulannealbnd(fun,x0) findet ein lokales Minimum, x, für den Funktionshandle fun, der die Werte der Zielfunktion berechnet. x0 ist ein Anfangspunkt für den Simulated-Annealing-Algorithmus, ein reeller Vektor.

Hinweis

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

Beispiel

x = simulannealbnd(fun,x0,lb,ub) definiert eine Reihe von Unter- und Obergrenzen für die Entwurfsvariablen in x, sodass die Lösung immer im Bereich lb x ub liegt. Wenn x(i) unten unbegrenzt ist, setzen Sie lb(i) = -Inf, und wenn x(i) oben unbegrenzt ist, setzen Sie ub(i) = Inf.

Beispiel

x = simulannealbnd(fun,x0,lb,ub,options) minimiert mit den in options angegebenen Optimierungsoptionen. Erstellen Sie options mit optimoptions. Wenn keine Grenzen vorhanden sind, legen Sie lb = [] und/oder ub = [] fest.

Beispiel

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

[x,fval] = simulannealbnd(___) gibt bei beliebiger Syntax den Wert der Zielfunktion fun bei der Lösung x zurück.

[x,fval,exitflag,output] = simulannealbnd(___) gibt zusätzlich einen Wert exitflag zurück, der die Beendigungsbedingung von simulannealbnd beschreibt, und eine Struktur output mit Informationen zum Optimierungsprozess.

Beispiel

Beispiele

alle reduzieren

Minimieren Sie De Jongs fünfte Funktion, eine zweidimensionale Funktion mit vielen lokalen Minima. Diese Funktion ist verfügbar, wenn Sie dieses Beispiel ausführen.

Plot De Jongs fünfte Funktion.

dejong5fcn

Minimieren Sie die fünfte Funktion von De Jong mit simulannealbnd, ausgehend vom Punkt [0,0].

fun = @dejong5fcn;
x0 = [0 0];
x = simulannealbnd(fun,x0)
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x = 1×2

  -32.0285   -0.1280

Der simulannealbnd-Algorithmus verwendet den Zufallszahlenstrom MATLAB®, daher erhalten Sie möglicherweise ein anderes Ergebnis.

Minimieren Sie De Jongs fünfte Funktion innerhalb eines begrenzten Bereichs. Diese Funktion ist verfügbar, wenn Sie dieses Beispiel ausführen.

Plot De Jongs fünfte Funktion.

dejong5fcn

Starten Sie simulannealbnd ab dem Punkt [0,0] und legen Sie für jede Komponente eine Untergrenze von -64 und eine Obergrenze von 64 fest.

fun = @dejong5fcn;
x0 = [0 0];
lb = [-64 -64];
ub = [64 64];
x = simulannealbnd(fun,x0,lb,ub)
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x = 1×2

  -15.9790  -31.9593

Der simulannealbnd-Algorithmus verwendet den Zufallszahlenstrom MATLAB®, daher erhalten Sie möglicherweise ein anderes Ergebnis.

Beobachten Sie den Fortschritt von simulannealbnd, indem Sie Optionen zum Verwenden einiger Plotfunktionen festlegen.

Legen Sie die Optionen für das simulierte Abkühlen fest, um mehrere Plotfunktionen zu verwenden.

options = optimoptions('simulannealbnd','PlotFcns',...
          {@saplotbestx,@saplotbestf,@saplotx,@saplotf});

Starten Sie simulannealbnd ab dem Punkt [0,0] und legen Sie für jede Komponente eine Untergrenze von -64 und eine Obergrenze von 64 fest. Minimieren Sie dejong5fcn, das verfügbar ist, wenn Sie dieses Beispiel ausführen.

rng default % For reproducibility
fun = @dejong5fcn;
x0 = [0,0];
lb = [-64,-64];
ub = [64,64];
x = simulannealbnd(fun,x0,lb,ub,options)

simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x = 1×2

  -15.9790  -31.9593

Erhalten Sie alle Ausgaben einer Simulated-Annealing-Minimierung.

Zeichnen Sie die fünfte Funktion von De Jong auf, die verfügbar ist, wenn Sie dieses Beispiel ausführen.

dejong5fcn

Starten Sie simulannealbnd ab dem Punkt [0,0] und legen Sie für jede Komponente eine Untergrenze von -64 und eine Obergrenze von 64 fest.

fun = @dejong5fcn;
x0 = [0,0];
lb = [-64,-64];
ub = [64,64];
[x,fval,exitflag,output] = simulannealbnd(fun,x0,lb,ub)
simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.
x = 1×2

  -15.9790  -31.9593

fval = 1.9920
exitflag = 1
output = struct with fields:
     iterations: 1762
      funccount: 1779
        message: 'simulannealbnd stopped because the change in best function value is less than options.FunctionTolerance.'
       rngstate: [1x1 struct]
    problemtype: 'boundconstraints'
    temperature: [2x1 double]
      totaltime: 0.9858

Der simulannealbnd-Algorithmus verwendet den Zufallszahlenstrom MATLAB®, daher erhalten Sie möglicherweise ein anderes Ergebnis.

Eingabeargumente

alle reduzieren

Zu minimierende Funktion, angegeben als Funktionshandle oder Funktionsname. fun ist eine Funktion, die einen Vektor x akzeptiert und einen reellen Skalar f zurückgibt, die bei x ausgewertete Zielfunktion.

fun kann als Funktionshandle für eine Datei angegeben werden:

x = simulannealbnd(@myfun,x0)

wobei myfun eine MATLAB®-Funktion ist, wie etwa

function f = myfun(x)
f = ...            % Compute function value at x

fun kann auch ein Funktionshandle für eine anonyme Funktion sein:

x = simulannealbnd(@(x)norm(x)^2,x0,lb,ub);

Beispiel: fun = @(x)sin(x(1))*cos(x(2))

Datentypen: char | function_handle | string

Anfangspunkt, angegeben als reeller Vektor. simulannealbnd verwendet die Anzahl der Elemente in x0, um die Anzahl der Variablen zu bestimmen, die fun akzeptiert.

Beispiel: x0 = [1,2,3,4]

Datentypen: double

Untergrenzen, angegeben als reeller Vektor oder reelles Array. Wenn die Anzahl der Elemente in x0 gleich der von lb ist, dann gibt lb an, dass

x(i) >= lb(i) für alle i.

Wenn numel(lb) < numel(x0), dann gibt lb an, dass

x(i) >= lb(i) für 1 <= i <= numel(lb).

In diesem Fall geben die Löser eine Warnung aus.

Beispiel: Um anzugeben, dass alle Kontrollvariablen positiv sind, lb = zeros(size(x0))

Datentypen: double

Obergrenzen, angegeben als reeller Vektor oder reelles Array. Wenn die Anzahl der Elemente in x0 gleich der von ub ist, dann gibt ub an, dass

x(i) <= ub(i) für alle i.

Wenn numel(ub) < numel(x0), dann gibt ub an, dass

x(i) <= ub(i) für 1 <= i <= numel(ub).

In diesem Fall geben die Löser eine Warnung aus.

Beispiel: Um anzugeben, dass alle Kontrollvariablen kleiner als eins sind, ub = ones(size(x0))

Datentypen: double

Optimierungsoptionen, angegeben als ein von optimoptions zurückgegebenes Objekt oder eine Struktur. Einzelheiten finden Sie unter Simulated Annealing Options.

optimoptions verbirgt die kursiv aufgeführten Optionen; siehe Options that optimoptions Hides.

{} bezeichnet den Standardwert. Siehe Optionsdetails in Simulated Annealing Options.

OptionBeschreibungWerte

AcceptanceFcn

Funktion, die der Algorithmus verwendet, um zu bestimmen, ob ein neuer Punkt akzeptiert wird. Geben Sie es als 'acceptancesa' oder als Funktionshandle an.

Funktionshandle | {'acceptancesa'}

AnnealingFcn

Funktion, die der Algorithmus zum Generieren neuer Punkte verwendet. Geben Sie als Namen eine integrierte Annealing-Funktion oder einen Funktions-Handle an.

Funktionshandle | Funktionsname | 'annealingboltz' | {'annealingfast'}

DataType

Art der Entscheidungsvariablen

'custom' | {'double'}

Display

Anzeigeebene

'off' | 'iter' | 'diagnose' | {'final'}

DisplayInterval

Intervall für iterative Anzeige

Positive Ganzzahl | {10}

FunctionTolerance

Abbruchtoleranz für Funktionswerte

Verwenden Sie für eine Optionsstruktur TolFun.

Nichtnegativer Skalar | {1e-6}

HybridFcn

Führen Sie HybridFcn (eine andere Optimierungsfunktion) automatisch während oder am Ende der Iterationen des Solvers aus. Geben Sie es als Namen oder als Funktionshandle an.

Siehe Wann wird eine Hybridfunktion verwendet?.

'fminsearch' | 'patternsearch' | 'fminunc' | 'fmincon' | {[]}

oder

1 x 2 Zellen-Array | {@solver, hybridoptions}, wobei solver = fminsearch, patternsearch, fminunc oder fmincon {[]}

HybridIntervall

Intervall (wenn nicht 'end' oder 'never'), in dem HybridFcn aufgerufen wird

Positive ganze Zahl | 'never' | {'end'}

InitialTemperature

Anfangswert der Temperatur

Nichtnegativer Skalar | positiver Vektor | {100}

MaxFunctionEvaluations

Maximal zulässige Anzahl von Zielfunktionsauswertungen

Verwenden Sie für eine Optionsstruktur MaxFunEvals.

Nichtnegative Ganzzahl | {3000*numberOfVariables}

MaxIterations

Maximal zulässige Anzahl an Iterationen

Verwenden Sie für eine Optionsstruktur MaxIter.

Nichtnegative Ganzzahl | {Inf}

MaxStallIterations

Anzahl der Iterationen, bei denen die durchschnittliche Änderung des Fitnessfunktionswerts am aktuellen Punkt kleiner als options.FunctionTolerance ist

Verwenden Sie für eine Optionsstruktur StallIterLimit.

Nichtnegative Ganzzahl | {500*numberOfVariables}

MaxTime

Der Algorithmus stoppt nach MaxTime Sekunden

Verwenden Sie für eine Optionsstruktur TimeLimit.

Nichtnegativer Skalar | {Inf}

ObjectiveLimit

Gewünschter minimaler Zielfunktionswert

Skalar | {-Inf}

OutputFcn

Funktion(en) erhalten iterativ Daten und können Optionen zur Laufzeit ändern

Verwenden Sie für eine Optionsstruktur OutputFcns.

Funktionshandle | Zellenarray von Funktionshandles | {[]}

PlotFcn

Während der Iterationen aufgerufene Plotfunktion(en)

Verwenden Sie für eine Optionsstruktur PlotFcns.

Funktionshandle | Name der integrierten Plotfunktion | Zellen-Array mit Funktionshandles | Zellen-Array mit Namen der integrierten Plotfunktionen | 'saplotbestf' | 'saplotbestx' | 'saplotf' | 'saplotstopping' | 'saplottemperature' | {[]}

PlotIntervall

Plotfunktionen werden in jedem Intervall aufgerufen

Positive Ganzzahl | {1}

ReannealInterval

Reannealing-Intervall

Nichtnegative Ganzzahl | {100}

TemperatureFcn

Funktion zum Aktualisieren des Temperaturplans

Funktionshandle | Name der integrierten Temperaturfunktion | 'temperatureboltz' | 'temperaturefast' | {'temperatureexp'}

Beispiel: options = optimoptions(@simulannealbnd,'MaxIterations',150)

Datentypen: struct

Problemstruktur, angegeben als Struktur mit folgenden Feldern:

  • objective – Zielfunktion

  • x0 — Ausgangspunkt

  • lb – Untergrenze für x

  • ub – Obergrenze für x

  • solver'simulannealbnd'

  • options — Mit optimoptions oder einer Optionsstruktur erstellte Optionen

  • rngstate — Optionales Feld zum Zurücksetzen des Status des Zufallszahlengenerators

Hinweis

problem muss alle oben angegebenen Felder enthalten.

Datentypen: struct

Ausgabeargumente

alle reduzieren

Lösung, zurückgegeben als reeller Vektor. Die Größe von x ist dieselbe wie die Größe von x0. Normalerweise ist x eine lokale Lösung des Problems, wenn exitflag positiv ist.

Zielfunktionswert bei der Lösung, zurückgegeben als reelle Zahl. Im Allgemeinen ist fval = fun(x).

Grund: simulannealbnd wurde gestoppt, als Ganzzahl zurückgegeben.

AusstiegsbedingungBedeutung
1

Die durchschnittliche Änderung des Werts der Zielfunktion über options.MaxStallIterations Iterationen ist geringer als options.FunctionTolerance.

5

Der Zielfunktionswert ist kleiner als options.ObjectiveLimit.

0

Maximale Anzahl von Funktionsauswertungen oder Iterationen erreicht.

-1

Optimierung durch eine Ausgabefunktion oder Plotfunktion beendet.

-2

Kein durchführbarer Punkt gefunden.

-5

Zeitlimit überschritten.

Informationen zum Optimierungsprozess, zurückgegeben als Struktur mit den Feldern:

  • problemtype — Problemtyp: uneingeschränkt oder gebunden eingeschränkt.

  • iterations – Die Anzahl der berechneten Iterationen.

  • funccount – Die Anzahl der Auswertungen der Zielfunktion.

  • message – Der Grund, warum der Algorithmus beendet wurde.

  • temperature – Temperatur, als der Solver beendet wurde.

  • totaltime – Gesamtlaufzeit des Solvers.

  • rngstate – Zustand des MATLAB-Zufallszahlengenerators, unmittelbar vor dem Start des Algorithmus. Sie können die Werte in rngstate verwenden, um die Ausgabe von simulannealbnd zu reproduzieren. Siehe Reproduce Your Results.

Alternative Funktionalität

App

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

Versionsverlauf

Eingeführt in R2007a