* fichier : mma_02.dgibi ************************************************************************ ************************************************************************ ************************************************************************ * Test de l'opérateur MMA : Méthode des Asymptotes Mobiles * * Application a un probleme simple (pour jouer) * * * * Le problème s'écrit : * * Minimiser : f0(x) = x1² + x2² + x3² * * sur x * * avec : f1(x) = (x1-5)² + (x2-2)² + (x3-1)² - 9 <= 0 * * f2(x) = (x1-3)² + (x2-4)² + (x3-3)² - 9 <= 0 * * 0 <= xi <= 5 pour i=1,2,3 * * * * La solution est : x1 = 2.0175 x2 = 1.7800 x3 = 1.2375 * ************************************************************************ * Options d'affichage itrac = FAUX ; * Procedure pour calculer f0, f1, f2 ainsi que les derivees partielles * df0/dxi, df1/dxi, df2/dxi pour i=1,2,3 df = 2. * a ; dgda . 1 = 2. * (a - b1) ; dgda . 2 = 2. * (a - b2) ; FINP f df g dgda ; * Solution de reference x1ref = 2.0175 ; x2ref = 1.7800 ; x3ref = 1.2375 ; MESS ; MESS 'Solution de reference' ; MESS ' x1 x2 x3 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' = 0. ; t . 'XMAX' = 5. ; 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 x3 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 ; lx3 = lx3 ET x3 ; * 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 . '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.' ; FINSI ; * Sortie en erreur si l'écart aux valeurs de références est trop important SI (errmax > 1.E-5) ; SINON ; MESS 'Cas test passe avec succes !' ; FINSI ; FIN ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales