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 2beq = 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.
| Type de contrainte | Type d'objectif | ||||||
|---|---|---|---|---|---|---|---|
| Linéaire | Quadratique | Moindres carrés | Général lisse | Général non lisse | Multi-objectif | ||
| Aucune | quadprog |
lsqcurvefitlsqnonlinmldivide |
fminsearch |
fminsearch |
fgoalattain |
||
| Borne | linprog |
quadprog |
lsqcurvefit |
fmincon |
surrogateopt |
fgoalattain |
|
| Linéaire | linprog |
quadprog |
lsqlin |
fmincon |
patternsearchsurrogateopt |
fgoalattain |
|
| Cône du second ordre | coneprog |
coneprog |
|||||
| Général lisse | fmincon |
fmincon |
fmincon |
fmincon |
patternsearchga |
fgoalattain |
|
| Général non lisse | patternsearchsurrogateopt |
patternsearchsurrogateopt |
patternsearchsurrogateopt |
patternsearchsurrogateopt |
patternsearch |
paretosearch |
|
| Entier | intlinprog |
ga |
|||||
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.
| Options |
|---|
Utilisez Exemples : opts = optimoptions('fmincon','Display','iter')
|
| Aller plus loin |
|---|
|