* fichier : mma_01.dgibi ************************************************************************ ************************************************************************ ************************************************************************ * Test de l'opérateur MMA : Méthode des Asymptotes Mobiles * * Application a une fonction a 2 variables et sans contraintes * * * * Le problème s'écrit : * * Minimiser : f0(x) = (x1-50)² + (x2-25)² + 25 * * sur x * * avec : 1 <= xi <= 100 pour i=1,2 * * * * La solution (evidente) est : x1 = 50 x2 = 25 * ************************************************************************ * Options itrac = FAUX ; * Procedure pour calculer f0 ainsi que les derivees partielles df0/dx df = 2. * (a - b) ; FINP f df g dgda ; * Solution de reference x1ref = 50. ; x2ref = 25. ; MESS ; MESS 'Solution de reference' ; MESS ' x1 x2 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' = 100. ; t . 'F0VAL' = f0 ; t . 'DF0DX' = df0dx ; t . 'FVAL' = fval ; t . 'DFDX' = dfdx ; t . 'A0' = 1. ; t . 'MOVE' = 0.1 ; * Iterations de la MMA MESS ; MESS 'Optimisation par MMA' ; MESS 'It x1 x2 f0 kktnorm' ; * Boucle d'optimisation REPE loop 25 ; * Appel a MMA lit = lit ET &loop ; MMA t ; xmma = t . 'X' ; lx1 = lx1 ET x1 ; lx2 = lx2 ET x2 ; * 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 ; f0msh = ((x - 50.) ** 2) + ((y - 25.) ** 2) + 25. ; pdep = x01 x02 ; pfin = x1 x2 ; tl . 2 = 'TIRR' ; tl . 'TITRE' . 1 = 'F0 calculee' ; tl . 'TITRE' . 2 = 'F0 ref.' ; tl . 'TITRE' . 1 = 'Infaisabilite' ; tl . 4 = 'TIRR' ; tl . 'TITRE' . 1 = 'x1 calcule' ; tl . 'TITRE' . 2 = 'x1 ref.' ; tl . 'TITRE' . 3 = 'x2 calcule' ; tl . 'TITRE' . 4 = 'x2 ref.' ; FINSI ; * Sortie en erreur si l'écart aux valeurs de références est trop important SI (errmax > 1.E-8) ; SINON ; MESS 'Cas test passe avec succes !' ; FINSI ; FIN ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales