createOptimProblem
Erstellen einer Optimierungsproblemstruktur
Beschreibung
erstellt eine leere Optimierungsproblemstruktur für den problem = createOptimProblem(solverName)solverName-Solver.
gibt zusätzliche Optionen mithilfe eines oder mehrerer Name-Wert-Argumente an.problem = createOptimProblem(solverName,Name,Value)
Beispiele
Erstellen Sie eine Problemstruktur mit den folgenden Spezifikationen:
fmincon-Löser"interior-point"-AlgorithmusZufälliger 2-D-Anfangspunkt
x0Rosenbrocks Funktion als Ziel
Untere Grenzen von –2
Obergrenzen von 2
Rosenbrocks Funktion für eine 2-D-Variable ist (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
Optimierungssolver, angegeben als einer der folgenden.
Geben Sie für
GlobalSearch"fmincon"oder@fminconan.Geben Sie für
MultiStart"fmincon"oder@fmincon,"fminunc"oder@fminunc,"lsqnonlin"oder@lsqnonlinoder"lsqcurvefit"oder@lsqcurvefitan.
Beispiel: "fmincon"
Datentypen: char | string | function_handle
Name-Wert-Argumente
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 beix. Der Solver versucht,c(x) <= 0für alle Einträge vonczu erfüllen.ceq(x)ist das Array der nichtlinearen Gleichheitsbeschränkungen beix. Der Solver versucht,ceq(x) = 0für alle Einträge vonceqzu 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
lsqnonlinundlsqcurvefitmuss die Zielfunktion ein Arrayxakzeptieren und einen Skalar zurückgeben. Wenn die OptionSpecifyObjectiveGradienttrueist, muss die Zielfunktion eine zweite Ausgabe zurückgeben, einen Vektor, der den Gradienten des Ziels darstellt. Einzelheiten finden Sie unterfun.Für
lsqnonlinmuss die Zielfunktion einen Vektorxakzeptieren und einen Vektor zurückgeben. Wenn die OptionSpecifyObjectiveGradienttruelautet, muss die Zielfunktion eine zweite Ausgabe zurückgeben, eine Matrix, die die Jacobi-Matrix des Ziels darstellt. Einzelheiten finden Sie unterfun.Für
lsqcurvefitmuss die Zielfunktion zwei Eingaben,xundxdata, akzeptieren und einen Vektor zurückgeben. Wenn die OptionSpecifyObjectiveGradienttruelautet, muss die Zielfunktion eine zweite Ausgabe zurückgeben, eine Matrix, die die Jacobi-Matrix des Ziels darstellt. Einzelheiten finden Sie unterfun.
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
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
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Website auswählen
Wählen Sie eine Website aus, um übersetzte Inhalte (sofern verfügbar) sowie lokale Veranstaltungen und Angebote anzuzeigen. Auf der Grundlage Ihres Standorts empfehlen wir Ihnen die folgende Auswahl: .
Sie können auch eine Website aus der folgenden Liste auswählen:
So erhalten Sie die bestmögliche Leistung auf der Website
Wählen Sie für die bestmögliche Website-Leistung die Website für China (auf Chinesisch oder Englisch). Andere landesspezifische Websites von MathWorks sind für Besuche von Ihrem Standort aus nicht optimiert.
Amerika
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)