Le module optimization fournit des solveurs numériques directs et une couche de modélisation par problème. Utiliser les solveurs directs lorsque les matrices de coefficients, la fonction résiduelle ou la fonction objectif sont déjà disponibles. Utiliser la couche par problème lorsque le modèle est plus lisible sous forme de variables, expressions et contraintes.
| Type de problème | Solveur direct | Entrées usuelles |
|---|---|---|
| Minimisation scalaire bornée | fminbnd | Fonction objectif et intervalle fini. |
| Minimisation sans contrainte | fminunc, fminsearch | Fonction objectif et point initial. |
| Recherche de zéro | fzero | Fonction et encadrement ou point initial. |
| Programmation linéaire | linprog | Objectif linéaire, contraintes linéaires et bornes. |
| Programmation linéaire mixte entière | intlinprog | Objectif linéaire, indices entiers, contraintes et bornes. |
| Programmation quadratique | quadprog | Objectif quadratique, contraintes linéaires et bornes. |
| Minimisation non linéaire contrainte | fmincon | Objectif non linéaire, contraintes et bornes. |
| Moindres carrés | lsqnonneg, lsqnonlin | Modèle résiduel linéaire ou non linéaire. |
| Systèmes non linéaires | fsolve | Fonction vectorielle et point initial. |
Le comportement des solveurs se contrôle avec optimoptions ou optimset. Utiliser optimget pour lire une option avec une valeur de repli. Les problèmes linéaires et linéaires mixtes entiers utilisent le backend HiGHS lorsqu'il est disponible. La compilation problem-based route les problèmes linéaires continus, linéaires mixtes entiers, quadratiques et non linéaires contraints vers le solveur direct correspondant. Les problèmes non linéaires avec variables entières ou binaires sont refusés explicitement.
Le workflow par problème commence avec optimvar et optimproblem. Les expressions et contraintes sont construites avec l'arithmétique ordinaire. solve appelle un solveur direct pris en charge, et prob2struct retourne la structure de solveur direct pour inspection ou exécution bas niveau.
Les variables binaires créées avec optimvar ont par défaut les bornes 0 et 1. Les variables entières et binaires dirigent les modèles linéaires vers intlinprog; les modèles linéaires continus vers linprog; les modèles continus non linéaires contraints vers fmincon. Les problèmes de maximisation sont convertis en interne en minimisation, puis solve retourne la valeur objectif dans le sens original du problème.
Lorsqu'un solveur direct prouve qu'un problème est infaisable et ne retourne pas de vecteur primal, solve retourne une structure de solution avec les noms des variables du modèle et des valeurs vides. Les diagnostics comme exitflag et output.message restent ainsi disponibles sans erreur de dépaquetage du résultat.
opts = optimset('Display', 'off');
[x, fval] = fminbnd(@(x) (x - 1.5)^2 + 0.25, -2, 4, opts)
fun = @(x) 3*x(1)^2 + 2*x(1)*x(2) + x(2)^2 - 4*x(1) + 5*x(2);
opts = optimoptions('fminunc', 'Display', 'off');
[x, fval] = fminunc(fun, [1, 1], opts)
f = [-1; -1];
A = [1 2; 4 2];
b = [4; 12];
opts = optimoptions('linprog', 'Display', 'off');
[x, fval, exitflag] = linprog(f, A, b, [], [], [0; 0], [], opts)
f = [-5; -4; -3];
intcon = 1:3;
A = [2 3 1; 4 1 2];
b = [5; 8];
lb = [0; 0; 0];
ub = [1; 1; 1];
opts = optimoptions('intlinprog', 'Display', 'off');
[x, fval, exitflag] = intlinprog(f, intcon, A, b, [], [], lb, ub, [], opts)
x = optimvar('x', 2, 'LowerBound', 0);
prob = optimproblem('Objective', -x(1) - x(2));
prob.Constraints.capacity = [1 2; 4 2] * x <= [4; 12];
problem = prob2struct(prob);
[sol, fval, exitflag] = solve(prob);
sol.x
| Version | Description |
|---|---|
| 2.0.0 | tutoriel ajouté |