Télécharger gcmmasub.eso

Retour à la liste

Numérotation des lignes :

gcmmasub
  1. C GCMMASUB SOURCE FD218221 26/10/07 21:15:06 12662
  2. SUBROUTINE GCMMASUB(M,N,XVAL,XMIN,XMAX,LOW,UPP,
  3. & F0VAL,DF0DX,FVAL,DFDX,
  4. & RAA0,RAA,ALBEFA,
  5. & ALFA,BETA,P0,Q0,P,Q,B,R0)
  6. IMPLICIT INTEGER(I-N)
  7. IMPLICIT REAL*8 (A-H,O-Z)
  8.  
  9. C ----------------------------------------------------------------------
  10. C Ce code est une adaptation en FORTRAN/ESOPE de l'algorithme de la MMA
  11. C (Methode des Asymptotes Mobiles) propose initialement en langage
  12. C Matlab par K. Svarberg (sources : https://www.smoptit.se/)
  13. C ----------------------------------------------------------------------
  14. C Cette subroutine definie un sous-probleme d'optimisation convexe
  15. C selon la methode des asymptotes mobiles globalement convergente (GC-MMA)
  16. C
  17. C Le probleme d'optimisation initial est le suivant :
  18. C Minimiser : f_0(x) + a_0*z + SUM[ c_i*y_i + 0.5*d_i*(y_i)^2 ]
  19. C soumis a : f_i(x) - a_i*z - y_i <= 0, i = 1,...,m
  20. C xmin_j <= x_j <= xmax_j, j = 1,...,n
  21. C z >= 0, y_i >= 0, i = 1,...,m
  22. C
  23. C Le probleme est transforme en une suite de sous-problemes convexes :
  24. C Minimiser : SUM[ p0_j/(upp_j-x_j) + q0_j/(x_j-low_j) ] + a_0*z +
  25. C + SUM[ c_i*y_i + 0.5*d_i*(y_i)^2 ]
  26. C Soumis a : SUM[ p_ij/(upp_j-x_j) + q_ij/(x_j-low_j) ] - a_i*z - y_i <= b_i, i = 1,...,m
  27. C alfa_j <= x_j <= beta_j, j = 1,...,n
  28. C z >= 0, y_i >= 0, i = 1,...,m
  29. C
  30. C Cette subroutine calcule les matrices/vecteurs decrivant un sous-probleme
  31. C Elle necessite d'etre iteree pour approcher la solution du probleme initial
  32. C
  33. C Entrees :
  34. C ---------
  35. C M = Nombre de contraintes
  36. C N = Nombre de variables x_j
  37. C XVAL = Vecteur (N) des variables x_j
  38. C XMIN/XMAX = Vecteur (N) des bornes inferieures/superieures pour les variables x_j
  39. C LOW/UPP = Vecteurs (N) des asymptotes inferieures/superieures du sous-probleme
  40. C DF0DX = Vecteur (N) des valeurs du gradient de la fonction objectif f_0,
  41. C par rapport aux variables x_j, calcules en XVAL
  42. C FVAL = Vecteur (M) des valeurs des fonctions contraintes f_i,
  43. C calculees en XVAL
  44. C DFDX = Matrice (M x N) des valeurs du gradient des fonctions contraintes f_i,
  45. C par rapport aux variables x_j, calcules en XVAL
  46. C DFDX(i,j) = gradient de f_i par rapport a x_j
  47. C ALBEFA = Pourcentage d'ecart par rapport aux asymptotes alfa et beta
  48. C RAA0 = Parametre de conservatisme / courbure de l'objectif
  49. C RAA = Vecteur (M) des coefficients de conservatisme / courbure des contraintes
  50. C
  51. C Sorties :
  52. C ---------
  53. C ALFA/BETA = Vecteurs (N) des bornes inferieures/superieures mises a jour
  54. C P0/Q0 = Vecteurs (N) des coefficients des asymptotes superieure/inferieure
  55. C dans la fonction objectif
  56. C P/Q = Matrices (M x N) des coefficients des asymptotes superieure/inferieure
  57. C des contraintes
  58. C B = Vecteur (M) des seconds membres des contraintes
  59. C R0 = Parametre d'ajustement de la fonction objectif approximee
  60. C ----------------------------------------------------------------------
  61.  
  62. C Arguments
  63. INTEGER M,N
  64. REAL*8 RAA0,ALBEFA,F0VAL,R0
  65. REAL*8 XVAL(N),XMIN(N),XMAX(N),LOW(N),UPP(N),RAA(M)
  66. REAL*8 DF0DX(N),FVAL(M),DFDX(M,N)
  67. REAL*8 ALFA(N),BETA(N),P0(N),Q0(N),P(M,N),Q(M,N),B(M)
  68.  
  69. C Variables locales
  70. INTEGER I,J
  71.  
  72. C Mise a jour des asymptotes alfa et beta
  73. DO 10 I = 1, N
  74. ALFA(I) = MAX(LOW(I)+ALBEFA*(XVAL(I)-LOW(I)),XMIN(I))
  75. BETA(I) = MIN(UPP(I)-ALBEFA*(UPP(I)-XVAL(I)),XMAX(I))
  76. 10 CONTINUE
  77.  
  78. C Calcul de p0, q0 et r0
  79. R0 = F0VAL
  80. DO 20 I = 1, N
  81. DF0 = DF0DX(I)
  82. XMAMI = MAX(XMAX(I)-XMIN(I), 0.00001D0)
  83. P0(I) = MAX( DF0,0.D0) + 0.001D0*ABS(DF0) + RAA0/XMAMI
  84. Q0(I) = MAX(-DF0,0.D0) + 0.001D0*ABS(DF0) + RAA0/XMAMI
  85. P0(I) = P0(I) * ((UPP(I) - XVAL(I))**2)
  86. Q0(I) = Q0(I) * ((XVAL(I) - LOW(I))**2)
  87. R0 = R0 - P0(I)/(UPP(I)-XVAL(I)) - Q0(I)/(XVAL(I)-LOW(I))
  88. 20 CONTINUE
  89.  
  90. C Calcul de p, q et b
  91. DO 30 J = 1, M
  92. B(J) = -FVAL(J)
  93. DO 40 I = 1, N
  94. DFJ = DFDX(J,I)
  95. P(J,I) = MAX(0.D0, DFJ) + 0.001D0*ABS(DFJ)
  96. & + (RAA(J)/(XMAX(I)-XMIN(I)))
  97. Q(J,I) = MAX(0.D0,-DFJ) + 0.001D0*ABS(DFJ)
  98. & + (RAA(J)/(XMAX(I)-XMIN(I)))
  99. P(J,I) = P(J,I) * ((UPP(I)-XVAL(I))**2)
  100. Q(J,I) = Q(J,I) * ((XVAL(I)-LOW(I))**2)
  101. B(J) = B(J) + P(J,I) / (UPP(I) - XVAL(I))
  102. & + Q(J,I) / (XVAL(I) - LOW(I))
  103. 40 CONTINUE
  104. 30 CONTINUE
  105.  
  106. RETURN
  107. END
  108.  
  109.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales