ETUDE DE LA METHODE D'OPTIMISATION DE RACKWITZ - ISIMA
ETUDE DE LA METHODE D'OPTIMISATION DE RACKWITZ - ISIMA
ETUDE DE LA METHODE D'OPTIMISATION DE RACKWITZ - ISIMA
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Institut Supérieur d’Informatique,<br />
Polytech’ Clermont-Ferrand<br />
de Modélisation et de leurs Applications<br />
Complexe des Cézeaux<br />
Complexe des Cézeaux<br />
BP 125 BP 206<br />
63173 Aubière Cedex 63174 Aubière Cedex<br />
Rapport de projet de 3 ème année<br />
Filière F4 - Calcul et modélisation scientifiques<br />
________________________________________________________________________________<br />
<strong>ETU<strong>DE</strong></strong> <strong>DE</strong> <strong>LA</strong> METHO<strong>DE</strong> D’OPTIMISATION<br />
<strong>DE</strong> <strong>RACKWITZ</strong><br />
________________________________________________________________________________<br />
Présenté par : Benoît GAL<strong>LA</strong>ND et Christophe MAETZ<br />
Responsable : Michel FOGLI (Polytech' Clermont-Ferrand)<br />
Durée : 100h<br />
Octobre 2007 à mars 2008
Institut Supérieur d’Informatique,<br />
Polytech’ Clermont-Ferrand<br />
de Modélisation et de leurs Applications<br />
Complexe des Cézeaux<br />
Complexe des Cézeaux<br />
BP 125 BP 206<br />
63173 Aubière Cedex 63174 Aubière Cedex<br />
Rapport de projet de 3 ème année<br />
Filière F4 - Calcul et modélisation scientifiques<br />
________________________________________________________________________________<br />
<strong>ETU<strong>DE</strong></strong> <strong>DE</strong> <strong>LA</strong> METHO<strong>DE</strong> D’OPTIMISATION<br />
<strong>DE</strong> <strong>RACKWITZ</strong><br />
________________________________________________________________________________<br />
Présenté par : Benoît GAL<strong>LA</strong>ND et Christophe MAETZ<br />
Responsable : Michel FOGLI (Polytech' Clermont-Ferrand)<br />
Durée : 100h<br />
Octobre 2007 à mars 2008
Remerciements<br />
Nous remercions M. Michel Fogli, notre responsable de projet, pour son aide et ses<br />
conseils pour la compréhension de l’algorithme principal et l’élaboration du projet. Nous<br />
remercions également M. Jonas Koko, professeur à l’<strong>ISIMA</strong>, pour ses explications dans<br />
l’utilisation de fonctions d’optimisation de Matlab.
Table des figures et illustrations<br />
1.1 Représentation graphique de la fonction contrainte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9<br />
1.2 Illustration de l’algorithme de Rackwitz (initialisation) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />
1.3 Illustration de l’algorithme de Rackwitz (itération 1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />
1.4 Illustration de l’algorithme de Rackwitz (itération 2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />
1.5 Illustration de l’algorithme de Rackwitz (solution) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />
3.1 Exécution de l’algorithme de Rackwitz dans le cas d’un hyperplan en 2D . . . . . . . . . . . . . 21<br />
3.2 Convergence en nombre d’itérations dans le cas d’un hyperplan . . . . . . . . . . . . . . . . . . . . . 22<br />
3.3 Convergence en temps d’exécution dans le cas d’un hyperplan . . . . . . . . . . . . . . . . . . . . . . 22<br />
3.4 Influence de l’initialisation sur le nombre d’itérations dans le cas d’un hyperplan . . . . . . . . 22<br />
3.5 Intersections possibles entre une droite issue de l’origine et une parabole . . . . . . . . . . . . . . 23<br />
3.6 Intersections possibles entre une droite issue de l’origine et une hyperbole . . . . . . . . . . . . . 23<br />
3.7 Cas de non convergence de l’algorithme de Rackwitz avec une parabole. . . . . . . . . . . . . . . 24<br />
3.8 Exécution de l’algorithme de Rackwitz avec un domaine non connexe . . . . . . . . . . . . . . . . 25<br />
3.9 Exécution de l’algorithme de Rackwitz avec un domaine non connexe (zoom) . . . . . . . . . . 26<br />
3.10 Convergence en nombre d’itérations dans le cas de paraboloïdes / hyperboloïdes . . . . . . . . 26<br />
3.11 Exemple d’un domaine délimité par un cercle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />
3.12 Convergence en nombre d’itérations dans le cas d’ellipsoïdes . . . . . . . . . . . . . . . . . . . . . . . 28<br />
3.13 Convergence en nombre d’itérations pour des cas divers . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />
3.14 Convergence en temps d’exécution pour des cas divers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Résumé<br />
L’objet de ce projet est l’étude de la méthode d’optimisation de Rackwitz. Nous avons testé<br />
cette méthode récente, principalement utilisée dans le domaine de la fiabilité, sur un problème<br />
d’optimisation non linéaire : la minimisation, dans un espace à n dimensions, d’une norme d’un<br />
vecteur avec une fonction contrainte non linéaire.<br />
Notre travail a consisté tout d’abord à implémenter l’algorithme de Rackwitz, puis deux<br />
autres algorithmes itératifs de type gradient projeté et lagrangien augmenté. La méthode de<br />
Rackwitz a été analysée quant à sa convergence et comparée aux autres méthodes selon des critères<br />
que nous avons sélectionnés.<br />
L’implémentation des différentes méthodes d’optimisation ainsi que la visualisation des<br />
résultats ont été faites dans l’environnement Matlab.<br />
Mots-clés :<br />
optimisation non linéaire, algorithme de Rackwitz, gradient projeté,<br />
lagrangien augmenté, Matlab<br />
Abstract<br />
The purpose of this project is the study of the Rackwitz optimization method. We have tested<br />
this recent method, principally used in the reliability domain, on a nonlinear optimization<br />
problem: the minimization, in a n-dimensional space, of a vector’s norm with a nonlinear constraint<br />
function.<br />
We have first implemented the Rackwitz algorithm, then two other iterative algorithms,<br />
projected gradient and augmented Lagrangian methods. We have analysed the Rackwitz method<br />
about its convergence and compared it to the other methods with criteria we have selected.<br />
The implementation of the different optimization methods and the visualization of results<br />
have been realized in the Matlab environment.<br />
Keywords :<br />
nonlinear optimization, Rackwitz algorithm, projected gradient<br />
augmented Lagrangian, Matlab
Table des matières<br />
Remerciements<br />
Table des figures et illustrations<br />
Résumé / Abstract<br />
Table des matières<br />
Introduction 7<br />
1. L’algorithme de Rackwitz 8<br />
1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />
1.2 Convergence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />
1.3 Principe de l’algorithme et exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />
1.4 Le schéma de l’algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />
1.5 L’implémentation en Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13<br />
2. Les algorithmes de comparaison 15<br />
2.1 L’algorithme de type gradient projeté . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />
2.2 L’algorithme de type lagrangien augmenté . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17<br />
2.3 L’implémentation en Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />
3. Exemples d’application et résultats comparés 20<br />
3.1 Critères de comparaison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />
3.2 Cas où le graphe F(x) = 0 est un hyperplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />
3.3 Cas où le graphe F(x) = 0 est un paraboloïde ou un hyperboloïde . . . . . . . . . . . . . . . . . 23<br />
3.4 Cas où le graphe F(x) = 0 est un ellipsoïde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27<br />
3.5 Cas divers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />
Conclusion 30<br />
Bibliographie<br />
Annexes
Introduction<br />
Le problème que nous cherchons à traiter est un problème d’optimisation non linéaire contraint<br />
du type :<br />
où<br />
est une fonction non linéaire<br />
Nous utiliserons la norme euclidienne dans :<br />
Nous allons présenter l’algorithme de Rackwitz, en l’illustrant graphiquement sur un exemple,<br />
puis en présentant le schéma itératif utilisé pour son implémentation. Nous décrirons ensuite les deux<br />
algorithmes de type gradient projeté et lagrangien augmenté, et nous verrons comment ils peuvent<br />
s’appliquer au problème spécifique que nous voulons traiter. Enfin, dans une dernière partie, nous<br />
allons comparer ces trois méthodes d’optimisation, plus précisément la méthode de Rackwitz par<br />
rapport aux deux autres, au moyen de critères que nous choisirons.<br />
7
1. L’algorithme de Rackwitz<br />
1.1. Introduction<br />
Rüdiger Rackwitz [1] est un chercheur de l’université technique de Munich (Allemagne). Il<br />
travaille notamment sur la théorie de la fiabilité, mais également dans l’application de la théorie des<br />
probabilités et des statistiques dans l’ingénierie du bâtiment, et l’optimisation des constructions.<br />
En 1978, il développe l’algorithme qui porte aujourd’hui son nom, et qui est très largement<br />
utilisé en fiabilité structurale. Cet algorithme se base notamment sur les notions de normale à une<br />
courbe et de gradient, et il en existe plusieurs variantes, dont celle dite de Rackwitz-Fiessler [2] [3] .<br />
1.2. Convergence<br />
L’algorithme de Rackwitz est un algorithme non convergent. Par définition, cela signifie qu’il<br />
existe au moins un exemple pour lequel il ne converge pas. Néanmoins, lorsqu’il y a convergence,<br />
c’est l’un des algorithmes qui converge le plus rapidement. Nous allons vérifier cette proposition en<br />
mettant en œuvre cet algorithme sur différents exemples assez représentatifs.<br />
1.3. Principe de l’algorithme et exemple<br />
Nous souhaitons donc résoudre le problème suivant, avec dans :<br />
Minimiser<br />
sous<br />
Pour illustrer l’algorithme, nous avons choisi un exemple en 2D pour lequel il y a convergence,<br />
avec pour contrainte la fonction F suivante :<br />
Le vecteur solution de ce problème est la distance entre l’origine O du repère et le domaine<br />
, colorié en vert sur la figure suivante (Fig. 1.1).<br />
8
Fig. 1.1 - Représentation graphique de la fonction contrainte<br />
Le point d’initialisation est choisi sur la courbe définie par . L’algorithme cherchera<br />
ce point initial au moyen de la méthode de Newton. Pour cela, on cherche, s’il existe, le point sur la<br />
courbe dont les (n-1) premières coordonnées sont fixées à 1, la dernière coordonnée étant le paramètre<br />
de la méthode de Newton. Cette coordonnée x à trouver est telle que :<br />
Sur notre exemple (Fig. 1.2), le point d’initialisation est dont le point :<br />
9
Fig. 1.2 - Illustration de l’algorithme de Rackwitz (initialisation)<br />
Ensuite, une itération de l’algorithme revient à chercher la normale au point courant et ensuite<br />
trouver le point courant suivant en trouvant l’intersection entre la parallèle de la normale passant par<br />
l’origine et la courbe définie par .<br />
Sur notre exemple (Fig. 1.3), la droite rouge en pointillés est la normale en à la courbe<br />
. La droite rouge est la parallèle à cette droite passant par l’origine et coupant, après calcul, la<br />
courbe au point<br />
10
Fig. 1.3 - Illustration de l’algorithme de Rackwitz (itération 1)<br />
Fig. 1.4 - Illustration de l’algorithme de Rackwitz (itération 2)<br />
11
L’algorithme consiste ensuite à réitérer ce calcul de la normale au point courant puis de la<br />
recherche de l’intersection entre la courbe et la parallèle à cette normale passant par<br />
l’origine. Ainsi la normale en est la droite rouge en pointillés (Fig. 1.4) et sa parallèle passant par<br />
l’origine est la droite rouge, qui coupe, après calcul, la courbe au point<br />
Il faut ainsi réitérer ces calculs jusqu’à ce que deux itérations successives vérifient la condition<br />
suivante :<br />
Sur notre exemple (Fig. 1.5), la solution trouvée par l’algorithme de Rackwitz est :<br />
Fig. 1.5 - Illustration de l’algorithme de Rackwitz (solution)<br />
Cette condition d’arrêt signifie que dès que la distance entre deux points successifs est<br />
inférieure à la précision choisie, nous considérons que ces deux points sont confondus et forment donc<br />
la solution recherchée.<br />
12
1.4. Le schéma de l’algorithme<br />
Nous avons implémenté l’algorithme de Rackwitz à partir du schéma suivant :<br />
Initialisation :<br />
Itération :<br />
Condition d’arrêt :<br />
1.5. L’implémentation en Matlab<br />
1.5.1. Remarques générales<br />
Tous les algorithmes du projet, dont celui de Rackwitz, ont été implémentés dans la version 7 du<br />
logiciel Matlab. Tout le code de ce projet est exécutable sur les versions de Matlab équipées de la boîte<br />
à outils Optimization Toolbox, car notre implémentation des algorithmes de comparaison nécessite<br />
l’utilisation de fonctions de minimisation spécifiques.<br />
L’instruction Matlab – format long – permet d’effectuer tous les calculs avec une grande<br />
précision, avec jusqu’à 15 chiffres pour un nombre flottant.<br />
Pour l’implémentation de l’algorithme de Rackwitz, nous avons au préalable écrit plusieurs<br />
fonctions auxiliaires qui seront réutilisées pour les autres algorithmes.<br />
13
1.5.2. Calcul des dérivées<br />
Deux fonctions auxiliaires permettent de calculer une dérivée totale ou partielle ainsi que le<br />
gradient, vecteur des dérivées partielles. Pour le calcul de la dérivée, nous utilisons l’approximation<br />
par différences finies suivante :<br />
si ,<br />
alors<br />
1.3.3. La méthode de Newton<br />
Nous avons implémenté la méthode de Newton pour l’initialisation de l’algorithme de<br />
Rackwitz. En effet, celui-ci nécessite de démarrer d’un point courant situé sur la courbe .<br />
Comme nous traitons des fonctions<br />
, nous appliquons la méthode de Newton sur<br />
la dernière variable de , les valeurs des (n-1) premières variables étant fixées au préalable. Avec cette<br />
hypothèse, il se peut que la méthode de Newton ne trouve pas de solution : dans ce cas, un nombre<br />
d’itérations maximum étant fixé à l’avance, une erreur d’initialisation est prévue.<br />
14
2. Les algorithmes de comparaison<br />
Les méthodes existantes en programmation non linéaire sous contraintes se divisent en deux<br />
grandes catégories, les méthodes primales et les méthodes duales. Nous allons présenter un algorithme<br />
de chaque catégorie, et montrer comment on peut adapter chacun au problème général que nous<br />
voulons traiter.<br />
2.1. L’algorithme de type gradient projeté<br />
2.1.1. Une méthode primale<br />
Le premier algorithme que nous avons choisi de comparer à la méthode de Rackwitz est un<br />
algorithme de type gradient projeté avec contraintes, d’après Rosen [4] (1960). Cet algorithme du<br />
gradient projeté est une méthode dite primale, qui opère directement sur le problème à traiter. Les<br />
méthodes primales engendrent une séquence itérative de solutions en assurant une décroissance<br />
monotone de la fonction à minimiser. Leur principal avantage est, en cas d’interruption du processus<br />
itératif, l’obtention d’une solution intermédiaire approchée vérifiant les contraintes.<br />
2.1.2. Hypothèses<br />
Cette méthode se base sur une idée simple : à chaque étape de l’algorithme, le nouveau point ne<br />
vérifie peut-être pas certaines contraintes, on projette donc ce point obtenu sur l’ensemble induit par<br />
les contraintes pour qu’il appartienne à l’ensemble des solutions réalisables. Le point est projeté sur la<br />
frontière du domaine et l’algorithme n’est donc en réalité qu’un cheminement le long de la frontière,<br />
jusqu’à obtention de la solution.<br />
Cet algorithme s’applique, de manière générale, au problème suivant :<br />
Minimiser<br />
sous les contraintes<br />
Dans notre problème, nous n’avons qu’une seule contrainte de type inégalité, ce que l’on peut<br />
donc réécrire :<br />
Minimiser<br />
sous la contrainte<br />
15
2.1.3. Déroulement<br />
Une itération consiste à chercher depuis un point une direction de descente et à trouver dans<br />
cette direction la meilleure solution.<br />
La contrainte sera dite saturée pour si .<br />
Pour appliquer l’algorithme de gradient projeté, il faudra suivre le schéma suivant :<br />
Initialisation :<br />
Tant que n’est pas acceptable :<br />
Déterminer si la contrainte est saturée ou non<br />
Si la contrainte est saturée,<br />
Construction de<br />
Sinon<br />
Calcul de la matrice de projection<br />
( ( est ici un scalaire)<br />
Calcul de la direction de descente<br />
Si alors<br />
Calcul de<br />
Calcul de tel que<br />
Sinon<br />
Poser<br />
Si alors satisfait les conditions de Kuhn et Tucker, est acceptable<br />
Sinon<br />
La contrainte n’est plus considérée comme saturée<br />
On retourne à l’étape de construction de<br />
16
2.2. L’algorithme de type lagrangien augmenté<br />
2.2.1. Une méthode duale<br />
Le second algorithme que nous avons choisi est un algorithme de type lagrangien augmenté [5] ,<br />
une méthode dite duale. Le principe général de ce type de méthode consiste à ramener le problème<br />
initial à la résolution d’une suite de problèmes d’optimisations sans contrainte.<br />
2.2.2. Hypothèses<br />
Cet algorithme s’applique, de manière générale, au problème suivant :<br />
Minimiser<br />
sous les contraintes<br />
Dans notre problème, nous n’avons qu’une seule contrainte de type inégalité, ce que l’on peut<br />
donc réécrire :<br />
Minimiser<br />
sous la contrainte<br />
2.2.3. Déroulement<br />
Le schéma de l’algorithme, assez simple, est le suivant :<br />
- Initialisation : et<br />
- Minimisation du lagrangien augmenté<br />
- Mise à jour du coefficient de Lagrange<br />
- Augmentation de R<br />
- S’il n’y a pas convergence, mettre à jour et réitérer<br />
17
2.3. L’implémentation en Matlab<br />
Ces deux algorithmes du gradient projeté et du lagrangien augmenté font eux-mêmes intervenir<br />
des sous-problèmes d’optimisation. Ainsi, pour l’implémentation de ces deux méthodes, nous avons<br />
fait appel à plusieurs fonctions de minimisation déjà programmées dans la boîte à outils Optimization<br />
Toolbox de Matlab :<br />
2.3.1. La fonction « fminbnd »<br />
Cette fonction recherche le minimum d’une fonction dans un intervalle donné.<br />
Cette instruction retourne une valeur qui est un minimum local de la fonction dans<br />
l’intervalle , ainsi que la valeur de la fonction en ce point.<br />
Nous utilisons cette fonction de minimisation pour calculer, dans l’algorithme du gradient<br />
projeté :<br />
2.3.2. La fonction « fmincon »<br />
Cette fonction recherche le minimum d’une fonction soumis à des contraintes linéaires et/ou<br />
non linéaires dans un intervalle donné.<br />
Cette instruction retourne une valeur , ainsi que la valeur de la fonction en ce point,<br />
solution approchée d’un problème de type :<br />
Nous utilisons cette fonction de minimisation pour calculer, dans l’algorithme du gradient<br />
projeté :<br />
18
2.3.3. La fonction « fminunc »<br />
Cette fonction recherche le minimum d’une fonction qui n’est soumise à aucune contrainte.<br />
Cette instruction retourne une valeur , qui est un minimum local de la fonction fun.<br />
Nous utilisons cette fonction de minimisation pour calculer, dans l’algorithme du lagrangien<br />
augmenté :<br />
Nous avons présenté en détail l’algorithme de Rackwitz, plus brièvement les méthodes de type<br />
gradient projeté et lagrangien augmenté, et nous avons parlé des éléments nécessaires à leur<br />
implémentation dans le langage Matlab.<br />
L’ensemble du code Matlab du projet est présent en annexe.<br />
Nous allons maintenant tester ces trois méthodes sur différents exemples et comparer celles-ci,<br />
lorsque la comparaison est possible.<br />
19
3. Exemples d’application et résultats comparés<br />
Cette troisième et dernière partie regroupe les différents résultats comparés de l’exécution des<br />
trois méthodes sur des exemples que nous avons choisis pour mettre en évidence des propriétés de<br />
convergence et de rapidité d’exécution de l’une ou l’autre méthode.<br />
Par hypothèse, dans tous les exemples que nous traiterons, l’origine O du repère de sera<br />
située dans le domaine<br />
. En effet, le problème étudié revenant à trouver la distance entre<br />
le point O et le domaine<br />
, prendre O dans ce domaine n’est pas un cas intéressant. Etant<br />
donné que l’algorithme de Rackwitz cherche un point solution sur la frontière du domaine<br />
, la solution triviale du point origine, si celui-ci n’est pas sur la frontière du domaine, ne<br />
pourra être trouvée par cette méthode.<br />
Nous n’évoquerons pas la complexité des algorithmes, le fait est que nous ne disposons que de<br />
peu d’informations sur le fonctionnement intérieur des fonctions<br />
de<br />
l’Optimization Toolbox de Matlab.<br />
3.1. Critères de comparaison<br />
Dans cette troisième et dernière partie, nous allons essayer d’analyser les trois méthodes<br />
d’optimisation, voir dans quels cas l’algorithme de Rackwitz converge, et le cas échéant comparer la<br />
solution retournée avec celles des deux autres méthodes de type gradient projeté et lagrangien<br />
augmenté.<br />
Pour cela, il nous a fallu sélectionner des critères de comparaison comme le nombre<br />
d’itérations et le temps d’exécution de chaque méthode.<br />
3.1.1. Le nombre d’itérations<br />
Comme les trois méthodes étudiées sont des méthodes itératives, un critère intéressant de<br />
comparaison est le nombre d’itérations que chacun des algorithmes met, lors de son exécution avec<br />
Matlab, pour arriver à la solution finale.<br />
3.1.2. Le temps d’exécution<br />
D’autre part, un autre critère que nous avons choisi est le temps d’exécution. La paire<br />
d’instructions Matlab<br />
permet d’afficher la durée écoulée en secondes entre deux instants.<br />
Cette instruction mise au début et à la fin de l’exécution d’une méthode, nous donne sa durée<br />
d’exécution. Cette durée dépendant du processeur de l’ordinateur, elle pourra être utilisée en terme de<br />
rapport entre deux durées. D’autre part, dans le cas où la convergence se fait en moins d’une dizaine<br />
d’itérations, le temps d’exécution très court peut parfois se relever insignifiant.<br />
20
Nous allons maintenant essayer de donner des exemples assez représentatifs de fonctions. Nous<br />
avons d’abord étudié certains cas de fonctions dont le graphe est assez particulier,<br />
avant de donner divers exemples de fonctions non linéaires.<br />
3.2. Cas où le graphe F(x)=0 est un hyperplan<br />
Supposons tout d’abord que la fonction définit un hyperplan . Dans ce cas, il est<br />
clair que l’algorithme de Rackwitz donne toujours en deux itérations maximum le résultat. En effet,<br />
quelque soit le point, les normales sont toutes parallèles. Il y a donc le point initial de l’algorithme qui<br />
est, a priori, un point différent de l’optimum. La première itération donne directement l’optimum. A<br />
l’itération suivante, l’algorithme trouve donc le même point et s’arrête. Cela fait donc bien au plus<br />
deux itérations.<br />
Fig. 3.1 - Exécution de l’algorithme de Rackwitz dans le cas d’un hyperplan en 2D<br />
Dans le cas du lagrangien augmenté, l’algorithme converge assez rapidement, en une dizaine<br />
d’itérations maximum pour les cas traités, suivant que le point initial se situe plus ou moins loin de la<br />
solution. Cependant, si on prend un point d’initialisation trop éloigné de la solution optimale, la<br />
convergence ne peut se faire au moyen de cette méthode. L’algorithme ne nous donne pas la bonne<br />
solution et l’appel de retourne à l’écran :<br />
« »<br />
Il y a aussi le cas très particulier de l’origine comme point initial : l’algorithme s’arrête<br />
directement et considère l’origine comme solution.<br />
21
En revanche, dans le cas du gradient projeté, la convergence semble se faire en trois ou quatre<br />
itérations suivant que l’initialisation soit plus ou moins loin de la solution<br />
Fonction contrainte<br />
Dimension<br />
Gradient Lagrangien<br />
Rackwitz<br />
du problème<br />
projeté augmenté<br />
x 1 - x 2 + 1 2 2 3 4 à 10<br />
6 + x 1 - 3*x 2 - x 3 - 4*x 4 - 6*x 5 5 2 3 ou 4 8 ou 9<br />
6 + x 1 - 3*x 2 - x 3 - 4*x 4 - 6*x 5<br />
+ 3*x 6 - x 7 - x 8 - 2*x 9 + 2*x 10<br />
10 2 3 ou 4 8 ou 9<br />
Fig. 3.2 - Convergence en nombre d’itérations dans le cas d’un hyperplan<br />
Fonction contrainte<br />
Dimension du<br />
Lagrangien<br />
Rackwitz Gradient projeté<br />
problème<br />
augmenté<br />
x 1 -x 2 +1 2 < 0.1 s 0.1 à 0.2 s 0.2 à 1 s<br />
6 + x 1 - 3*x 2 - x 3 - 4*x 4 - 6*x 5 5 < 0.1 s 0.2 s 0.5 à 1.5 s<br />
6 + x 1 - 3*x 2 - x 3 - 4*x 4 -6*x 5 +<br />
3*x 6 - x 7 - x 8 - 2*x 9 + 2*x 10<br />
10 < 0.1 s 0.2 à 0.3 s 0.8 à 2 s<br />
Fig. 3.3 - Convergence en temps d’exécution dans le cas d’un hyperplan<br />
Revenons sur l’exemple en dimension 10. La solution approchée du problème étudié est alors :<br />
T<br />
Les différents points d’initialisation ci-dessous convergent tous sur les deux algorithmes, donc<br />
sont dans le domaine de contrainte . Le nombre d’itérations varie peu.<br />
Point d’initialisation Gradient<br />
projeté<br />
Lagrangien<br />
augmenté<br />
(1;1;1;1;1;1;1;1;1;1) 4 8<br />
(1;41;30;11;15;1;1;11;11;5) 3 8<br />
(1;1;-3;1;5;10;1;11;11;5) 3 8<br />
(1;1;-3;1;5;0;7;16;-11;-5) 4 9<br />
(10;10;10;10;10;10;10;10;10;10) 4 9<br />
(1;1;1;1;1;1;1;1;10;1) 4 8<br />
Fig. 3.4 - Influence de l’initialisation sur le nombre d’itérations dans le cas d’un hyperplan<br />
22
3.3. Cas où le graphe F(x)=0 est un paraboloïde ou un hyperboloïde<br />
Nous avons choisi de regrouper dans une même sous-partie les cas des paraboloïdes et<br />
hyperboloïdes cas car ils présentent des points communs quant aux situations de non-convergence de<br />
la méthode de Rackwitz.<br />
En effet, si on considère en dimension 2, une parabole ou une hyperbole, alors la parallèle<br />
passant par l’origine, à la normale à un point situé sur le graphe , ne coupe pas, ou bien<br />
coupe une ou deux fois la courbe. Ainsi, quand il n’y a pas d’intersection, l’algorithme s’arrête, et<br />
quand l’intersection est double, le choix induit par la méthode de Newton peut faire entrer l’algorithme<br />
dans un cycle infini.<br />
La figure Fig. 3.5 (resp. Fig. 3.6) montre les cas où la parallèle à la normale à un point courant<br />
situé sur une parabole (resp. hyperbole) ne coupe pas ou coupe deux fois la courbe.<br />
Fig. 3.5 - Intersections possibles entre une droite issue de l’origine et une parabole<br />
Fig. 3.6 - Intersections possibles entre une droite issue de l’origine et une hyperbole<br />
23
3.3.1. Cas de non convergence pour une parabole<br />
Dans le cas où la courbe est une parabole (ou plus généralement un paraboloïde en<br />
dimension n), si la fonction contrainte prend des valeurs négatives pour les points situés dans la<br />
partie non convexe, alors la convergence de l’algorithme de Rackwitz n’est pas obligatoirement<br />
assurée.<br />
Un tel exemple de non-convergence est celui où<br />
. En effet, à chaque<br />
itération, il est possible de choisir entre deux points, et l’algorithme, comme nous l’avons programmé,<br />
ne peut pas chercher s’il y a plusieurs points et prend le premier qui arrive. Ce point n’est pas<br />
forcément le plus judicieux. Dans notre exemple, l’algorithme fait un cycle entre les deux points :<br />
La parallèle à la normale à la courbe au point , passant par l’origine, coupe la<br />
courbe en deux points distincts dont l’un est , et inversement en échangeant les rôles de et .<br />
Fig. 3.7 - Cas de non convergence de l’algorithme de Rackwitz avec une parabole<br />
24
3.3.2. Cas de non convergence pour une hyperbole<br />
Prenons l’exemple où délimite un domaine non connexe. C’est le cas par exemple<br />
dans où le graphe correspond à une hyperbole.<br />
Dans le cas des hyperboles, l’algorithme de Rackwitz ne convergera généralement pas car il<br />
aura tendance à faire un cycle entre deux voire trois points situés sur l’hyperbole. La raison principale<br />
est C’est un cas important de non convergence de l’algorithme de Rackwitz.<br />
Pour illustrer ce cas, prenons la fonction contrainte<br />
Considérons maintenant l’hyperbole définie par<br />
courbe d’équation :<br />
, c'est-à-dire le graphe (Fig. 3.1) de la<br />
Fig. 3.8 - Exécution de l’algorithme de Rackwitz avec un domaine non connexe<br />
Nous nous apercevons que l’algorithme de Rackwitz va très rapidement, en quelques itérations,<br />
parvenir à ce cycle de trois points :<br />
25
Le cycle est infini, mais nous nous apercevons que , le point plus proche de l’origine, est une<br />
très bonne solution approchée de la solution. Nous pouvons le voir graphiquement en traçant (Fig. 3.2)<br />
le cercle de centre 0 et de rayon .<br />
Fig. 3.9 - Exécution de l’algorithme de Rackwitz avec un domaine non connexe (zoom)<br />
3.3.3. Résultats en cas de convergence<br />
Le tableau suivant donne les résultats trouvés en cas de convergence de l’algorithme de<br />
Rackwitz dans le cas où le graphe est du type paraboloïde ou hyperboloïde. La quatrième<br />
colonne indique l’initialisation choisie pour le gradient projeté et le lagrangien augmenté ; on rappelle<br />
que pour la méthode de Rackwitz, l’initialisation, si elle est possible telle que nous l’avons<br />
implémentée, est faite automatiquement. Le signe (-) dans la colonne du gradient projeté indique que<br />
nous n’avons pas trouvé de point d’initialisation tel que cette méthode converge vers la bonne solution.<br />
Fonction contrainte<br />
Dimension<br />
Gradient Lagrangien<br />
Initialisation Rackwitz<br />
du problème<br />
projeté augmenté<br />
x 1 ² - 4*x 1 - x 2 + 3 2 (0;1) 7 (-) 8<br />
x 1 ² - 20*x 1 - x 2 + 20 2 (0;1) 3 (-) 9<br />
x 1 ² - 2*x 2 - 3*x 2 + 2 3 (0;0;1) 13 4 8<br />
Fig. 3.10 - Convergence en nombre d’itérations dans le cas de paraboloïdes / hyperboloïdes<br />
Ce tableau montre que la méthode de Rackwitz donne en moyenne de meilleurs résultats que le<br />
lagrangien augmenté, mais que le gradient projeté peut s’il converge arriver à un bon résultat.<br />
26
3.4. Cas où le graphe F(x)=0 est un ellipsoïde<br />
Etudions maintenant le cas où le graphe<br />
ou un cercle en dimension 2.<br />
est un ellipsoïde, en particulier une ellipse<br />
Commençons tout d’abord par un exemple en dimension 2 avec la fonction contrainte :<br />
Considérons maintenant le cercle défini par<br />
centre et de rayon dont le graphe est le suivant :<br />
, et le domaine défini par le disque de<br />
Fig. 3.11 - Exemple d’un domaine délimité par un cercle<br />
Dans ce cas, l’algorithme de Rackwitz converge en 16 itérations. Selon le point d’initialisation<br />
de la méthode de type lagrangien augmenté, on a une convergence en 8 ou 9 itérations. Ainsi, dans ce<br />
cas, on remarquera que le lagrangien augmenté donne de meilleurs résultats. Nous n’avons en<br />
revanche trouvé aucun point d’initialisation pour lequel la méthode de type gradient projeté nous<br />
donne la bonne solution pour cet exemple.<br />
Le tableau suivant donne les résultats trouvés en cas de convergence de l’algorithme de<br />
Rackwitz dans le cas où le graphe est du type ellipsoïde. Comme précédemment, la<br />
quatrième colonne indique l’initialisation choisie pour le gradient projeté et le lagrangien augmenté, et<br />
le signe (-) dans la colonne du gradient projeté indique que nous n’avons pas trouvé de point<br />
d’initialisation tel que cette méthode converge vers la bonne solution.<br />
27
Fonction contrainte<br />
Dimension<br />
Gradient Lagrangien<br />
Initialisation Rackwitz<br />
du problème<br />
projeté augmenté<br />
x 1 ² + x 2 ² + x 1 – 5*x 2 + 3 2 (1;1) 16 (-) 8<br />
- x 1 ² - x 2 ² - x 1 + 5*x 2 + 18.5 2 (1;-3) 19 15 10<br />
- x 1 ² - x 2 ² - x 1 + 5*x 2 + 18.5 2 (-5;5) 19 29 9<br />
x 1 ² + x 2 ² + x 3 ² + 1 3 (1;1;1) 13 4 8<br />
Fig. 3.12 - Convergence en nombre d’itérations dans le cas d’ellipsoïdes<br />
Dans ce cas particulier où le graphe est un ellipsoïde, on peut noter que la méthode de Rackwitz<br />
nous donne des résultats assez moyens par rapport à celle du lagrangien augmenté. Quant à celle du<br />
gradient projeté, elle dépend beaucoup de l’initialisation.<br />
3.5. Cas divers<br />
L’étude de cas de graphes particuliers donne des résultats assez mitigés pour les différentes<br />
méthodes. Nous allons maintenant voir si une méthode « l’emporte » sur une autre en testant des<br />
exemples avec des fonctions de contraintes non linéaires.<br />
Nous avons pris ces exemples de fonctions de manière totalement aléatoire, exemples que l’on<br />
a testés à la fois en nombre d’itérations et en temps d’exécution.<br />
Fonction contrainte<br />
Dimension<br />
Gradient Lagrangien<br />
Initialisation Rackwitz<br />
du problème<br />
projeté augmenté<br />
-(exp(x 1 - x 2 ) + x 1 - 3) 2 (-8;10) 5 (-) 7<br />
2*x 1 ²*x 2 +3*x 2 + 1 2 (1;-3) 8 12 5<br />
2*x 1 ²*x 2 +3*x 2 - x 3 +1 3 (1;-3;1) 8 10 5<br />
2*x 1 ²*x 2 +3*x 2 - x 3 + x 4 +1 4 (0;0;5;0) 8 4 5<br />
Fig. 3.13 - Convergence en nombre d’itérations pour des cas divers<br />
Fonction contrainte<br />
Dimension<br />
Gradient Lagrangien<br />
Initialisation Rackwitz<br />
du problème<br />
projeté augmenté<br />
-(exp(x 1 - x 2 ) + x 1 - 3) 2 (-8;10) 0.2 s (-) 0.5 s<br />
2*x 1 ²*x 2 +3*x 2 + 1 2 (1;-3) 0.2 s 0.6 s 0.3 s<br />
2*x 1 ²*x 2 +3*x 2 - x 3 +1 3 (1;-3;1) 0.1 s 0.8 s 0.3 s<br />
2*x 1 ²*x 2 +3*x 2 - x 3 + x 4 +1 4 (0;0;5;0) 0.1 s 0.3 s 0.3 s<br />
Fig. 3.14 - Convergence en temps d’exécution pour des cas divers<br />
28
L’étude de ces quelques exemples a permis de montrer que, dans le cas général, la méthode de<br />
Rackwitz donne de meilleurs résultats que celle du gradient projeté et de moins bons résultats que celle<br />
du lagrangien augmenté, en terme de nombre d’itérations effectuées. Cependant, dans tous les cas, la<br />
méthode de Rackwitz l’emporte en terme de rapidité d’exécution. La méthode du gradient projeté<br />
arrive quant à elle dernière au niveau performance.<br />
29
Conclusion<br />
Nous avons implémenté dans l’environnement Matlab l’algorithme de Rackwitz, et les deux<br />
méthodes de type gradient projeté et lagrangien augmenté que nous avons adaptées au problème<br />
d’optimisation non linéaire avec une unique fonction contrainte non linéaire dans .<br />
Nous avons vu qu’il est assez facile de trouver des exemples de non convergence de<br />
l’algorithme de Rackwitz. Cependant, cette méthode, lorsqu’elle converge, donne les meilleurs<br />
résultats en terme de rapidité d’exécution, le nombre d’itérations effectuées étant légèrement plus<br />
important que pour le lagrangien augmenté. En effet, contrairement aux algorithmes plus communs de<br />
type gradient projeté et lagrangien augmenté, la méthode de Rackwitz ne fait pas intervenir d’autres<br />
sous-problèmes d’optimisation.<br />
Nous noterons enfin que l’algorithme du gradient projeté se prête assez mal au problème que<br />
nous avons étudié, en particulier du fait de la présence d’une unique fonction contrainte, et de la nonlinéarité<br />
de celle-ci, faisant de nombreux exemples étudiés des cas de non convergence.<br />
30
Bibliographie<br />
[1] Rüdiger Rackwitz, http://www.mb.bv.tum.de/index-d/mitarbeiter/rackwitz.htm<br />
[2] Reliability based design optimization, http://www.iitk.ac.in/kangal/seminar/rbdo.ppt<br />
[3] Introduction to reliability-based design, http://www.ippt.gov.pl/~arek/intr-reliab.ppt<br />
[4] MINOUX M., Programmation mathématique, théorie et algorithmes, Tome 1,<br />
éditions Dunod, 1983<br />
[5] Optimisation sous contrainte, http://ycollette.free.fr/spip/IMG/pdf/02_AvecContraintes.pdf
ANNEXES
Table des annexes<br />
A. Code Matlab pour la dérivée, le gradient et la méthode de Newton . . . . . . . . . . . . . . . . . . . . I<br />
B. Code Matlab de la méthode de type gradient projeté . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . II<br />
C. Code Matlab de la méthode de type lagrangien augmenté . . . . . . . . . . . . . . . . . . . . . . . . . . . IV<br />
D. Code Matlab de l’algorithme de Rackwitz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . VI
A. Code Matlab pour la dérivée, le gradient et la méthode de Newton<br />
function [dif] = deriv(f,i,x,eps)<br />
%Approximation de la dérivée en un point par différences finies<br />
% [dif] = deriv(f,i,x,eps)<br />
% f : Rn -> R, fonction<br />
% i, pour la i-ème derivée partielle (i=1 si dérivée)<br />
% x, point de Rn<br />
% eps, précisions des calculs<br />
format long<br />
n = length(x);<br />
dif = feval(f,[x(1:i-1);x(i)+eps;x(i+1:n)])-...<br />
feval(f,[x(1:i-1);x(i)-eps;x(i+1:n)]);<br />
dif = dif/2/eps;<br />
function [gradU,normU] = grad(f,x,n,eps)<br />
%Calcul du gradient d'une fonction en un point<br />
% [gradU,normU] = grad(f,x,n,eps)<br />
% f : Rn -> R, fonction<br />
% x, point de Rn<br />
% n, dimension du problème<br />
% eps, précisions des calculs<br />
format long<br />
for i=1:n<br />
gradU(i) = deriv(f,i,x,eps);<br />
end<br />
normU = sqrt(gradU*gradU');<br />
function [x,iter] = newton(f,eps,a,itermax)<br />
%Méthode de Newton<br />
% [x,iter] = newton(f,eps,a,itermax)<br />
% f : R -> R, fonction<br />
% eps, précision des calculs<br />
% a, point d'initialisation<br />
% itermax, nombre maximal d'itérations<br />
format long<br />
x = a;<br />
for iter=1:itermax<br />
if abs(deriv(f,1,x,eps)) < eps<br />
disp('Méthode de Newton : division par 0');<br />
return<br />
end y = x - feval(f,x)/deriv(f,1,x,eps);<br />
if abs(y-x) < eps<br />
break<br />
end<br />
x = y;<br />
end<br />
I
B. Code Matlab de la méthode de type gradient projeté<br />
function [] = gradient_projete(f,n,x0)<br />
%Méthode du gradient projeté<br />
% gradient_projete(f,n,x0)<br />
% f : Rn -> R, contrainte F sur x<br />
% n, dimension du problème<br />
% x0, point d'initialisation dans Rn<br />
stop = 0;<br />
if feval(f,x0)>0<br />
disp('Le point d initialisation doit etre dans le domaine F(x)
if alphamax>epsilon<br />
[alphak,fxk] = fminbnd(@(alpha)norm(xk+alpha*yk),0,alphamax);<br />
else<br />
alphak = 0;<br />
fxk = 0;<br />
end<br />
% Calcul du nouveau point courant<br />
xk = xk+alphak*yk;<br />
stopc = 1;<br />
if norm(alphak*yk) < epsilon<br />
stop = 1;<br />
break<br />
end<br />
else<br />
end<br />
end<br />
end<br />
u = - 1/(dgdx*dgdx')*dgdx*2*xk;<br />
if u >= -epsilon<br />
stopc = 1;<br />
stop = 1;<br />
else<br />
sat = 0;<br />
end<br />
x = xk<br />
disp('Solution x calculée par l algorithme de type gradient projeté');<br />
x<br />
disp('Nombre d iterations');<br />
iter<br />
disp('Norme de x');<br />
norm(x)<br />
end<br />
function [c,ceq] = constr(f,alpha,xk,yk)<br />
c = feval(f,xk+alpha*yk);<br />
ceq = [];<br />
end<br />
III
C. Code Matlab de la méthode de type lagrangien augmenté<br />
function [] = lagrangien_augmente(f,n,x0)<br />
%Méthode du lagrangien augmenté<br />
% lagrangien_augmente(f,n,x0)<br />
% f : Rn -> R, contrainte F sur x<br />
% n, dimension du problème<br />
% x0, point d'initialisation dans Rn<br />
format long<br />
itermax = 10000;<br />
epsilon = 1e-6;<br />
x = x0;<br />
lambda = 0;<br />
R = 0.1;<br />
iter = 0;<br />
stop = 0;<br />
while (stop==0 & iter
% Calcul du lagrangien, avec gradient et hessien<br />
function [L,gL,HL] = lagrangien(x,f,lambda,R,n,eps)<br />
L = norm(x)+lambda*feval(f,x)+R*(feval(f,x)*feval(f,x))/2;<br />
if nargout>1<br />
for i=1:n<br />
gL(i) = 2*x(i)+lambda*deriv(f,i,x,eps)+R*deriv(f,i,x,eps)*feval(f,x);<br />
end<br />
if nargout>2<br />
HL(i,j) = 2+(lambda+R)*deriv(@(x)deriv(f,j,x,eps),i,x,eps)...<br />
+R*deriv(f,i,x,eps)*deriv(f,j,x,eps);<br />
if i~=j<br />
HL(i,j) = HL(i,j)-2;<br />
end<br />
end<br />
end<br />
end<br />
V
D. Code Matlab de l’algorithme de Rackwitz<br />
function [] = rackwitz(f,n)<br />
%Méthode de Rackwitz<br />
% rackwitz(f,n)<br />
% f : Rn -> R, fonction contrainte<br />
% n, dimension du problème<br />
format long<br />
iter = 0;<br />
itermax = 10000;<br />
epsilon = 1e-6;<br />
a = 1;<br />
% Initialisation pour trouver x0 par la méthode de Newton<br />
if nepsilon & iter
disp('Solution x calculée par l algorithme de Rackwitz');<br />
x<br />
disp('Nombre d iterations');<br />
iter<br />
disp('Norme de x');<br />
norm(x)<br />
VII