* fichier : mma_03.dgibi ************************************************************************ ************************************************************************ ************************************************************************ * Test de l'opérateur MMA : Méthode des Asymptotes Mobiles * * Reproduction d'un cas test de l'article originel de Svanberg * * * * Krister Svanberg: The method of moving asymptotes - a new method * * for structural optimization * * International Journal for Numerical Methods in Engineering, * * vol. 24, 359-373 (1987) * * https://doi.org/10.1002/nme.1620240207 * * * * * * * * Optimisation d'une poutre en flexion de section variable * * * * |‾‾‾‾‾‾‾‾‾‾‾‾|____________ * * | | |____________ * * | | | |____________ * * | | | | |____________ * * | | | | | | * * | 1 | 2 | 3 | 4 | 5 | * * | | | | |‾‾‾‾‾‾‾‾‾‾‾‾| * * | | | |‾‾‾‾‾‾‾‾‾‾‾‾ | * * | | |‾‾‾‾‾‾‾‾‾‾‾‾ | * * | |‾‾‾‾‾‾‾‾‾‾‾‾ \|/ * * ‾‾‾‾‾‾‾‾‾‾‾‾ v * * * * La poutre est divisée en 5 troncons de même longueur et de sections * * x1 x2 x3 x4 et x5 qui seront les variables de conception. * * Elle est encastrée à gauche et soumise à une force verticale à * * droite. * * * * Le problème d'optimisation est le suivant : * * - Trouver x=(x1 x2 x3 x4 x5) pour minimiser la masse de la poutre * * - tels que la flèche soit inférieure à une limite donnée * * * * Au final, le problème à résoudre se ramène à : * * Minimiser : f0(x) = c1 * (x1 + x2 + x3 + x4 + x5) * * sur x * * * * avec : f1(x) = 61/x1**3 + 37/x2**3 + 19/x3**3 * * + 7/x4**3 + 1/x5**3 < c2 * * 1 < xi < 10 * * * * Si on choisit c1 = 0.0624 et c2 = 1, alors la solution est : * * x1 = 6.0160 x2 = 5.3092 x3 = 4.4943 x4 = 3.5015 x5 = 2.1527 * ************************************************************************ * Options d'affichage itrac = FAUX ; * Procedure pour calculer f0, f1 ainsi que les derivees partielles * df0/dxi, df1/dxi, df2/dxi pour i=1,2,3,4,5 c1 = 0.0624 ; c2 = 1. ; dfda . 1 = -3. * ld / (a ** 4) ; FINP f0 df0da fval dfda ; * Solution de reference x1ref = 6.0160 ; x2ref = 5.3092 ; x3ref = 4.4943 ; x4ref = 3.5015 ; x5ref = 2.1527 ; MESS ; MESS 'Solution de reference' ; MESS ' x1 x2 x3 x4 x5 f0' ; * Choix d'un point initial pour les inconnues * Calcul de f0(x0), df0dx(x0), fval(x0), dfdx(x0) * Initialisation de la table pour la MMA t . 'X' = x0 ; t . 'XMIN' = 1. ; t . 'XMAX' = 10. ; t . 'F0VAL' = f0 ; t . 'DF0DX' = df0dx ; t . 'FVAL' = fval ; t . 'DFDX' = dfdx ; t . 'A0' = 1. ; t . 'MOVE' = 1. ; * Iterations de la MMA MESS ; MESS 'Optimisation par MMA' ; MESS 'It x1 x2 x3 x4 x5 f0 kktnorm' ; * Boucle d'optimisation REPE loop 10 ; * Appel a MMA lit = lit ET &loop ; MMA t ; xmma = t . 'X' ; lx1 = lx1 ET x1 ; lx2 = lx2 ET x2 ; lx3 = lx3 ET x3 ; lx4 = lx4 ET x4 ; lx5 = lx5 ET x5 ; * Mise a jour des valeurs des fonctions lf0 = lf0 ET f0 ; t . 'F0VAL' = f0 ; t . 'DF0DX' = df0dx ; t . 'FVAL' = fval ; t . 'DFDX' = dfdx ; * Calcul du residu pour les conditions KKT res kkt2 kktinf = KKT_MMA t ; * Bilan de l'iteration FIN loop ; MESS ; * Verification du resultat MESS errmax ; MESS ; * Évolutions temporelles de f, de l'infaisabilité et des variables * en fonction des iterations d'optimisation SI itrac ; tl . 2 = 'TIRR' ; tl . 'TITRE' . 1 = 'F0 calculee' ; tl . 'TITRE' . 2 = 'F0 ref.' ; tl . 'TITRE' . 1 = 'Infaisabilite' ; tl . 4 = 'TIRR' ; tl . 6 = 'TIRR' ; tl . 8 = 'TIRR' ; tl . 10 = 'TIRR' ; tl . 'TITRE' . 1 = 'x1 calcule' ; tl . 'TITRE' . 2 = 'x1 ref.' ; tl . 'TITRE' . 3 = 'x2 calcule' ; tl . 'TITRE' . 4 = 'x2 ref.' ; tl . 'TITRE' . 5 = 'x3 calcule' ; tl . 'TITRE' . 6 = 'x3 ref.' ; tl . 'TITRE' . 7 = 'x4 calcule' ; tl . 'TITRE' . 8 = 'x4 ref.' ; tl . 'TITRE' . 9 = 'x5 calcule' ; tl . 'TITRE' . 10 = 'x5 ref.' ; FINSI ; * Sortie en erreur si l'écart aux valeurs de références est trop important SI (errmax > 1.E-4) ; SINON ; MESS 'Cas test passe avec succes !' ; FINSI ; FIN ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales