Hauptinhalt

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

patternsearch

Finden Sie das Minimum der Funktion mithilfe der Mustersuche

Beschreibung

x = patternsearch(fun,x0) findet ein lokales Minimum, x, für den Funktionshandle fun, der die Werte der Zielfunktion berechnet. x0 ist ein reeller Vektor, der einen Anfangspunkt für den Mustersuchalgorithmus angibt.

Hinweis

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

Beispiel

x = patternsearch(fun,x0,A,b) minimiert fun unter der Voraussetzung der linearen Ungleichungen A*xb. Siehe Linear Inequality Constraints.

Beispiel

x = patternsearch(fun,x0,A,b,Aeq,beq) minimiert fun unter Einhaltung der linearen Gleichungen Aeq*x = beq und A*xb. Wenn keine linearen Ungleichungen existieren, setzen Sie A = [] und b = [].

x = patternsearch(fun,x0,A,b,Aeq,beq,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 keine linearen Gleichungen vorliegen, setzen Sie Aeq = [] und beq = []. Wenn x(i) keine Untergrenze hat, legen Sie lb(i) = -Inf fest. Wenn x(i) keine Obergrenze hat, legen Sie ub(i) = Inf fest.

Beispiel

x = patternsearch(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) unterwirft die Minimierung den nichtlinearen Ungleichungen c(x) oder den in nonlcon definierten Gleichungen ceq(x). patternsearch optimiert fun so, dass c(x) ≤ 0 und ceq(x) = 0. Wenn keine Grenzen vorhanden sind, legen Sie lb = [], ub = [] oder beides fest.

Beispiel

x = patternsearch(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) minimiert fun mit den in options angegebenen Optimierungsoptionen. Verwenden Sie optimoptions, um diese Optionen festzulegen. Wenn keine nichtlinearen Ungleichheits- oder Gleichheitsbeschränkungen vorliegen, setzen Sie nonlcon = [].

Beispiel

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

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

Beispiel

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

Beispiel

Beispiele

alle reduzieren

Minimieren Sie ein uneingeschränktes Problem mit dem patternsearch-Solver.

Erstellen Sie die folgende Zielfunktion mit zwei Variablen. Speichern Sie in Ihrem MATLAB ®-Pfad den folgenden Code in einer Datei mit dem Namen psobj.m.

function y = psobj(x)

y = exp(-x(1)^2-x(2)^2)*(1+5*x(1) + 6*x(2) + 12*x(1)*cos(x(2)));

Setzen Sie die Zielfunktion auf @psobj.

fun = @psobj;

Finden Sie das Minimum, beginnend beim Punkt [0,0].

x0 = [0,0];
x = patternsearch(fun,x0)
patternsearch stopped because the mesh size was less than options.MeshTolerance.

x =

   -0.7037   -0.1860

Minimieren Sie eine Funktion unter Berücksichtigung einiger linearer Ungleichheitsbeschränkungen.

Erstellen Sie die folgende Zielfunktion mit zwei Variablen. Speichern Sie in Ihrem MATLAB ®-Pfad den folgenden Code in einer Datei mit dem Namen psobj.m.

function y = psobj(x)

y = exp(-x(1)^2-x(2)^2)*(1+5*x(1) + 6*x(2) + 12*x(1)*cos(x(2)));

Setzen Sie die Zielfunktion auf @psobj.

fun = @psobj;

Legen Sie die beiden linearen Ungleichheitsbeschränkungen fest.

A = [-3,-2;
    -4,-7];
b = [-1;-8];

Finden Sie das Minimum, beginnend beim Punkt [0.5,-0.5].

x0 = [0.5,-0.5];
x = patternsearch(fun,x0,A,b)
patternsearch stopped because the mesh size was less than options.MeshTolerance.

x =

    5.2827   -1.8758

Finden Sie das Minimum einer Funktion, die nur gebundene Einschränkungen hat.

Erstellen Sie die folgende Zielfunktion mit zwei Variablen. Speichern Sie in Ihrem MATLAB ®-Pfad den folgenden Code in einer Datei mit dem Namen psobj.m.

function y = psobj(x)

y = exp(-x(1)^2-x(2)^2)*(1+5*x(1) + 6*x(2) + 12*x(1)*cos(x(2)));

Setzen Sie die Zielfunktion auf @psobj.

fun = @psobj;

Finden Sie das Minimum bei $0 \le x(1) \le\infty$ und $-\infty \le x(2) \le -3$.

lb = [0,-Inf];
ub = [Inf,-3];
A = [];
b = [];
Aeq = [];
beq = [];

Finden Sie das Minimum, beginnend beim Punkt [1,-5].

x0 = [1,-5];
x = patternsearch(fun,x0,A,b,Aeq,beq,lb,ub)
patternsearch stopped because the mesh size was less than options.MeshTolerance.

x =

    0.1880   -3.0000

Finden Sie das Minimum einer Funktion, die einer nichtlinearen Ungleichheitsbeschränkung unterliegt.

Erstellen Sie die folgende Zielfunktion mit zwei Variablen. Speichern Sie in Ihrem MATLAB ®-Pfad den folgenden Code in einer Datei mit dem Namen psobj.m.

function y = psobj(x)

y = exp(-x(1)^2-x(2)^2)*(1+5*x(1) + 6*x(2) + 12*x(1)*cos(x(2)));

Setzen Sie die Zielfunktion auf @psobj.

fun = @psobj;

Erstellen der nichtlinearen Einschränkung

$$ \frac{{xy}}{2} + {\left( {x + 2} \right)^2} + \frac{{{{\left( {y - 2}
\right)}^2}}}{2} \le 2. $$

Speichern Sie dazu in Ihrem MATLAB-Pfad den folgenden Code in einer Datei mit dem Namen ellipsetilt.m.

function [c,ceq] = ellipsetilt(x)
ceq = [];
c = x(1)*x(2)/2 + (x(1)+2)^2 + (x(2)-2)^2/2 - 2;

Starten Sie patternsearch vom Startpunkt [-2,-2] aus.

x0 = [-2,-2];
A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
nonlcon = @ellipsetilt;
x = patternsearch(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
Optimization finished: mesh size less than options.MeshTolerance 
and constraint violation is less than options.ConstraintTolerance.

x =

   -1.5144    0.0875

Manchmal weisen die verschiedenen patternsearch-Algorithmen ein deutlich unterschiedliches Verhalten auf. Obwohl es schwierig sein kann, vorherzusagen, welcher Algorithmus für ein Problem am besten geeignet ist, können Sie problemlos verschiedene Algorithmen ausprobieren. Verwenden Sie für dieses Beispiel die Zielfunktion sawtoothxy, die beim Ausführen dieses Beispiels verfügbar ist und die in Suchen Sie nach globalen oder mehreren lokalen Minima beschrieben und dargestellt wird.

type sawtoothxy
function f = sawtoothxy(x,y)
[t r] = cart2pol(x,y); % change to polar coordinates
h = cos(2*t - 1/2)/2 + cos(t) + 2;
g = (sin(r) - sin(2*r)/2 + sin(3*r)/3 - sin(4*r)/4 + 4) ...
    .*r.^2./(r+1);
f = g.*h;
end

Um das Verhalten der verschiedenen Algorithmen beim Minimieren dieser Zielfunktion zu sehen, legen Sie einige asymmetrische Grenzen fest. Legen Sie außerdem einen Anfangspunkt x0 fest, der weit von der tatsächlichen Lösung sol = [0 0] entfernt ist, wobei sawtoothxy(0,0) = 0.

rng default
x0 = 12*randn(1,2);
lb = [-15,-26];
ub = [26,15];
fun = @(x)sawtoothxy(x(1),x(2));

Minimieren Sie die sawtoothxy-Funktion mit dem "classic" patternsearch-Algorithmus.

optsc = optimoptions("patternsearch",Algorithm="classic");
[sol,fval,eflag,output] = patternsearch(fun,...
    x0,[],[],[],[],lb,ub,[],optsc)
patternsearch stopped because the mesh size was less than options.MeshTolerance.
sol = 1×2
10-5 ×

    0.9825         0

fval = 1.3278e-09
eflag = 1
output = struct with fields:
         function: @(x)sawtoothxy(x(1),x(2))
      problemtype: 'boundconstraints'
       pollmethod: 'gpspositivebasis2n'
    maxconstraint: 0
     searchmethod: []
       iterations: 52
        funccount: 168
         meshsize: 9.5367e-07
         rngstate: [1x1 struct]
          message: 'patternsearch stopped because the mesh size was less than options.MeshTolerance.'

Der "classic"-Algorithmus erreicht die globale Lösung in 52 Iterationen und 168 Funktionsauswertungen.

Probieren Sie den "nups"-Algorithmus aus.

rng default % For reproducibility
optsn = optimoptions("patternsearch",Algorithm="nups");
[sol,fval,eflag,output] = patternsearch(fun,...
    x0,[],[],[],[],lb,ub,[],optsn)
patternsearch stopped because the mesh size was less than options.MeshTolerance.
sol = 1×2

    6.3204   15.0000

fval = 85.9256
eflag = 1
output = struct with fields:
         function: @(x)sawtoothxy(x(1),x(2))
      problemtype: 'boundconstraints'
       pollmethod: 'nups'
    maxconstraint: 0
     searchmethod: []
       iterations: 29
        funccount: 88
         meshsize: 7.1526e-07
         rngstate: [1x1 struct]
          message: 'patternsearch stopped because the mesh size was less than options.MeshTolerance.'

Dieses Mal erreicht der Solver eine lokale Lösung in nur 29 Iterationen und 88 Funktionsauswertungen, aber die Lösung ist nicht die globale Lösung.

Versuchen Sie es mit dem "nups-mads"-Algorithmus, der keine Schritte in den Koordinatenrichtungen ausführt.

rng default % For reproducibility
optsm = optimoptions("patternsearch",Algorithm="nups-mads");
[sol,fval,eflag,output] = patternsearch(fun,...
    x0,[],[],[],[],lb,ub,[],optsm)
patternsearch stopped because the mesh size was less than options.MeshTolerance.
sol = 1×2
10-4 ×

   -0.5275    0.0806

fval = 1.5477e-08
eflag = 1
output = struct with fields:
         function: @(x)sawtoothxy(x(1),x(2))
      problemtype: 'boundconstraints'
       pollmethod: 'nups-mads'
    maxconstraint: 0
     searchmethod: []
       iterations: 55
        funccount: 189
         meshsize: 9.5367e-07
         rngstate: [1x1 struct]
          message: 'patternsearch stopped because the mesh size was less than options.MeshTolerance.'

Dieses Mal erreicht der Solver die globale Lösung in 55 Iterationen und 189 Funktionsauswertungen, was dem 'classic'-Algorithmus ähnelt.

Legen Sie Optionen fest, um den Fortschritt des patternsearch-Lösungsprozesses zu beobachten.

Erstellen Sie die folgende Zielfunktion mit zwei Variablen. Speichern Sie in Ihrem MATLAB®-Pfad den folgenden Code in einer Datei mit dem Namen psobj.m.

function y = psobj(x)

y = exp(-x(1)^2-x(2)^2)*(1+5*x(1) + 6*x(2) + 12*x(1)*cos(x(2)));

Setzen Sie die Zielfunktion auf @psobj.

fun = @psobj;

Setzen Sie options, um eine iterative Anzeige zu erhalten und die Zielfunktion bei jeder Iteration darzustellen.

options = optimoptions('patternsearch','Display','iter','PlotFcn',@psplotbestf);

Finden Sie das uneingeschränkte Minimum des Ziels, ausgehend vom Punkt [0,0].

x0 = [0,0];
A = [];
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
nonlcon = [];
x = patternsearch(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

Iter     f-count          f(x)      MeshSize     Method
    0        1              1             1      
    1        4       -5.88607             2     Successful Poll
    2        8       -5.88607             1     Refine Mesh
    3       12       -5.88607           0.5     Refine Mesh
    4       16       -5.88607          0.25     Refine Mesh

(output trimmed)

   63      218       -7.02545     1.907e-06     Refine Mesh
   64      221       -7.02545     3.815e-06     Successful Poll
   65      225       -7.02545     1.907e-06     Refine Mesh
   66      229       -7.02545     9.537e-07     Refine Mesh
Optimization terminated: mesh size less than options.MeshTolerance.

x =

   -0.7037   -0.1860

Finden Sie einen Minimalwert einer Funktion und melden Sie sowohl den Ort als auch den Wert des Minimums.

Erstellen Sie die folgende Zielfunktion mit zwei Variablen. Speichern Sie in Ihrem MATLAB ®-Pfad den folgenden Code in einer Datei mit dem Namen psobj.m.

function y = psobj(x)

y = exp(-x(1)^2-x(2)^2)*(1+5*x(1) + 6*x(2) + 12*x(1)*cos(x(2)));

Setzen Sie die Zielfunktion auf @psobj.

fun = @psobj;

Finden Sie das uneingeschränkte Minimum des Ziels, ausgehend vom Punkt [0,0]. Gibt sowohl die Position des Minimums, x, als auch den Wert von fun(x) zurück.

x0 = [0,0];
[x,fval] = patternsearch(fun,x0)
patternsearch stopped because the mesh size was less than options.MeshTolerance.

x =

   -0.7037   -0.1860


fval =

   -7.0254

Um den patternsearch-Lösungsprozess zu untersuchen, erhalten Sie alle Ausgaben.

Erstellen Sie die folgende Zielfunktion mit zwei Variablen. Speichern Sie in Ihrem MATLAB ®-Pfad den folgenden Code in einer Datei mit dem Namen psobj.m.

function y = psobj(x)

y = exp(-x(1)^2-x(2)^2)*(1+5*x(1) + 6*x(2) + 12*x(1)*cos(x(2)));

Setzen Sie die Zielfunktion auf @psobj.

fun = @psobj;

Finden Sie das uneingeschränkte Minimum des Ziels, ausgehend vom Punkt [0,0]. Gibt die Lösung x, den Zielfunktionswert bei der Lösung fun(x), das Exit-Flag und die Ausgabestruktur zurück.

x0 = [0,0];
[x,fval,exitflag,output] = patternsearch(fun,x0)
patternsearch stopped because the mesh size was less than options.MeshTolerance.

x =

   -0.7037   -0.1860


fval =

   -7.0254


exitflag =

     1


output = 

  struct with fields:

         function: @psobj
      problemtype: 'unconstrained'
       pollmethod: 'gpspositivebasis2n'
    maxconstraint: []
     searchmethod: []
       iterations: 66
        funccount: 229
         meshsize: 9.5367e-07
         rngstate: [1x1 struct]
          message: 'patternsearch stopped because the mesh size was less than options.MeshTolerance.'

Das exitflag ist 1, was auf eine Konvergenz zu einem lokalen Minimum hinweist.

Die output-Struktur enthält Informationen wie etwa, wie viele Iterationen patternsearch benötigt hat und wie viele Funktionsauswertungen durchgeführt wurden. Vergleichen Sie diese Ausgabestruktur mit den Ergebnissen von Mustersuche mit nicht standardmäßigen Optionen. In diesem Beispiel erhalten Sie einige dieser Informationen, jedoch beispielsweise nicht die Anzahl der Funktionsauswertungen.

Eingabeargumente

alle reduzieren

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

Sie können fun als Funktionshandle für eine Datei angeben

x = patternsearch(@myfun,x0)

Hier ist myfun eine MATLAB-Funktion wie

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

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

x = patternsearch(@(x)norm(x)^2,x0,A,b);

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

Datentypen: char | function_handle | string

Anfangspunkt, angegeben als reeller Vektor. patternsearch 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

Lineare Ungleichheitsbeschränkungen, angegeben als reelle Matrix. A ist eine M-mal-nvars-Matrix, wobei M die Anzahl der Ungleichungen ist.

A kodiert die M linearen Ungleichungen

A*x <= b,

wobei x der Spaltenvektor der nvars-Variablen x(:) und b ein Spaltenvektor mit M-Elementen ist.

Geben Sie beispielsweise an

x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,

Geben Sie diese Einschränkungen an:

A = [1,2;3,4;5,6];
b = [10;20;30];

Beispiel: Um anzugeben, dass die Summe der Steuervariablen 1 oder weniger ergibt, geben Sie die Einschränkungen A = ones(1,N) und b = 1 ein.

Datentypen: double

Lineare Ungleichheitsbeschränkungen, angegeben als reeller Vektor. b ist ein M-Element-Vektor, der mit der A-Matrix in Beziehung steht. Wenn Sie b als Zeilenvektor übergeben, konvertieren Solver b intern in den Spaltenvektor b(:).

b kodiert die M linearen Ungleichungen

A*x <= b,

wobei x der Spaltenvektor der N Variablen x(:) und A eine Matrix der Größe M-mal-N ist.

Geben Sie beispielsweise an

x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,

Geben Sie diese Einschränkungen an:

A = [1,2;3,4;5,6];
b = [10;20;30];

Beispiel: Um anzugeben, dass die Summe der Steuervariablen 1 oder weniger ergibt, geben Sie die Einschränkungen A = ones(1,N) und b = 1 an.

Datentypen: double

Lineare Gleichheitsbeschränkungen, angegeben als reelle Matrix. Aeq ist eine Me-mal-nvars-Matrix, wobei Me die Anzahl der Gleichheiten ist.

Aeq kodiert die Me linearen Gleichungen

Aeq*x = beq,

wobei x der Spaltenvektor mit N-Variablen x(:) und beq ein Spaltenvektor mit Me-Elementen ist.

Geben Sie beispielsweise an

x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20,

Geben Sie diese Einschränkungen an:

Aeq = [1,2,3;2,4,1];
beq = [10;20];

Beispiel: Um anzugeben, dass die Summe der Kontrollvariablen 1 ergibt, geben Sie die Einschränkungen Aeq = ones(1,N) und beq = 1 ein.

Datentypen: double

Lineare Gleichheitsbeschränkungen, angegeben als reeller Vektor. beq ist ein Me-Element-Vektor, der mit der Aeq-Matrix in Beziehung steht. Wenn Sie beq als Zeilenvektor übergeben, konvertieren Solver beq intern in den Spaltenvektor beq(:).

beq kodiert die Me linearen Gleichungen

Aeq*x = beq,

wobei x der Spaltenvektor der N Variablen x(:) und Aeq eine Matrix der Größe Meq-mal-N ist.

Geben Sie beispielsweise an

x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20,

Geben Sie diese Einschränkungen an:

Aeq = [1,2,3;2,4,1];
beq = [10;20];

Beispiel: Um anzugeben, dass die Summe der Kontrollvariablen 1 ergibt, geben Sie die Einschränkungen Aeq = ones(1,N) und beq = 1 ein.

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

Nichtlineare Einschränkungen, angegeben als Funktionshandle oder Funktionsname. nonlcon ist eine Funktion, die einen Vektor oder ein Array x akzeptiert und zwei Arrays zurückgibt, c(x) und ceq(x).

  • c(x) ist das Array der nichtlinearen Ungleichheitsbeschränkungen bei x. patternsearch versucht zu erfüllen

    c(x) <= 0

    für alle Einträge von c.

  • ceq(x) ist das Array der nichtlinearen Gleichheitsbeschränkungen bei x. patternsearch versucht zu erfüllen

    ceq(x) = 0

    für alle Einträge von ceq.

Zum Beispiel,

x = patternsearch(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon)

wobei mycon eine MATLAB-Funktion ist, wie etwa

function [c,ceq] = mycon(x)
c = ...     % Compute nonlinear inequalities at x.
ceq = ...   % Compute nonlinear equalities at x.
Weitere Informationen finden Sie unter Nonlinear Constraints.

Datentypen: char | function_handle | string

Optimierungsoptionen, angegeben als ein von optimoptions zurückgegebenes Objekt (empfohlen) oder als eine Struktur.

In der folgenden Tabelle werden die Optimierungsmöglichkeiten beschrieben. optimoptions verbirgt die kursiv dargestellten Optionen; siehe Options that optimoptions Hides. {} bezeichnet den Standardwert. Siehe Optionsdetails in Pattern Search Options.

Optionen für patternsearch

OptionBeschreibungWerte
Algorithm

Von patternsearch verwendeter Algorithmus. Die Einstellung Algorithm wirkt sich auf die verfügbaren Optionen aus. Einzelheiten zum Algorithmus finden Sie unter How Pattern Search Polling Works und Nonuniform Pattern Search (NUPS) Algorithm.

Beispiele für Algorithmuseffekte finden Sie unter Explore patternsearch Algorithms und Explore patternsearch Algorithms in Optimize Live Editor Task.

{"classic"} | "nups" | "nups-gps" | "nups-mads"
Zwischenspeicher

Wenn Cache auf "on" gesetzt ist, speichert patternsearch einen Verlauf der Mesh-Punkte, die es abfragt. Bei nachfolgenden Iterationen führt patternsearch keine Abfragen von Punkten in der Nähe der bereits abgefragten Punkte durch. Verwenden Sie diese Option, wenn patternsearch beim Berechnen der Zielfunktion langsam läuft. Wenn die Zielfunktion stochastisch ist, verwenden Sie diese Option nicht.

Hinweis

Cache funktioniert nicht, wenn Sie den Solver parallel ausführen.

"on" | {"off"}

CacheSize

Größe der Historie.

Nichtnegativer Skalar | {1e4}

CacheTol

Größte Entfernung vom aktuellen Mesh-Punkt zu einem beliebigen Punkt im Verlauf, damit patternsearch eine Abfrage des aktuellen Punkts vermeiden kann. Verwenden Sie es, wenn die Option Cache auf "on" gesetzt ist.

Nichtnegativer Skalar | {eps}

ConstraintTolerance

Toleranz gegenüber Einschränkungen.

Verwenden Sie für eine Optionsstruktur TolCon.

Positiver Skalar | {1e-6}

Display

Anzeigeebene, d.h. wie viele Informationen patternsearch während des Lösungsprozesses an die Befehlszeile zurückgibt.

"off" | "iter" | "diagnose" | {"final"}
FunctionTolerance

Toleranz gegenüber der Funktion. Die Iterationen werden beendet, wenn die Änderung des Funktionswerts kleiner als FunctionTolerance und die Maschengröße kleiner als StepTolerance ist. Diese Option gilt nicht für MADS-Polling (Mesh Adaptive Direct Search).

Verwenden Sie für eine Optionsstruktur TolFun.

Nichtnegativer Skalar | {1e-6}

InitialMeshSize

Anfängliche Maschengröße für den Algorithmus. Siehe How Pattern Search Polling Works.

Positiver Skalar | {1.0}

InitialPenalty

Anfangswert des Strafparameters. Siehe Nonlinear Constraint Solver Algorithm for Pattern Search.

Positiver Skalar | {10}

MaxFunctionEvaluations

Maximale Anzahl von Zielfunktionsauswertungen.

Verwenden Sie für eine Optionsstruktur MaxFunEvals.

Nichtnegative Ganzzahl | {"2000*numberOfVariables"}, wobei numberOfVariables die Anzahl der Problemvariablen ist

MaxIterations

Maximale Anzahl von Iterationen.

Verwenden Sie für eine Optionsstruktur MaxIter.

Nichtnegative Ganzzahl | {"100*numberOfVariables"}, wobei numberOfVariables die Anzahl der Problemvariablen ist

MaxMeshSize

Maximale Maschengröße, die in einem Umfrage- oder Suchschritt verwendet wird. Siehe How Pattern Search Polling Works.

Nichtnegativer Skalar | {Inf}

MaxTime

Gesamtzeit (in Sekunden), die für die Optimierung zur Verfügung steht.

Verwenden Sie für eine Optionsstruktur TimeLimit.

Nichtnegativer Skalar | {Inf}

MeshContractionFactor

Netzkontraktionsfaktor für eine erfolglose Iteration.

Diese Option gilt nur, wenn Algorithm "classic" ist.

Verwenden Sie für eine Optionsstruktur MeshContraction.

Positiver Skalar | {0.5}

MeshExpansionFactor

Netzerweiterungsfaktor für eine erfolgreiche Iteration.

Diese Option gilt nur, wenn Algorithm "classic" ist.

Verwenden Sie für eine Optionsstruktur MeshExpansion.

Positiver Skalar | {2.0}

MeshRotate

Markierung zum Drehen des Musters, bevor ein Punkt als optimal erklärt wird. Siehe Mesh Options.

Diese Option gilt nur, wenn Algorithm "classic" ist.

"off" | {"on"}

MeshTolerance

Toleranz der Maschenweite.

Verwenden Sie für eine Optionsstruktur TolMesh.

Nichtnegativer Skalar | {1e-6}

OutputFcn

Funktion, die bei jeder Iteration von einer Optimierungsfunktion aufgerufen wird. Geben Sie es als Funktionshandle oder als Zellenarray von Funktionshandles an.

Verwenden Sie für eine Optionsstruktur OutputFcns.

Funktions-Handle oder Zellen-Array von Funktions-Handles | {[]}

PenaltyFactor

Parameter zur Strafaktualisierung. Siehe Nonlinear Constraint Solver Algorithm for Pattern Search.

Positiver Skalar | {100}

PlotFcn

Diagramme der Ausgabe der Mustersuche. Geben Sie als Namen einer integrierten Plotfunktion einen Funktionshandle oder ein Zellenarray mit Namen integrierter Plotfunktionen oder Funktionshandles an.

Verwenden Sie für eine Optionsstruktur PlotFcns.

{[]} | "psplotbestf" | "psplotfuncount" | "psplotmeshsize" | "psplotbestx" | "psplotmaxconstr" | benutzerdefinierte Plotfunktion

PlotIntervall

Anzahl der Iterationen für Diagramme. 1 bedeutet, bei jeder Iteration ein Diagramm zu erstellen, 2 bedeutet, bei jeder zweiten Iteration ein Diagramm zu erstellen usw.

positive Ganzzahl | {1}

PollMethod

Bei der Mustersuche verwendete Polling-Strategie.

Diese Option gilt nur, wenn Algorithm "classic" ist.

Hinweis

Sie können MADS-Polling nicht verwenden, wenn das Problem lineare Gleichheitsbeschränkungen aufweist.

{"GPSPositiveBasis2N"} | "GPSPositiveBasisNp1" | "GSSPositiveBasis2N" | "GSSPositiveBasisNp1" | "MADSPositiveBasis2N" | "MADSPositiveBasisNp1"

PollOrderAlgorithm

Reihenfolge der Genickrichtungen bei der Mustersuche.

Diese Option gilt nur, wenn Algorithm "classic" ist.

Verwenden Sie für eine Optionsstruktur PollingOrder.

"Random" | "Success" | {"Consecutive"}

ScaleMesh

Automatische Skalierung von Variablen.

Verwenden Sie für eine Optionsstruktur ScaleMesh = "on" oder "off".

{true}| false

SearchFcn

Suchtyp, der bei der Mustersuche verwendet wird. Geben Sie es als Namen oder als Funktionshandle an.

Verwenden Sie für eine Optionsstruktur SearchMethod.

"GPSPositiveBasis2N" | "GPSPositiveBasisNp1" | "GSSPositiveBasis2N" | "GSSPositiveBasisNp1" | "MADSPositiveBasis2N" | "MADSPositiveBasisNp1" | "searchga" | "searchlhs" | "searchneldermead" | "rbfsurrogate" | {[]} | benutzerdefinierte Suchfunktion

StepTolerance

Toleranz der Variable. Die Iterationen werden beendet, wenn sowohl die Positionsänderung als auch die Netzgröße kleiner als StepTolerance sind. Diese Option gilt nicht für MADS-Polling.

Verwenden Sie für eine Optionsstruktur TolX.

Nichtnegativer Skalar | {1e-6}

TolBind

Verbindliche Toleranz. Siehe Constraint Parameters.

Nichtnegativer Skalar | {1e-3}

UseCompletePoll

Markierung, um die Umfrage zum aktuellen Punkt abzuschließen. Siehe How Pattern Search Polling Works.

Diese Option gilt nur, wenn Algorithm "classic" ist.

Hinweis

Für den "classic"-Algorithmus müssen Sie UseCompletePoll auf true für vektorisiertes oder paralleles Polling setzen. Legen Sie für die vektorisierte oder parallele Suche analog UseCompleteSearch auf true fest.

Wenn Sie ab R2019a die Option UseParallel auf true setzen, überschreibt patternsearch intern die Einstellung UseCompletePoll auf true, sodass die Funktion parallel abfragt.

Verwenden Sie für eine Optionsstruktur CompletePoll = "on" oder "off".

true | {false}

UseCompleteSearch

Markierung, um die Suche rund um den aktuellen Punkt abzuschließen, wenn die Suchmethode eine Polling-Methode ist. Siehe Searching and Polling.

Diese Option gilt nur, wenn Algorithm "classic" ist.

Hinweis

Für den "classic"-Algorithmus müssen Sie UseCompleteSearch auf true für die vektorisierte oder parallele Suche setzen.

Verwenden Sie für eine Optionsstruktur CompleteSearch = "on" oder "off".

true | {false}

UseParallel

Markierung zum parallelen Berechnen von objektiven und nichtlinearen Einschränkungsfunktionen. Siehe Vectorized and Parallel Options und How to Use Parallel Processing in Global Optimization Toolbox.

Hinweis

Für den "classic"-Algorithmus müssen Sie UseCompletePoll auf true für vektorisiertes oder paralleles Polling setzen. Legen Sie für die vektorisierte oder parallele Suche analog UseCompleteSearch auf true fest.

Wenn Sie ab R2019a die Option UseParallel auf true setzen, überschreibt patternsearch intern die Einstellung UseCompletePoll auf true, sodass die Funktion parallel abfragt.

Hinweis

Cache funktioniert nicht, wenn Sie den Solver parallel ausführen.

true | {false}

UseVectorized

Gibt an, ob Funktionen vektorisiert sind. Siehe Vectorized and Parallel Options und Vectorize the Objective and Constraint Functions.

Hinweis

Für den "classic"-Algorithmus müssen Sie UseCompletePoll auf true für vektorisiertes oder paralleles Polling setzen. Legen Sie für die vektorisierte oder parallele Suche analog UseCompleteSearch auf true fest.

Verwenden Sie für eine Optionsstruktur Vectorized = "on" oder "off".

true | {false}

Beispiel: options = optimoptions("patternsearch",MaxIterations=150,MeshTolerance=1e-4)

Problemstruktur, angegeben als Struktur mit folgenden Feldern:

  • objective – Zielfunktion

  • x0 — Ausgangspunkt

  • Aineq – Matrix für lineare Ungleichheitsbeschränkungen

  • bineq – Vektor für lineare Ungleichheitsbeschränkungen

  • Aeq – Matrix für lineare Gleichheitsbeschränkungen

  • beq – Vektor für lineare Gleichheitsbeschränkungen

  • lb – Untergrenze für x

  • ub – Obergrenze für x

  • nonlcon – Nichtlineare Einschränkungsfunktion

  • solver'patternsearch'

  • options — Optionen, die mit optimoptions oder einer Struktur erstellt wurden

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

Hinweis

Alle Felder in problem sind erforderlich, außer rngstate.

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. Wenn exitflag positiv ist, ist x normalerweise eine lokale Lösung des Problems.

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

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

AusstiegsbedingungBedeutung

1

Ohne nichtlineare Einschränkungen – Die Maschengröße ist kleiner als die angegebene Toleranz und die Einschränkungsverletzung ist kleiner als ConstraintTolerance.

Mit nichtlinearen Einschränkungen – Die Größe des Komplementaritätsmaßes (definiert gemäß dieser Tabelle) ist kleiner als sqrt(ConstraintTolerance), das Teilproblem wird mit einem feineren Netz als MeshTolerance gelöst und die Einschränkungsverletzung ist kleiner als ConstraintTolerance.

2

Die Änderung in x und der Maschengröße liegen beide unter der angegebenen Toleranz, und die Einschränkungsverletzung ist kleiner als ConstraintTolerance.

3

Die Änderung in fval und der Maschengröße liegen beide unter der angegebenen Toleranz, und die Einschränkungsverletzung ist kleiner als ConstraintTolerance.

4

Die Schrittweite ist kleiner als die Maschinenpräzision und die Einschränkungsverletzung ist kleiner als ConstraintTolerance.

0

Die maximale Anzahl an Funktionsauswertungen oder Iterationen ist erreicht.

-1

Optimierung durch eine Ausgabefunktion oder Plotfunktion beendet.

-2

Kein durchführbarer Punkt gefunden.

Im nichtlinearen Constraint-Löser ist das Komplementaritätsmaß die Norm des Vektors, dessen Elemente ciλi sind, wobei ci die Verletzung der nichtlinearen Ungleichheitsbeschränkung und λi der entsprechende Lagrange-Multiplikator ist.

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

  • function – Zielfunktion.

  • problemtype — Problemtyp, einer von:

    • 'unconstrained'

    • 'boundconstraints'

    • 'linearconstraints'

    • 'nonlinearconstr'

  • pollmethod – Polling-Technik.

  • searchmethod – Verwendete Suchtechnik, falls vorhanden.

  • iterations – Gesamtzahl der Iterationen.

  • funccount – Gesamtzahl der Funktionsauswertungen.

  • meshsize – Maschengröße bei x.

  • maxconstraint – Maximale Einschränkungsverletzung, falls vorhanden.

  • rngstate – Zustand des MATLAB-Zufallszahlengenerators, unmittelbar vor dem Start des Algorithmus. Sie können die Werte in rngstate verwenden, um die Ausgabe zu reproduzieren, wenn Sie eine zufällige Suchmethode oder eine zufällige Abfragemethode verwenden. Siehe Reproduce Results, wo die identische Technik für ga erläutert wird.

  • message – Grund, warum der Algorithmus beendet wurde.

Algorithmen

Standardmäßig und in Abwesenheit linearer Einschränkungen sucht patternsearch nach einem Minimum basierend auf einem adaptiven Netz, das an den Koordinatenrichtungen ausgerichtet ist. Siehe What Is Direct Search? und How Pattern Search Polling Works.

Wenn Sie die Option Algorithm auf "nups" oder eine ihrer Varianten setzen, verwendet patternsearch den in Nonuniform Pattern Search (NUPS) Algorithm beschriebenen Algorithmus. Dieser Algorithmus unterscheidet sich in mehreren Punkten vom Standardalgorithmus. Er verfügt beispielsweise über weniger einstellbare Optionen.

Alternative Funktionalität

App

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

Referenzen

[1] Audet, Charles, and J. E. Dennis Jr. “Analysis of Generalized Pattern Searches.” SIAM Journal on Optimization. Volume 13, Number 3, 2003, pp. 889–903.

[2] Conn, A. R., N. I. M. Gould, and Ph. L. Toint. “A Globally Convergent Augmented Lagrangian Barrier Algorithm for Optimization with General Inequality Constraints and Simple Bounds.” Mathematics of Computation. Volume 66, Number 217, 1997, pp. 261–288.

[3] Abramson, Mark A. Pattern Search Filter Algorithms for Mixed Variable General Constrained Optimization Problems. Ph.D. Thesis, Department of Computational and Applied Mathematics, Rice University, August 2002.

[4] Abramson, Mark A., Charles Audet, J. E. Dennis, Jr., and Sebastien Le Digabel. “ORTHOMADS: A deterministic MADS instance with orthogonal directions.” SIAM Journal on Optimization. Volume 20, Number 2, 2009, pp. 948–966.

[5] Kolda, Tamara G., Robert Michael Lewis, and Virginia Torczon. “Optimization by direct search: new perspectives on some classical and modern methods.” SIAM Review. Volume 45, Issue 3, 2003, pp. 385–482.

[6] Kolda, Tamara G., Robert Michael Lewis, and Virginia Torczon. “A generating set direct search augmented Lagrangian algorithm for optimization with a combination of general and linear constraints.” Technical Report SAND2006-5315, Sandia National Laboratories, August 2006.

[7] Lewis, Robert Michael, Anne Shepherd, and Virginia Torczon. “Implementing generating set search methods for linearly constrained minimization.” SIAM Journal on Scientific Computing. Volume 29, Issue 6, 2007, pp. 2507–2530.

Erweiterte Fähigkeiten

alle erweitern

Versionsverlauf

Eingeführt vor R2006a