Vous êtes sur la page 1sur 6

TP N° 05 Optimisation FMP

UNIVERSITE KASDI MERBAH OUARGLA


FACULTE DES SCIENCES APPLIQUEES
DEPARTEMENT DE GENIE MECANIQUE
Master I Fabrication Mécanique et Productique

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

 [x,fval,exitflag]=fminunc(...)Renvoie la valeur exitflag qui décrit la condition de sortie.

 [x,fval,exitflag,output] = fminunc(...)Renvoie une sortie de structure qui contient

des informations sur l'optimisation.


 [x,fval,exitflag,output,grad] = fminunc(...)renvoi en grad la valeur du
gradient de la fonction objectif à la solution x.
 [x,fval,exitflag,output,grad,hessian] = fminunc(...)renvoi en hessian la
valeur de l’hesseinne de la fonction objectif à la solution x

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

Display Niveau d'affichage:


'off' aucun affichage de sortie
'iter' Affiche la sortie à chaque itération et donne le message de
sortie par défaut.
'iter-detailed' Affiche la sortie à chaque itération et donne le
message technique de sortie.
'notify' Affiche la sortie uniquement si la fonction ne converge pas
et donne le message de sortie par défaut.
'notify-detailed' Affiche la sortie uniquement si la fonction ne
converge pas et donne le message technique de sortie.
'final' Affiche uniquement la sortie finale et donne le message de
sortie par défaut.
'final-detailed' Affiche uniquement la sortie finale et donne le
message de sortie technique.
FunValCheck Vérifiez si les valeurs de la fonction objective sont valides. 'On' affiche une erreur
lorsque la fonction objective renvoie une valeur qui est complexe, Inf, ou NaN. La
valeur par défaut, 'off', n’affiche aucune erreur.
GradObj Gradient de la fonction objective définie par l'utilisateur.
LargeScale Utilisez, si possible, un algorithme à grande échelle si vous le configurez par défaut
'on'. Utilisez un algorithme de taille moyenne lorsque vous sélectionnez 'off'.
MaxFunEvals Nombre maximum d'évaluations de fonctions autorisées, un nombre entier positif.
La valeur par défaut est 100 * nombre de variables.
MaxIter Nombre maximal d'itérations autorisé, un nombre entier positif. La valeur par
défaut est 400.
OutputFcn Spécifiez une ou plusieurs fonctions définies par l'utilisateur qu'une fonction
d'optimisation appelle à chaque itération, soit comme une fonction extérieure, soit
comme un groupe de fonctions. La valeur par défaut est none ([])
PlotFcns Trace de différentes mesures de la progression pendant que l'algorithme s'exécute.
La valeur par défaut est none ([]).
TolFun Tolérance de terminaison sur la valeur de la fonction objectif, un scalaire positif. La
valeur par défaut est 1e-6.
TolX Tolérance de terminaison sur x, un scalaire positif. La valeur par défaut est 1e-6.
TypicalX Valeurs typiques de x. Le nombre d'éléments dans TypicalX est égal au nombre
d'éléments en x0, le point de départ. La valeur par défaut est celle (nombre de
variable, 1). fminunc utilise TypicalX pour réduire les différences finies pour
l'estimation de gradient

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

the default value of the function tolerance.


<stopping criteria details>
x =
0.5000 -1.0000
fval =
3.6609e-015
exitflag =
1
output =
iterations: 8
funcCount: 66
stepsize: 1
firstorderopt: 1.2284e-007
algorithm: 'medium-scale: Quasi-Newton line search'
message: [1x438 char]

COMPTE RENDU (A REMETTRE SUR PLACE)

Le temps et le coût de production d’une opération de chariotage sont donnés respectivement par les
relations suivantes
Tu  AV . c1a 3/a 3 . f  a1a 3/a 3 .a  a 2/a 3 .K  1/a 3 .tcs  th  tr
. c1. f 1  AV
. c
1 a 3  /a 3
.f 
a1 a 3  /a 3
.a 
a 2/a 3 
.K 
1/a 3 
. c1. 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

Tableau 1 Les paramètres d’usinage


Paramètre Valeur Paramètre Valeur

L 203 mm tR 0.13 min/ passe

D 152 mm th 1.5 min/ passe



Vmin 30 m / min  max 500 C
Vmax 200 m / min a1 0.29
f min 0.254 mm / tr a2 0.35
f max 0.762 mm / tr a3 0.25
SFmax 2 m K 193.3
SRmax 8 m t cs 0.5 min/ arrête
Pmax 5 KW C0 0.1 u / min
Fmax 1100 N Ct 0.5 u / arrête

Trouver les conditions de coupe optimums qui minimisent les deux critères d’optimisation avec la
fonction fminunc.
Conclure

Mise à jour 2018 4/6 Dr. BELLOUFI


TP N° 05 Optimisation FMP

SOLUTION COMPTE RENDU


function f = temps(x)
%%%%%%%%%%%%la fonction objectif 1 le temps 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 = 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))*tcs+th+tr;

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)

Mise à jour 2018 5/6 Dr. BELLOUFI


TP N° 05 Optimisation FMP

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%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

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.9998 - 0.0006i 0.0138 + 0.0070i -0.0027 - 0.0627i
fval =
-2.2807 - 3.5225i
exitflag =
5
output =
iterations: 2
funcCount: 224
stepsize: 1
firstorderopt: 0.9567
algorithm: 'medium-scale: Quasi-Newton line search'
message: [1x362 char]

CONCLUSION
La fonction fminunc ne convient pas de résoudre ce genre de problèmes

Mise à jour 2018 6/6 Dr. BELLOUFI

Vous aimerez peut-être aussi