fmincon
Minimisation non linéaire contrainte.
📝Syntaxe
x = fmincon(fun, x0, A, b)
x = fmincon(fun, x0, A, b, Aeq, beq, lb, ub, nonlcon, options)
[x, fval, exitflag, output, lambda, grad, hessian] = fmincon(___)
x = fmincon(problem)
📥Arguments d'entrée
Paramètre Description
fun fonction objectif retournant un scalaire réel.
x0 point initial.
A, b inégalités linéaires A*x <= b.
Aeq, beq égalités linéaires Aeq*x = beq.
lb, ub bornes inférieures et supérieures.
nonlcon fonction de contraintes non linéaires retournant c et ceq.
options options créées avec optimoptions ou optimset.
📤Arguments de sortie
Paramètre Description
x minimiseur calculé.
fval valeur de l'objectif en x.
exitflag indicateur de terminaison.
output structure de diagnostic.
lambda structure des multiplicateurs de Lagrange.
grad gradient de l'objectif en x.
hessian hessien approché du Lagrangien.
đź“„Description

fmincon résout des problèmes de minimisation non linéaire avec contraintes linéaires, bornes et contraintes non linéaires.

Le chemin sqp résout des sous-problèmes quadratiques avec contraintes actives linéarisées, mises à jour BFGS du hessien et recherche linéaire sur une fonction de mérite. Les contraintes non linéaires sont traitées directement dans le sous-problème SQP avec des jacobiens par différences finies ou fournis par l'utilisateur.

Le chemin interior-point construit un point initial intérieur avec une continuation de barrière logarithmique avant d'entrer dans la phase SQP non linéaire. Le chemin active-set maintient un ensemble actif explicite et indique les lignes linéaires actives dans output.activeconstraints. Le chemin sqp-legacy utilise une boucle SQP conservatrice séparée avec sous-problèmes à ensemble actif et décroissance de mérite plus stricte.

Pour les problèmes mal mis à l'échelle, utiliser ScaleProblem avec la valeur obj-and-constr et fournir TypicalX. Nelson met les sous-problèmes SQP à l'échelle, initialise le hessien avec les échelles des variables et applique des tests de décroissance de mérite mis à l'échelle.

Si le SQP non linéaire ne peut pas restaurer la faisabilité, Nelson lance une phase de restauration par continuation pénalisée et renseigne output.restoration lorsque cette phase fournit le point retourné.

Le chemin trust-region-reflective prend en charge les problèmes avec bornes et égalités linéaires, gradients utilisateur, matrices de hessien, callbacks de hessien ou callbacks de multiplication par le hessien, gradients conjugués tronqués projetés, préconditionnement diagonal ou bande et mises à jour du rayon de région de confiance. La structure output inclut des diagnostics de gradients conjugués comme pcgflag, pcgresidual et trustregionradius.

Les modes d'affichage acceptés sont off, none, final, final-detailed, notify, notify-detailed, iter et iter-detailed. Avec Diagnostics à on, Nelson affiche un résumé des variables, fonctions, contraintes et de l'algorithme sélectionné avant la résolution.

Les options par défaut dépendent de l'algorithme : interior-point utilise MaxIterations 1000, MaxFunctionEvaluations 3000, StepTolerance 1e-10 et SubproblemAlgorithm 'factorization' ; les autres algorithmes utilisent MaxIterations 400, MaxFunctionEvaluations '100*numberOfVariables' et StepTolerance 1e-6.

La sortie exitflag vaut 1 (optimalité du premier ordre atteinte), 2 (pas inférieur à StepTolerance), 3 (variation de l'objectif inférieure à FunctionTolerance, trust-region-reflective), 0 (limite d'itérations ou d'évaluations), -1 (arrêt par la fonction de sortie), -2 (aucun point faisable trouvé) ou -3 (objectif sous ObjectiveLimit).

đź’ˇExemples
Minimiser la fonction de Rosenbrock sur le disque unité.
function [c, ceq] = unitdisk(x)
  c = x(1)^2 + x(2)^2 - 1;
  ceq = [];
end
fun = @(x) 100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;
opts = optimoptions('fmincon', 'Display', 'off', 'Algorithm', 'sqp');
[x, fval] = fmincon(fun, [0; 0], [], [], [], [], [], [], @unitdisk, opts)
Utiliser des contraintes linéaires.
fun = @(x) 100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;
A = [1 2];
b = 1;
[x, fval, exitflag] = fmincon(fun, [-1; 2], A, b)
Utiliser une matrice de hessien avec trust-region-reflective.
function [f, g] = quadobj(x)
  f = (x(1) - 1)^2 + (x(2) - 2)^2;
  g = [2*(x(1) - 1); 2*(x(2) - 2)];
end
opts = optimoptions('fmincon', 'Display', 'off', 'Algorithm', 'trust-region-reflective', ...
  'SpecifyObjectiveGradient', true, 'Hessian', 2*eye(2));
[x, fval] = fmincon(@quadobj, [0; 0], [], [], [], [], [0; 0], [3; 3], [], opts)
Utiliser une fonction de multiplication par le hessien avec trust-region-reflective.
function [f, g] = quadobj(x)
  f = (x(1) - 1)^2 + (x(2) - 2)^2;
  g = [2*(x(1) - 1); 2*(x(2) - 2)];
end
function y = quadhessmult(x, v)
  y = 2*v;
end
opts = optimoptions('fmincon', 'Display', 'off', 'Algorithm', 'trust-region-reflective', ...
  'SpecifyObjectiveGradient', true, 'HessianMultiplyFcn', @quadhessmult);
[x, fval] = fmincon(@quadobj, [0; 0], [], [], [], [], [0; 0], [3; 3], [], opts)
đź”—Voir aussi
optimoptionsfminsearchquadprogsolve
Used Functions
optimoptionsoptimsetquadprogfminsearch
📚Bibliographie
Powell, M. J. D., A fast algorithm for nonlinearly constrained optimization calculations, Lecture Notes in Mathematics, 1978. Han, S. P., A globally convergent method for nonlinear programming, Journal of Optimization Theory and Applications, 1977. Gill, P. E., Murray, W. et Wright, M. H., Practical Optimization, Academic Press, 1981. Nocedal, J. et Wright, S. J., Numerical Optimization, Springer, 2006. Byrd, R. H., Schnabel, R. B. et Shultz, G. A., Approximate solution of the trust region problem by minimization over two-dimensional subspaces, Mathematical Programming, 1988. Conn, A. R., Gould, N. I. M. et Toint, P. L., Trust Region Methods, SIAM, 2000.
đź•”Historique des versions
Version Description
2.0.0 version initiale
Modifier cette page sur GitHub