raaupdt
C RAAUPDT SOURCE FD218221 26/10/07 21:15:10 12662 SUBROUTINE RAAUPDT(N,M,XMMA,XVAL,XMIN,XMAX,LOW,UPP, & F0NEW,FNEW,F0APP,FAPP,EPSIMIN, & RAA0,RAA) C ---------------------------------------------------------------------- C Ce code est une adaptation en FORTRAN/ESOPE de l'algorithme de la GC-MMA C (Methode des Asymptotes Mobiles Globalement Convergente) propose initialement C en langage Matlab par K. Svarberg (sources : https://www.smoptit.se/) C ---------------------------------------------------------------------- C Cette subroutine met a jour les parametres RAA0 et RAA au cours des C sous iterations de la GC-MMA. C Les valeurs sont ajustees selon les valeurs courrantes et approximees C des fonctions objectif et contraintes. Ces nouvelles valeurs doivent C permettre de mieux approcher les fonctions C C Entrees : C --------- C N = Nombre de variables x_j C M = Nombre de contraintes C XMMA = Vecteur (N) des variables x_j courantes C XVAL = Vecteur (N) des variables x_j au debut des sous iterations C XMIN/XMAX = Vecteurs (N) des bornes inferieures/superieures pour les variables x_j C LOW/UPP = Vecteurs (N) des asymptotes inferieures/superieures du sous-probleme C F0NEW = Scalaire valeur courante de la fonction objectif C FNEW = Vecteur (M) valeurs courantes des fonctions contraintes C F0APP = Scalaire valeur approximee de la fonction objectif C FAPP = Vecteur (M) valeurs approximees des fonctions contraintes C EPSIMIN = Petit nombre positif ajoute aux valeurs approximees C RAA0 = Scalaire valeur approchee de la fonction objectif par le sous probleme C RAA = Vecteur (M) des valeurs approchees des fonctions contraintes par le sous probleme C C Sorties : C --------- C RAA0 = Scalaire, mise a jour C RAA = Vecteur (M), mis a jour C ---------------------------------------------------------------------- IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) C Arguments REAL*8 XMMA(N),XVAL(N),XMIN(N),XMAX(N),LOW(N),UPP(N) REAL*8 F0NEW,FNEW(M),F0APP,FAPP(M),EPSIMIN REAL*8 RAA0, RAA(M) C Constante locale PARAMETER (RAACOFMIN=1.0D-12) C Calcul de RAACOF RAACOF = 0.0D0 DO 10 I = 1, N XMAMI = MAX((XMAX(I)-XMIN(I)),1.0D-5) XXUL = ((XMMA(I)-XVAL(I))/(UPP(I)-XMMA(I))) * & ((XMMA(I)-XVAL(I))/(XMMA(I)-LOW(I))) ULXX = (UPP(I)-LOW(I))/XMAMI RAACOF = RAACOF+(XXUL*ULXX) 10 CONTINUE RAACOF = MAX(RAACOF,RAACOFMIN) C Mise a jour de RAA0 F0APPE = F0APP + 0.5D0 * EPSIMIN IF (F0NEW.GT.F0APPE) THEN DELTARAA0 = (1.0D0 / RAACOF) * (F0NEW - F0APP) ZZ0 = 1.1D0 * (RAA0 + DELTARAA0) ZZ0 = MIN(ZZ0, 10.D0 * RAA0) RAA0 = ZZ0 ENDIF C Mise a jour de RAA DO 20 I = 1, M FAPPE = FAPP(I) + 0.5D0 * EPSIMIN FDELTA = FNEW(I) - FAPPE ZZI = 1.1D0 * (RAA(I) + ((FNEW(I) - FAPP(I)) / RAACOF)) ZZI = MIN(ZZI, 10.D0 * RAA(I)) IF (FDELTA.GT.0.D0) RAA(I) = ZZI 20 CONTINUE RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales