Guide de référence

Optimisation basée sur les solveurs dans MATLAB

Définir et résoudre des problèmes d'optimisation, de moindres carrés et des systèmes d'équations non linéaires. Utiliser la tâche Optimize du Live Editor pour vous guider dans ce workflow.

1. Regrouper les variables d'optimisation dans un seul vecteur \( x \). Écrire l'objectif et les contraintes en fonction de \( x \).

Type d'objectif Forme mathématique Exemple
Linéaire \( f^{T} x \) f = [-1 0 -5];
Quadratique \( x^{T}H x + f^{T} x \) H = [5 1 0; 1 3 0; 0 0 0];
Moindres carrés

\( \| 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
Général \( f(x) \) function objval = fobj(x)
objval = 3*(x(1)-x(2))^4;
end
Type de contrainte Forme mathématique Exemple
Borne \( l \leq x \leq u \) lb = zeros(n,1);
ub = 5*ones(n,1);
Linéaire

\( A x \leq b \)

\( A_{eq} x = b_{eq} \)

A = [1 0 1; 0 -2 1];
b = [4; 2];
A = [1 0 2
beq = 1;
Cône du second ordre \( \| 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);
Général

\( 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
Entier \( x_j \in \mathbb{Z}^n \) intcon = [1 2]

2. Choisir un solveur correspondant aux types d'objectif et de contraintes.

Les solveurs d'Optimization Toolbox™ utilisent des dérivées, sont généralement plus rapides et s'adaptent aux grands problèmes. Les solveurs de Global Optimization Toolbox (en italique) et de MATLAB (*) n'utilisent pas de dérivées et cherchent des minima globaux.

3. Définir le point initial si c'est nécessaire et les options si vous le souhaitez. Appeler le solveur et obtenir la solution.

Point initial

Exemples :

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

Options

Utilisez optimoptions pour définir les critères d'arrêt, les fonctions de tracé, la population initiale, etc.

Exemples :

opts = optimoptions('fmincon','Display','iter')
Résolution

Exemples :

[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)

En savoir plus :