Académique Documents
Professionnel Documents
Culture Documents
TP N° 05
Résolution d’un problème d’optimisation linéaire
INTRODUCTION
Pour la résolution d’un problème d’optimisation non linéaire sans contraintes on utilise la fonction de
référence fminunc
SYNTAXE
x = fminunc(fun,x0)
x = fminunc(fun,x0,options)
x = fminunc(problem)
[x,fval] = fminunc(...)
[x,fval,exitflag] = fminunc(...)
[x,fval,exitflag,output] = fminunc(...)
[x,fval,exitflag,output,grad] = fminunc(...)
[x,fval,exitflag,output,grad,hessian] = fminunc(...)
DESCRIPTION
fminunc tente de trouver un minimum d’une fonction scalaire de plusieurs variables, en commençant
par une estimation initiale. Il s'agit généralement d'une optimisation non linéaire sans contrainte.
x = fminunc(fun,x0) Commence au point x0 et tente de trouver un minimum local x de la
fonction considérées. X0 peut être un scalaire, un vecteur ou une matrice.
x = fminunc(fun,x0,options) Minimiseavec les options d'optimisation spécifiées dans la
structure des options. Utilisez optimset pour définir ces options.
x = fminunc(problem) Trouve le minimum pour le problème d’optimisation problem
[x,fval] = fminunc(...)renvoie la valeur de la fonction objectif à la solution
ARGUMENTS D'ENTREE
Arguments de fonction contient des descriptions générales d'arguments passés dans fminunc.
Mise à jour 2018 1/6 Dr. BELLOUFI
TP N° 05 Optimisation FMP
fun La fonction à minimiser. fun est une fonction qui accepte un vecteur x et renvoie un
scalaire f, la fonction objective évaluée à x. La fonction fun peut être spécifiée
comme une fonction extérieure.
options Options fournit les détails spécifiques à la fonction pour les valeurs des options.
problem Objective, x0, solver, options
ARGUMENTS DE SORTIE
Arguments de fonctions contient des descriptions générales des arguments renvoyés par linprog.
Cette section fournit des détails spécifiques à la fonction pour exitflag, lambda et output
Entier identifiant la raison pour laquelle l'algorithme s'est terminé. Ce qui suit
exitflag répertorie les valeurs de exitflag et les raisons correspondantes pour lesquelles
l'algorithme s'est terminé.
1 L'ampleur du gradient est inférieure à la tolérance TolFun.
2 La variation de x était inférieure à la tolérance Tolx.
La variation de la valeur de la fonction objective était inférieure à la
3
tolérance TolFun.
La diminution prévue de la fonction objective était inférieure à la
5
tolérance TolFun.
Le nombre d'itérations dépassait options.MaxIter. Le nombre
0
maximum d'évaluations de fonctions dépassait les options.FunEvals.
-1 L'algorithme a été terminé par la fonction de sortie.
grad Gradient at x
hessian Hessien à x
Structure contenant des informations sur l'optimisation. Les champs de la structure
output
sont:
iterations Nombre d'itérations
funcCount Nombre d'évaluations de fonction
firstorderopt Mesure de l'optimalité du premier ordre
algorithm Algorithme d'optimisation utilisé
Nombre total d'itérations PCG « Preconditioned conjugate gradients
cgiterations
method » (algorithme à grande échelle uniquement)
stepsize Déplacement final en x (algorithme de taille moyenne uniquement)
message Message de sortie
OPTIONS
DerivativeCheck Comparez les dérivés fournis par l'utilisateur (gradient d'objectif) aux dérivés de
différenciation finie. Les choix sont 'on' ou 'off' par défaut.
Diagnostics Afficher les informations de diagnostic sur la fonction à minimiser ou à résoudre. Le
choix est 'on' ou 'off' par défaut.
DiffMaxChange Variation maximale des variables pour les gradients de différence finie (un scalaire
positif). La valeur par défaut est 0.1.
DiffMinChange Variation minimale des variables pour les gradients de différence finie (un scalaire
positif). La valeur par défaut est 1e-8.
Mise à jour 2018 2/6 Dr. BELLOUFI
TP N° 05 Optimisation FMP
EXEMPLE
Minimiser la fonction
min f x e x 1 4x 12 2x 2 2 4x 1x 2 2x 2 1
x
SOLUTION
Définissez votre fonction objectif
Écrivez un fichier foncobj.m
function f = foncobj(x)
f = exp(x(1)) * (4*x(1)^2 + 2*x(2)^2 + 4*x(1)*x(2) + 2*x(2) + 1);
Enregistrez le fichier
Utiliser la fonction d'optimisation sans contrainte fminunc
x0 = [-1,1]; % points de départ
options = optimset('LargeScale','off');
[x,fval,exitflag,output] = fminunc(@foncobj,x0,options)
Enregistrez le fichier
Executer
Cela produit la sortie suivante
Local minimum found.
Optimization completed because the size of the gradient is less than
Mise à jour 2018 3/6 Dr. BELLOUFI
TP N° 05 Optimisation FMP
Le temps et le coût de production d’une opération de chariotage sont donnés respectivement par les
relations suivantes
Tu AV . c1a 3/a 3 . f a1a 3/a 3 .a a 2/a 3 .K 1/a 3 .tcs th tr
. c1. f 1 AV
. c
1 a 3 /a 3
.f
a1 a 3 /a 3
.a
a 2/a 3
.K
1/a 3
. c1. f 1 AV
Cu C0 . AV . C0 .tcs Ct C0 t h t r
.D .L
Avec A , V c : vitesse de coupe, f : avance par tour, a : profondeur de passe
1000
Les paramètres d’usinage sont donnés dans le tableau 1
Trouver les conditions de coupe optimums qui minimisent les deux critères d’optimisation avec la
fonction fminunc.
Conclure
function f = cout(x)
%%%%%%%%%%%%la fonction objectif 1 le cout de production%%%%%%%%%%%%%%%%%%%
D=152;
L=203;
A=(pi*D*L)/1000;
a1=0.29;
a2=0.35;
a3=0.25;
tcs=0.5;
th=1.5;
tr=0.13;
C0=0.1;
Ct=0.5;
K=193.3;
f = C0*A.*(x(1).^-1)*(x(2).^-1)+A.*(x(1).^((1-a3)/a3))*(x(2).^((a1-
a3)/a3))*(x(3).^(a2/a3))*(K^(-1/a3))*(C0*tcs+Ct)+C0*(th+tr);
%**************************************************************************
%%%%%%%%%%%%%%%%%%Programme principal%%%%%%%%%%%%%%%%%%%
%**************************************************************************
clc
close all
clear all
x0 = [200,0.4,2]; % points de départ
options = optimset('LargeScale','off');
options = optimset('LargeScale','off');
disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')
disp('%%%%%%%%%%%%%%%%critère du temps de production%%%%%%%%%%%%%%%%%%%%%')
disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')
[x,fval,exitflag,output] = fminunc(@temps,x0,options)
disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')
disp('%%%%%%%%%%%%%%%%critère du cout de production%%%%%%%%%%%%%%%%%%%%%')
disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%')
[x,fval,exitflag,output] = fminunc(@cout,x0,options)
RESULTATS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%critère du temps de production%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Local minimum possible.
fminunc stopped because it cannot decrease the objective function
along the current search direction.
<stopping criteria details>
x =
1.0e+002 *
1.9997 - 0.0002i 0.0238 + 0.0059i -0.0020 - 0.0132i
fval =
1.4747 - 0.3830i
exitflag =
5
output =
iterations: 3
funcCount: 80
stepsize: 1.0000
firstorderopt: 0.5043
algorithm: 'medium-scale: Quasi-Newton line search'
message: [1x362 char]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%critère du cout de production%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
CONCLUSION
La fonction fminunc ne convient pas de résoudre ce genre de problèmes