Hauptinhalt

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

GlobalSearch

Globales Minimum finden

Beschreibung

Ein GlobalSearch-Objekt enthält Eigenschaften (Optionen), die beeinflussen, wie run wiederholt einen lokalen Solver ausführt, um ein GlobalOptimSolution-Objekt zu generieren. Beim Ausführen versucht der Solver, eine Lösung mit dem niedrigsten Zielfunktionswert zu finden.

Erstellung

Beschreibung

gs = GlobalSearch erstellt gs, einen GlobalSearch-Solver, dessen Eigenschaften auf die Standardwerte eingestellt sind.

Beispiel

gs = GlobalSearch(Name,Value) legt Eigenschaften mithilfe von Name-Wert-Paaren fest.

Beispiel

gs = GlobalSearch(oldGS,Name,Value) erstellt eine Kopie des oldGS GlobalSearch-Solvers und legt Eigenschaften mithilfe von Name-Wert-Paaren fest.

Beispiel

gs = GlobalSearch(ms) erstellt gs, einen GlobalSearch-Solver, mit gemeinsamen Eigenschaftswerten aus dem ms MultiStart-Solver.

Beispiel

Eigenschaften

alle erweitern

Faktor zur Verringerung des Beckenradius, angegeben als Skalar von 0 bis 1. Der Radius eines Beckens verringert sich, nachdem MaxWaitCycle aufeinanderfolgende Startpunkte innerhalb des Beckens liegen. Der Beckenradius verringert sich um den Faktor 1 – BasinRadiusFactor.

Setzen Sie BasinRadiusFactor auf 0, um Aktualisierungen des Beckenradius zu deaktivieren.

Beispiel: 0.5

Datentypen: double

Anzeigeebene für das Befehlsfenster, angegeben als einer der folgenden Zeichenvektoren oder Zeichenfolgen:

  • 'final' – Berichten Sie die zusammenfassenden Ergebnisse, nachdem run fertig ist.

  • 'iter' – Berichten Sie die Ergebnisse nach dem ersten fmincon-Lauf, nach Phase 1, nach jeweils 200 Startpunkten und nach jedem Lauf von fmincon, zusätzlich zur abschließenden Zusammenfassung.

  • 'off' – Keine Anzeige.

Beispiel: 'iter'

Datentypen: char | string

Multiplikator zur Bestimmung, ob sich ein Testpunkt in einem vorhandenen Anziehungsbecken befindet, angegeben als nicht negativer Skalar. Einzelheiten finden Sie unter Examine Stage 2 Trial Point to See if fmincon Runs.

Beispiel: 0.5

Datentypen: double

Toleranz für Funktionswerte zur Betrachtung gleicher Lösungen, angegeben als nicht negativer Skalar. Löser betrachten zwei Lösungen als identisch, wenn sie innerhalb einer relativen Distanz von XTolerance zueinander liegen und die Zielfunktionswerte innerhalb einer relativen Differenz von FunctionTolerance zueinander liegen. Wenn beide Bedingungen nicht erfüllt sind, melden die Löser die Lösungen als unterschiedlich. Setzen Sie FunctionTolerance auf 0, um die Ergebnisse jedes lokalen Solver-Laufs zu erhalten. Setzen Sie FunctionTolerance auf einen größeren Wert, um weniger Ergebnisse zu erhalten. Weitere Einzelheiten zu GlobalSearch finden Sie unter Update Solution Set in When fmincon Runs. Weitere Einzelheiten zu MultiStart finden Sie unter Create GlobalOptimSolution Object.

Beispiel: 1e-4

Datentypen: double

Maximale Zeit in Sekunden, die GlobalSearch ausgeführt wird, angegeben als positiver Skalar. GlobalSearch und seine lokalen Solver werden angehalten, wenn seit dem Beginn des Laufs MaxTime Sekunden vergangen sind, gemessen mit tic und toc.

MaxTime unterbricht lokale Solver während eines Laufs nicht, daher kann die Gesamtzeit MaxTime überschreiten.

Beispiel: 180 stoppt den Solver, wenn ein lokaler Solver-Aufruf nach 180 Sekunden zum ersten Mal beendet wird.

Datentypen: double

Algorithmus-Steuerungsparameter, angegeben als positive Ganzzahl.

  • Wenn die beobachtete Straffunktion von MaxWaitCycle aufeinanderfolgenden Testpunkten mindestens der Strafschwelle entspricht, erhöhen Sie die Strafschwelle (siehe PenaltyThresholdFactor).

  • Wenn sich MaxWaitCycle aufeinanderfolgende Testpunkte in einem Becken befinden, aktualisieren Sie den Radius dieses Beckens (siehe BasinRadiusFactor).

Beispiel: 40

Datentypen: double

Anzahl der Punkte der Stufe 1, angegeben als positive Ganzzahl. Einzelheiten finden Sie unter Obtain Stage 1 Start Point, Run.

Beispiel: 1000

Datentypen: double

Anzahl der möglichen Startpunkte, angegeben als positive Ganzzahl.

Beispiel: 3e4

Datentypen: double

Bericht über den Solver-Fortschritt oder den Solver-Stopp, angegeben als Funktions-Handle oder Zellen-Array von Funktions-Handles. Ausgabefunktionen werden nach jedem lokalen Solver-Aufruf ausgeführt. Sie werden auch ausgeführt, wenn der globale Solver gestartet und beendet wird. Schreiben Sie Ausgabefunktionen mit der in OutputFcn beschriebenen Syntax. Siehe Custom GlobalSearch Output Function.

Die integrierte @savelocalsolutions-Ausgabefunktion speichert alle lokalen Lösungen in der Variable localSolTable im Basisarbeitsbereich. Diese Ausgabefunktion speichert sowohl die nicht realisierbaren lokalen Lösungen als auch die realisierbaren lokalen Lösungen. Ein Beispiel finden Sie unter Collect All Local Solutions.

Datentypen: cell | function_handle

Erhöhung der Strafschwelle, angegeben als positiver Skalar. Einzelheiten hierzu finden Sie unter Auf große Zählerwerte reagieren.

Beispiel: 0.4

Datentypen: double

Plot-Solver-Fortschritt, angegeben als Funktions-Handle oder Zellen-Array von Funktions-Handles. Plotfunktionen werden nach jedem lokalen Solver-Aufruf ausgeführt. Sie werden auch ausgeführt, wenn der globale Solver gestartet und beendet wird. Schreiben Sie Plotfunktionen mit der in OutputFcn beschriebenen Syntax.

Es gibt zwei integrierte Plotfunktionen:

  • @gsplotbestf stellt den besten Zielfunktionswert dar.

  • @gsplotfunccount stellt die Anzahl der Funktionsauswertungen dar.

Siehe MultiStart Plot Function.

Beispiel: @gsplotbestf

Datentypen: cell | function_handle

Zu laufende Startpunkte, angegeben als:

  • 'all' — Alle Startpunkte ausführen.

  • 'bounds' – Führen Sie nur Startpunkte aus, die die Grenzen einhalten.

  • 'bounds-ineqs' – Führen Sie nur Startpunkte aus, die Grenzwerte und Ungleichheitsbeschränkungen erfüllen.

GlobalSearch überprüft die StartPointsToRun-Eigenschaft nur während Phase 2 des GlobalSearch-Algorithmus (der Hauptschleife). Weitere Informationen finden Sie unter GlobalSearch Algorithm.

Beispiel: 'bounds' führt nur Punkte aus, die alle Grenzen erfüllen.

Datentypen: char | string

Distanztoleranz für die Betrachtung gleicher Lösungen, angegeben als nicht negativer Skalar. Löser betrachten zwei Lösungen als identisch, wenn sie innerhalb einer relativen Distanz von XTolerance zueinander liegen und die Zielfunktionswerte innerhalb einer relativen Differenz von FunctionTolerance zueinander liegen. Wenn beide Bedingungen nicht erfüllt sind, melden die Löser die Lösungen als unterschiedlich. Setzen Sie XTolerance auf 0, um die Ergebnisse jedes lokalen Solver-Laufs zu erhalten. Setzen Sie XTolerance auf einen größeren Wert, um weniger Ergebnisse zu erhalten. Weitere Einzelheiten zu GlobalSearch finden Sie unter Update Solution Set in When fmincon Runs. Weitere Einzelheiten zu MultiStart finden Sie unter Create GlobalOptimSolution Object.

Beispiel: 2e-4

Datentypen: double

Objektfunktionen

runRun multiple-start solver

Beispiele

alle reduzieren

Erstellen Sie ein Optimierungsproblem mit mehreren lokalen Minima und versuchen Sie, das globale Minimum mit GlobalSearch zu finden. Das Ziel ist das Sechshöcker-Kamelrückenproblem (siehe Run the Solver).

rng default % For reproducibility
gs = GlobalSearch;
sixmin = @(x)(4*x(1)^2 - 2.1*x(1)^4 + x(1)^6/3 ...
    + x(1)*x(2) - 4*x(2)^2 + 4*x(2)^4);
problem = createOptimProblem('fmincon','x0',[-1,2],...
    'objective',sixmin,'lb',[-3,-3],'ub',[3,3]);
x = run(gs,problem)
GlobalSearch stopped because it analyzed all the trial points.

All 8 local solver runs converged with a positive local solver exit flag.
x = 1×2

   -0.0898    0.7127

Sie können den Zielfunktionswert bei x anfordern, wenn Sie run aufrufen, indem Sie die folgende Syntax verwenden:

[x,fval] = run(gs,problem)

Wenn Sie jedoch vergessen haben, fval anzufordern, können Sie den Zielfunktionswert trotzdem bei x berechnen.

fval = sixmin(x)
fval = -1.0316

Betrachten Sie eine Funktion mit mehreren lokalen Minima.

fun = @(x) x.^2 + 4*sin(5*x);
fplot(fun,[-5,5])

Um nach dem globalen Minimum zu suchen, führen Sie GlobalSearch mit dem fmincon 'sqp'-Algorithmus aus.

rng default % For reproducibility
opts = optimoptions(@fmincon,'Algorithm','sqp');
problem = createOptimProblem('fmincon','objective',...
    fun,'x0',3,'lb',-5,'ub',5,'options',opts);
gs = GlobalSearch;
[x,f] = run(gs,problem)
GlobalSearch stopped because it analyzed all the trial points.

All 23 local solver runs converged with a positive local solver exit flag.
x = -0.3080
f = -3.9032

Erstellen Sie ein nicht standardmäßiges MultiStart-Objekt.

ms = MultiStart('FunctionTolerance',2e-4,'UseParallel',true)
ms = 
  MultiStart with properties:

          UseParallel: 1
              Display: 'final'
    FunctionTolerance: 2.0000e-04
              MaxTime: Inf
            OutputFcn: []
              PlotFcn: []
     StartPointsToRun: 'all'
           XTolerance: 1.0000e-06

Erstellen Sie ein GlobalSearch-Objekt, das die verfügbaren Eigenschaften von ms verwendet.

gs = GlobalSearch(ms)
gs = 
  GlobalSearch with properties:

             NumTrialPoints: 1000
          BasinRadiusFactor: 0.2000
    DistanceThresholdFactor: 0.7500
               MaxWaitCycle: 20
          NumStageOnePoints: 200
     PenaltyThresholdFactor: 0.2000
                    Display: 'final'
          FunctionTolerance: 2.0000e-04
                    MaxTime: Inf
                  OutputFcn: []
                    PlotFcn: []
           StartPointsToRun: 'all'
                 XTolerance: 1.0000e-06

gs hat den gleichen nicht standardmäßigen Wert FunctionTolerance wie ms. Aber gs verwendet die UseParallel-Eigenschaft nicht.

Erstellen Sie ein GlobalSearch-Objekt mit einem FunctionTolerance von 1e-4.

gs = GlobalSearch('FunctionTolerance',1e-4)
gs = 
  GlobalSearch with properties:

             NumTrialPoints: 1000
          BasinRadiusFactor: 0.2000
    DistanceThresholdFactor: 0.7500
               MaxWaitCycle: 20
          NumStageOnePoints: 200
     PenaltyThresholdFactor: 0.2000
                    Display: 'final'
          FunctionTolerance: 1.0000e-04
                    MaxTime: Inf
                  OutputFcn: []
                    PlotFcn: []
           StartPointsToRun: 'all'
                 XTolerance: 1.0000e-06

Aktualisieren Sie die Eigenschaft XTolerance auf 1e-3 und die Eigenschaft StartPointsToRun auf 'bounds'.

gs = GlobalSearch(gs,'XTolerance',1e-3,'StartPointsToRun','bounds')
gs = 
  GlobalSearch with properties:

             NumTrialPoints: 1000
          BasinRadiusFactor: 0.2000
    DistanceThresholdFactor: 0.7500
               MaxWaitCycle: 20
          NumStageOnePoints: 200
     PenaltyThresholdFactor: 0.2000
                    Display: 'final'
          FunctionTolerance: 1.0000e-04
                    MaxTime: Inf
                  OutputFcn: []
                    PlotFcn: []
           StartPointsToRun: 'bounds'
                 XTolerance: 1.0000e-03

Sie können Eigenschaften auch einzeln aktualisieren, indem Sie die Punktnotation verwenden.

gs.MaxTime = 1800
gs = 
  GlobalSearch with properties:

             NumTrialPoints: 1000
          BasinRadiusFactor: 0.2000
    DistanceThresholdFactor: 0.7500
               MaxWaitCycle: 20
          NumStageOnePoints: 200
     PenaltyThresholdFactor: 0.2000
                    Display: 'final'
          FunctionTolerance: 1.0000e-04
                    MaxTime: 1800
                  OutputFcn: []
                    PlotFcn: []
           StartPointsToRun: 'bounds'
                 XTolerance: 1.0000e-03

Algorithmen

Eine ausführliche Beschreibung des Algorithmus finden Sie unter GlobalSearch Algorithm. Ugray et al. [1] beschreiben sowohl den Algorithmus als auch die Scatter-Search-Methode zur Generierung von Testpunkten.

Referenzen

[1] Ugray, Zsolt, Leon Lasdon, John Plummer, Fred Glover, James Kelly, and Rafael Martí. Scatter Search and Local NLP Solvers: A Multistart Framework for Global Optimization. INFORMS Journal on Computing, Vol. 19, No. 3, 2007, pp. 328–340.

Versionsverlauf

Eingeführt in R2010a

alle erweitern