Télécharger neldmead.procedur

Retour à la liste

Numérotation des lignes :

  1. * NELDMEAD PROCEDUR FD218221 26/09/22 21:15:06 12654
  2. DEBP NELDMEAD proc1*'PROCEDUR' ;
  3.  
  4.  
  5.  
  6. *---------------- V A L E U R S P A R D E F A U T -----------------*
  7. * D E S P A R A M E T R E S *
  8.  
  9. lnompar = MOTS 'ALPH' 'BETA' 'GAMM' 'DELT' 'CRIT' 'PAS' ;
  10. valpar = PROG 1. 2. 0.5 0.5 1.E-4 1. ;
  11. maxit = 200 ;
  12.  
  13.  
  14.  
  15. *------------- L E C T U R E D E S A R G U M E N T S --------------*
  16.  
  17. * Simplexe initial (obligatoire, mais 2 manieres possibles)
  18. icas = 1 ;
  19. * cas 1 : donnee d'un LISTREEL
  20. ARGU x0/'LISTREEL' ;
  21. SI (EGA (TYPE x0) 'LISTREEL') ;
  22. * dimension
  23. n = DIME x0 ;
  24. np1 = n + 1 ;
  25. SINON ;
  26. * cas 2 : donnee d'un LISTOBJE de LISTREEL
  27. ARGU s*'LISTOBJE' ;
  28. icas = 2 ;
  29. * test du type d'objets (doit etre LISTREEL)
  30. SI (NEG (EXTR s 'TYPE') 'LISTREEL') ;
  31. ERRE 1156 'AVEC' 'LISTREEL' ;
  32. FINSI ;
  33. * dimension
  34. np1 = DIME s ;
  35. n = np1 - 1 ;
  36. * test de la dimension des LISTREELs
  37. REPE b1 np1 ;
  38. lr1 = EXTR s &b1 ;
  39. SI (NEG (DIME lr1) n) ;
  40. ERRE 1158 'AVEC' n ;
  41. FINSI ;
  42. FIN b1 ;
  43. FINSI ;
  44.  
  45. * Nombre d'iterations (facultatifs)
  46. ARGU i1/'ENTIER' ;
  47. SI (EGA (TYPE i1) 'ENTIER') ;
  48. maxit = i1 ;
  49. FINSI ;
  50.  
  51. * Parametres utilisateur (tous facultatifs)
  52. REPE b1 (DIME lnompar) ;
  53. ARGU mot2/'MOT' ;
  54. SI (EGA (TYPE mot2) 'MOT') ;
  55. pos = POSI mot2 'DANS' lnompar ;
  56. SI (pos > 0) ;
  57. ARGU val1*'FLOTTANT' ;
  58. REMP valpar pos val1 ;
  59. FINSI ;
  60. SINON ;
  61. QUIT b1 ;
  62. FINSI ;
  63. FIN b1 ;
  64.  
  65.  
  66.  
  67. *-------------------- I N I T I A L I S A T I O N ---------------------*
  68.  
  69. * Si cas 1 (donnee d'un LISTREEL + pas), calcul automatique du simplexe
  70. * initial selon le point initial et le pas d'initialisation
  71. * (Spendley 1962)
  72. SI (EGA icas 1) ;
  73. tau = EXTR valpar 6 ;
  74. p = tau * ((np1 ** 0.5) + n - 1) / (n * (2. ** 0.5)) ;
  75. q = tau * ((np1 ** 0.5) - 1) / (n * (2. ** 0.5)) ;
  76. xq = PROG n*q ;
  77. s = ENUM x0 ;
  78. REPE b1 n ;
  79. x1 = x0 + xq ;
  80. vali = EXTR x0 &b1 ;
  81. REMP x1 &b1 (vali + p) ;
  82. s = s ET x1 ;
  83. FIN b1 ;
  84. FINSI ;
  85.  
  86. ** Evaluation de la fonction aux points du simplexe
  87. fs = PROG ;
  88. REPE b1 np1 ;
  89. xi = EXTR s &b1 ;
  90. fi = PROC1 xi ;
  91. fs = fs ET fi ;
  92. FIN b1 ;
  93.  
  94.  
  95. *-------------- B O U C L E D' O P T I M I S A T I O N --------------*
  96.  
  97. * Parametres d'evolution du simlexe
  98. alpha = EXTR valpar 1 ;
  99. beta = EXTR valpar 2 ;
  100. gamma = EXTR valpar 3 ;
  101. delta = EXTR valpar 4 ;
  102. crit0 = EXTR valpar 5 ;
  103.  
  104. * Boucle
  105. REPE b1 maxit ;
  106. * Tri des points du simplexe selon les valeurs de fs
  107. fs s = ORDO fs s ;
  108. * Points utiles pour decider de l'evolution
  109. x1 = EXTR s 1 ;
  110. xnp1 = EXTR s np1 ;
  111. f1 = EXTR fs 1 ;
  112. fn = EXTR fs n ;
  113. fnp1 = EXTR fs np1 ;
  114. * Centre de gravite de {x1 x2 ... xn}
  115. x0 = PROG n*0. ;
  116. REPE b2 n ;
  117. x0 = x0 + (EXTR s &b2) ;
  118. FIN b2 ;
  119. x0 = x0 / n ;
  120. * Reflexion de xnp1 par rapport a x0
  121. xr = x0 + (alpha * (x0 - xnp1)) ;
  122. fr = PROC1 xr ;
  123. * Si f(x1) <= f(xr) < f(xn), remplacement de xnp1 par xr
  124. SI ((f1 &lt;EG fr) ET (fr < fn)) ;
  125. REMP fs np1 fr ;
  126. REMP s np1 xr ;
  127. SINON ;
  128. * Si f(xr) < f(x1), expansion du simplexe
  129. SI (fr < f1) ;
  130. xe = x0 + (beta * (xr - x0)) ;
  131. fe = PROC1 xe ;
  132. * Si f(xe) <= f(xr), remplacement de xnp1 par xe
  133. SI (fe &lt;EG fr) ;
  134. REMP fs np1 fe ;
  135. REMP s np1 xe ;
  136. * Sinon, remplacement de xnp1 par xr
  137. SINON ;
  138. REMP fs np1 fr ;
  139. REMP s np1 xr ;
  140. FINSI ;
  141. * Si f(xn) < f(xr) : contraction du simplexe
  142. SINON ;
  143. xc = x0 + (gamma * (xnp1 - x0)) ;
  144. fc = PROC1 xc ;
  145. * Si f(xc) <= f(xnp1), remplacement de xnp1 par xc
  146. SI (fc < fnp1) ;
  147. REMP fs np1 fc ;
  148. REMP s np1 xc ;
  149. * Sinon, homothetie du simplexe autour de x1
  150. SINON ;
  151. REPE b2 np1 ;
  152. xi = EXTR s &b2 ;
  153. xi = x1 + (delta * (xi - x1)) ;
  154. fi = PROC1 xi ;
  155. REMP fs &b2 fi ;
  156. REMP s &b2 xi ;
  157. FIN b2 ;
  158. FINSI ;
  159. FINSI ;
  160. FINSI ;
  161. * Critere d'arret : dispersion des valeurs de la fonction objectif
  162. * aux sommets du simplexe
  163. crit1 = AGRE 'ECTY' fs ;
  164. SI (crit1 < crit0) ;
  165. QUIT b1 ;
  166. FINSI ;
  167. FIN b1 ;
  168.  
  169.  
  170. ** On rend le dernier simplexe trie et les valeurs de la fonction associees
  171. fs s = ORDO fs s ;
  172. FINP s fs ;
  173.  
  174.  

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