Cheat Sheets

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.

3. Definieren Sie, falls erforderlich, den Anfangspunkt und ggf. gewünschte Optionen. Rufen Sie den Solver auf und erhalten Sie eine Lösung.

Anfangspunkt

Beispiele:

x0 = lb + 0.5*(ub-lb)
x0 = zeros(n,1)

Optionen

Verwenden Sie optimoptions, um Stoppkriterien, Diagrammfunktionen, Anfangspopulation und mehr einzurichten.

Beispiele:

opts = optimoptions('fmincon','Display','iter')
Lösen

Beispiele:

[x,fval] = fmincon(@fobj,x0,A,b,Aeq,beq,lb,ub,@nlcons,opts)
[x,fval,eflag] = ga(@fobj,nvars)
x = lsqlin(C,d,A,b,[],[],lb)

Weitere Informationen: