Hauptinhalt

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

createOptimProblem

Erstellen einer Optimierungsproblemstruktur

Beschreibung

problem = createOptimProblem(solverName) erstellt eine leere Optimierungsproblemstruktur für den solverName-Solver.

problem = createOptimProblem(solverName,Name,Value) gibt zusätzliche Optionen mithilfe eines oder mehrerer Name-Wert-Argumente an.

Beispiel

Beispiele

alle reduzieren

Erstellen Sie eine Problemstruktur mit den folgenden Spezifikationen:

  • fmincon-Löser

  • "interior-point"-Algorithmus

  • Zufälliger 2-D-Anfangspunkt x0

  • Rosenbrocks Funktion als Ziel

  • Untere Grenzen von –2

  • Obergrenzen von 2

Rosenbrocks Funktion für eine 2-D-Variable x ist f(x)=100(x2-x12)2+(1-x1)2 (Details finden Sie unter Constrained Nonlinear Problem Using Optimize Live Editor Task or Solver). Um den "interior-point"-Algorithmus anzugeben, erstellen Sie Optionen mit optimoptions.

anonrosen = @(x)(100*(x(2) - x(1)^2)^2 + (1-x(1))^2);
opts = optimoptions(@fmincon,Algorithm="interior-point");
rng default % For reproducibility
problem = createOptimProblem("fmincon",...
    x0=randn(2,1),...
    objective=anonrosen,...
    lb=[-2;-2],...
    ub=[2;2],...
    options=opts);

Lösen Sie das Problem ausgehend von problem.x0, indem Sie fmincon aufrufen.

[x,fval] = fmincon(problem)
Local minimum possible. Constraints satisfied.

fmincon stopped because the size of the current step is less than
the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 2×1

    1.0000
    1.0000

fval = 2.0603e-11

Suchen Sie nach einer besseren Lösung, indem Sie GlobalSearch aufrufen.

gs = GlobalSearch;
[x2,fval2] = run(gs,problem)
GlobalSearch stopped because it analyzed all the trial points.

All 16 local solver runs converged with a positive local solver exit flag.
x2 = 2×1

    1.0000
    1.0000

fval2 = 2.1093e-11

In diesem Fall gelangen sowohl fmincon als auch GlobalSearch zur gleichen Lösung.

Eingabeargumente

alle reduzieren

Optimierungssolver, angegeben als einer der folgenden.

  • Geben Sie für GlobalSearch "fmincon" oder @fmincon an.

  • Geben Sie für MultiStart "fmincon" oder @fmincon, "fminunc" oder @fminunc, "lsqnonlin" oder @lsqnonlin oder "lsqcurvefit" oder @lsqcurvefit an.

Beispiel: "fmincon"

Datentypen: char | string | function_handle

Name-Wert-Argumente

alle reduzieren

Geben Sie optionale Argumentpaare als Name1=Value1,...,NameN=ValueN an, wobei Name der Argumentname und Value der entsprechende Wert ist. Name-Wert-Argumente müssen nach anderen Argumenten erscheinen, aber die Reihenfolge der Paare spielt keine Rolle.

Trennen Sie vor R2021a jeden Namen und Wert durch Kommas und schließen Sie Name in Anführungszeichen ein.

Beispiel: createOptimProblem("fmincon","x0",x0,"objective",fun,"lb",zeros(size(x0)))

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 Ungleichheitsbeschränkungen, angegeben als reelle Matrix. Aineq ist eine M-mal-nvars-Matrix, wobei M die Anzahl der Ungleichungen ist.

Aineq kodiert die M linearen Ungleichungen

Aineq*x <= bineq,

wobei x der Spaltenvektor mit nvars-Variablen x(:) und bineq 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:

Aineq = [1,2;3,4;5,6];
bineq = [10;20;30];

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

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

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

bineq kodiert die M linearen Ungleichungen

Aineq*x <= bineq,

wobei x der Spaltenvektor der N Variablen x(:) und Aineq 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:

Aineq = [1,2;3,4;5,6];
bineq = [10;20;30];

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

Datentypen: double

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

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

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

Datentypen: double

Nichtlineare Einschränkungen, angegeben als Funktionshandle oder Funktionsname. nonlcon ist eine Funktion, die 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. Der Solver versucht, c(x) <= 0 für alle Einträge von c zu erfüllen.

  • ceq(x) ist das Array der nichtlinearen Gleichheitsbeschränkungen bei x. Der Solver versucht, ceq(x) = 0 für alle Einträge von ceq zu erfüllen.

Beispielsweise ist nonlcon eine MATLAB®-Funktion wie die folgende:

function [c,ceq] = nonlcon(x)
c = ...     % Compute nonlinear inequalities at x.
ceq = ...   % Compute nonlinear equalities at x.

Weitere Informationen finden Sie unter Nonlinear Constraints.

Datentypen: char | string | function_handle

Zielfunktion, angegeben als Funktionshandle oder Funktionsname.

  • Für alle Solver außer lsqnonlin und lsqcurvefit muss die Zielfunktion ein Array x akzeptieren und einen Skalar zurückgeben. Wenn die Option SpecifyObjectiveGradient true ist, muss die Zielfunktion eine zweite Ausgabe zurückgeben, einen Vektor, der den Gradienten des Ziels darstellt. Einzelheiten finden Sie unter fun.

  • Für lsqnonlin muss die Zielfunktion einen Vektor x akzeptieren und einen Vektor zurückgeben. Wenn die Option SpecifyObjectiveGradient true lautet, muss die Zielfunktion eine zweite Ausgabe zurückgeben, eine Matrix, die die Jacobi-Matrix des Ziels darstellt. Einzelheiten finden Sie unter fun.

  • Für lsqcurvefit muss die Zielfunktion zwei Eingaben, x und xdata, akzeptieren und einen Vektor zurückgeben. Wenn die Option SpecifyObjectiveGradient true lautet, muss die Zielfunktion eine zweite Ausgabe zurückgeben, eine Matrix, die die Jacobi-Matrix des Ziels darstellt. Einzelheiten finden Sie unter fun.

Beispiel: @sin

Beispiel: "sin"

Datentypen: char | string | function_handle

Optimierungsoptionen, angegeben als Ausgabe von optimoptions.

Beispiel: optimoptions("fmincon","SpecifyObjectiveGradient",true)

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

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

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

Datentypen: double

Anfangspunkt, angegeben als reeller Vektor oder reelles Array. Solver verwenden die Anzahl der Elemente in x0 und die Größe von x0, um die Anzahl und Größe der Variablen zu bestimmen, die fun akzeptiert.

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

Datentypen: double

Eingabedaten für das Modell, angegeben als reeller Vektor oder reelles Array. Das Modell ist

ydata = fun(x,xdata),

wobei xdata und ydata feste Arrays sind und x das Parameter-Array ist, das lsqcurvefit ändert, um nach einer minimalen Summe der Quadrate zu suchen.

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

Datentypen: double

Antwortdaten für das Modell, angegeben als reeller Vektor oder reelles Array. Das Modell ist

ydata = fun(x,xdata),

wobei xdata und ydata feste Arrays sind und x das Parameter-Array ist, das lsqcurvefit ändert, um nach einer minimalen Summe der Quadrate zu suchen.

Das ydata-Array muss dieselbe Größe und Form wie das Array fun(x0,xdata) haben.

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

Datentypen: double

Ausgabeargumente

alle reduzieren

Optimierungsproblem, zurückgegeben als Struktur. Verwenden Sie problem als zweites Eingabeargument von run, wie in den folgenden Beispielen:

x = run(gs,problem)
x = run(ms,problem,k)

Sie können das Problem auch lösen, indem Sie den benannten Solver für das Problem aufrufen. Wenn beispielsweise problem für fmincon erstellt wird, geben Sie ein

x = fmincon(problem)

Versionsverlauf

Eingeführt in R2010a