$$$$ MMA NOTICE FD218221 25/09/02 21:15:06 12346 DATE 25/09/02 Operateur MMA Voir aussi : EXCE LEVM MOCA _____________ AJUSTE TOPOPTIM L'operateur MMA met en oeuvre la methode des asymptotes mobiles, "Method of Moving Asymptotes", pour resoudre un probleme d'optimisation sous la forme decrite ci-dessous. Les variables sont : x = [x_1 ... x_n]^T vecteur dans R^n y = [y_1 ... y_m]^T vecteur dans R^m z scalaire dans R Le probleme "generique" est : Minimiser : f_0(x) + a_0*z + Somme [ c_i*y_i + 0.5*d_i*(y_i)^2 ] sur x,y,z i=1,...,m soumis a : f_i(x) - a_i*z - y_i <= 0 pour i = 1,...,m (nombre de contraintes) xmin_j <= x_j <= xmax_j pour j = 1,...,n (nombre de variables) z >=0 y_i >= 0 pour i = 1,...,m Cette formulation "generique" permet de traiter, dans le meme cadre, plusieurs problemes "classiques" d'optimisation, comme par exemple : - un probleme "standard" de minimisation d'une fonction sous contraintes : Minimiser : f_0(x) soumis a : f_i(x) <= 0 pour i = 1,...,m - un probleme "min-max" (minimiser la plus grande d'un groupe de fonctions) : Minimiser : Max{h_i(x)} pour i = 1,...,p soumis a : g_i(x) <= 0 pour i = 1,...,q (nombre de contraintes) - un probleme des "moindres carres" sous la forme : Minimiser : 0.5 * Somme [ (h_i(x))^2 ] i=1,...,p soumis a : g_i(x) <= 0 pour i = 1,...,q (nombre de contraintes) Plus d'informations sont disponibles dans la section "Remarques". Syntaxe : --------- MMA TAB1 ; Objet : ------- L'operateur permet d'effectuer une iteration d'optimisation par la MMA a partir de la donnee de : -- un point de depart x -- l'evaluation de la fonction f_0(x) et des fonctions f_i(x) -- l'evaluation de leurs gradients : -- gadients de f_0, par rapport a toutes les variables x_j, en x -- gradients des f_i, par rapport a toutes les variables x_j, en x La nouvelle variable optimisiee x' est rendue et peut alors servir a : -- evaluer a nouveau les fonctions et leurs gradients en x' -- effectuer une nouvelle iteration de MMA -- evaluer un critere de convergence global -- etc... Exemples d'utilisation : sur des problemes "simples" (peu de variables) : mma_00.dgibi mma_01.dgibi mma_02.dgibi mma_04.dgibi sur un probleme de plus grande taille : top_mma.dgibi Arguments : ----------- En entree : TAB1 : TABLE contenant les donnees du probleme d'optimisation TAB1 . 'X' : LISTREEL (dimension n) valeurs de depart des variables x_j TAB1 . 'XMIN' : LISTREEL (dimension n) ou FLOTTANT bornes inferieures des x_j si un FLOTTANT est donne, la meme borne est imposee pour tous les x_j TAB1 . 'XMAX' : LISTREEL (dimension n) ou FLOTTANT bornes superieures des x_j si un FLOTTANT est donne, la meme borne est imposee pour tous les x_j TAB1 . 'F0VAL' : FLOTTANT valeur de la fonction objectif f_0 (au point xval) TAB1 . 'DF0DX' : LISTREEL (dimension n) gradient de f_0 par rapport au variables x_j (au point xval) TAB1 . 'FVAL' : LISTREEL (dimension m) valeurs des fonctions contraintes f_i (au point xval) TAB1 . 'DFDX' : TABLE contenant les valeurs des gradients des fonctions contraintes f_i cette table doit contenir m indices de type ENTIER : TAB1 . 'DFDX' . 1 : LISTREEL (dimension n), gradient de f_1 par rapport au variables x_j (au point xval) ... ... TAB1 . 'DFDX' . m : LISTREEL (dimension n), gradient de f_m par rapport au variables x_j (au point xval) TAB1 . 'ITER' : ENTIER (facultatif), numero de l'iteration courante ( = 1 au premier appel a MMA) par defaut, pris egal a 1 TAB1 . 'XOLD1' : LISTREEL (facultatif, dimension n) contenant les valeurs 'X' a 1 iteration precedente (a condition que 'ITER' > 1) par defaut, pris egal à 'X' TAB1 . 'XOLD2' : LISTREEL (facultatif, dimension n) contenant les valeurs 'X' a 2 iterations precedentes (a condition que 'ITER' > 2) par defaut, pris egal à 'XOLD1' TAB1 . 'LOW' : LISTREEL (facultatif, dimension n) valeurs des asymptotes inferieures a l'iteration precedente (a condition que 'ITER' > 1) par defaut, pris egale a 'XMIN' TAB1 . 'UPP' : LISTREEL (facultatif, dimension n) valeurs des asymptotes superieures a l'iteration precedente (a condition que 'ITER' > 1) par defaut, pris egale a 'XMAX' TAB1 . 'A0' : FLOTTANT (facultatif) constante dans l'equation a_0*z du probleme (2) par defaut, pris egal a 1 TAB1 . 'A' : LISTREEL (facultatif, dimension m) coefficients dans l'equation a_i*z du probleme (2) par defaut, pris egal a 0. 0. ..., 0. TAB1 . 'C' : LISTREEL (facultatif, dimension m) coefficients dans l'equation c_i*y_i du probleme (2) par defaut, pris egal a 10000. 10000. ... 10000. TAB1 . 'D' : LISTREEL (facultatif, dimension m) coefficients dans le terme quadratique 0.5*d_i*(y_i)^2 du probleme (2) par defaut, pris egal a 1. 1. ... 1. TAB1 . 'MOVE' : FLOTTANT (facultatif) parametre pour la mise a jour des asymptotes par defaut, pris egal a 0.1 En sortie : TAB1 . 'X' : LISTREEL (dimension n) valeurs optimisees des variables x_j les valeurs precedentes sont deplacees dans l'indice 'XOLD1' TAB1 . 'XOLD1' : LISTREEL (dimension n) valeurs de 'X' 1 iteration precedente les valeurs precedentes sont deplacees dans l'indice 'XOLD2' TAB1 . 'XOLD2' : LISTREEL (dimension n) valeurs de 'XOLD1' 1 iteration precedente, correspond aussi aux valeurs de 'X' 2 iterations precedentes TAB1 . 'ITER' : ENTIER, egal a sa valeur precedente incrementee de 1 TAB1 . 'LOW' : LISTREEL (dimension n) valeurs des asymptotes inferieures mises a jour TAB1 . 'UPP' : LISTREEL (dimension n) valeurs des asymptotes superieures mises a jour TAB1 . 'Y' : LISTREEL (dimension m) valeurs optimisees des variables y_i TAB1 . 'Z' : FLOTTANT valeur optimisee de la variable z TAB1 . 'LAMBDA' : LISTREEL (dimension m) multiplicateurs de Lagrange pour les contraintes generales f_i TAB1 . 'XSI' : LISTREEL (dimension n) multiplicateurs de Lagrange pour les bornes inferieures des x_j TAB1 . 'ETA' : LISTREEL (dimension n) multiplicateurs de Lagrange pour les bornes superieures des x_j TAB1 . 'MU' : LISTREEL (dimension m) multiplicateurs de Lagrange pour les contraintes de non negativite des y_i TAB1 . 'ZET' : FLOTTANT multiplicateur de Lagrange pour la contrainte de non negativite de z TAB1 . 'S' : LISTREEL (dimension m) variables d'ecart pour les contraintes generales f_i Remarques : ----------- Ces remarques sont issues de la section "Some practical consideration" de l'artice de K. Svanberg. Il s'agit de recommandations pour le choix des fonctions contraintes, leur mise a l'echelle et des parametres de l'optimisation. - Les contraintes f_i(x) <= 0 sont generalement ecritent sous la forme g_i(x) <= gmax_i ce qui correspond a f_i(x) = g_i(x) - gmax_i il est recommande de mettre a l'echelle les fonctions de sorte que 1 ≤ gmax_i ≤ 100 - Il est recommande de mettre a l'echelle la fonction objectif de sorte que 1 ≤ f0(x) ≤ 100 - Il est recommande de mettre a l'echelle les variables x_j de sorte que 0.1 ≤ xmax_j - xmin_j ≤ 100 Pour rendre le probleme "generique" (quasiment) equivalent au probleme "standard", il faut choisir : a_0 = 1 a_i = 0 pour i = 1,...,m c_i = "un grand nombre" pour i = 1,...,m d_i = 1 pour i = 1,...,m Pour plus d'informations : -------------------------- Code original de K. Svanberg (en Matlab) : https://www.smoptit.se/ Details de fonctionnement et d'implementation de la methode : https://people.kth.se/~krille/mmagcmma.pdf References : [1] K. Svanberg, The method of moving asymptotes – a new method for structural optimization International Journal for Numerical Methods in Engineering, 1987, 24, 359-373. [2] K. Svanberg, A class of globally convergent optimization methods based on conservative convex separable approximations SIAM Journal of Optimization, 2002, 12, 555-573.
© Cast3M 2003 - Tous droits réservés.
Mentions légales