Solver-basierte Optimierung in MATLAB
Definieren und lösen Sie Optimierungs- und Kleinste-Quadrate-Probleme sowie nichtlineare Gleichungssysteme. Verwenden Sie den Optimize Live Editor Task, um Sie durch diesen Workflow zu führen.
1. Gruppieren Sie die Optimierungsvariablen in einen einzelnen Vektor \( x \). Schreiben Sie Vorgabe und Randbedingungen bezogen auf \( x \).
| Vorgabenart | Mathematische Form | Beispiel |
|---|---|---|
| Linear | \( f^{T} x \) | f = [-1 0 -5]; |
| Quadratisch | \( x^{T}H x + f^{T} x \) | H = [5 1 0; 1 3 0; 0 0 0]; |
| Kleinste Quadrate | \( \| Cx - d \|_2 \) \( \sum F_i(x)^2 \) |
C = [7 8 10; 1 3 4; 2 5 7];d = [2; 1; 1.5];function F = myF(x)F(1) = f1(x);F(2) = f2(x);end |
| Allgemein | \( f(x) \) | function objval = fobj(x)objval = 3*(x(1)-x(2))^4;end |
| Art der Randbedingung | Mathematische Form | Beispiel |
|---|---|---|
| Grenze | \( l \leq x \leq u \) | lb = zeros(n,1);ub = 5*ones(n,1); |
| Linear | \( A x \leq b \) \( A_{eq} x = b_{eq} \) |
A = [1 0 1; 0 -2 1];b = [4; 2];Aeq = [1 0 2];beq = 1; |
| Kegel zweiter Ordnung | \( \| A_{sc} x - b_{sc} \| \leq d_{sc} x - \gamma \) | A = diag([1,1/2,0]);b = zeros(3,1);d = [0;0;1];gamma = 0;socConstraints =secondordercone(A,b,d,gamma); |
| Allgemein | \( c(x) \leq 0 \) \( c_{eq}(x) = 0 \) |
function[c,ceq] = nlcons(x)c(1) = x(1).^2 + x(2).^2 - 1;c(2) = x(1)*x(3) - 5;ceq = [];end |
| Ganzzahl | \( x_j \in \mathbb{Z}^n \) | intcon = [1 2] |
2. Wählen Sie einen Solver, der den Arten von Vorgabe und Randbedingungen entspricht.
Solvers in der Optimization Toolbox™ verwenden Ableitungen, sind in der Regel schneller und skalieren auf größere Probleme. Solvers in der Global Optimization Toolbox (italic) und MATLAB (*) verwenden keine Ableitungen und suchen nach globalen Minima.
| Art der Randbedingung | Vorgabenart | ||||||
|---|---|---|---|---|---|---|---|
| Linear | Quadratisch | Kleinste Quadrate | Allgemein glatt | Allgemein nichtglatt | Mehrzielvorgabe | ||
| Keine | quadprog |
lsqcurvefitlsqnonlinmldivide |
fminsearch* |
fminsearch* |
fgoalattain |
||
| Grenze | linprog |
quadprog |
lsqcurvefit |
fmincon |
surrogateopt |
fgoalattain |
|
| Linear | linprog |
quadprog |
lsqlin |
fmincon |
patternsearchsurrogateopt |
fgoalattain |
|
| Kegel zweiter Ordnung | coneprog |
coneprog |
|||||
| Allgemein glatt | fmincon |
fmincon |
fmincon |
fmincon |
patternsearchga |
fgoalattain |
|
| Allgemein nichtglatt | patternsearchsurrogateopt |
patternsearchsurrogateopt |
patternsearchsurrogateopt |
patternsearchsurrogateopt |
patternsearch |
paretosearch |
|
| Ganzzahl | intlinprog |
ga |
|||||
3. Definieren Sie, falls erforderlich, den Anfangspunkt und ggf. gewünschte Optionen. Rufen Sie den Solver auf und erhalten Sie eine Lösung.
| Optionen |
|---|
Verwenden Sie Beispiele: opts = optimoptions('fmincon','Display','iter')
|
| Weitere Möglichkeiten |
|---|
|