Télécharger excel3.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : excel3.dgibi
  2. ************************************************************************
  3. ************************************************************************
  4.  
  5. ************************************************************************
  6. * Test de l'opérateur EXCE : Méthode des Asymptotes Mobiles *
  7. * Reproduction d'un cas test de l'article originel de Svanberg *
  8. * *
  9. * Krister Svanberg: The method of moving asymptotes - a new method *
  10. * for structural optimization *
  11. * International Journal for Numerical Methods in Engineering, *
  12. * vol. 24, 359-373 (1987) *
  13. * https://doi.org/10.1002/nme.1620240207 *
  14. * *
  15. * *
  16. * *
  17. * Optimisation d'une poutre en flexion de section variable *
  18. * *
  19. * |‾‾‾‾‾‾‾‾‾‾‾‾|____________ *
  20. * | | |____________ *
  21. * | | | |____________ *
  22. * | | | | |____________ *
  23. * | | | | | | *
  24. * | 1 | 2 | 3 | 4 | 5 | *
  25. * | | | | |‾‾‾‾‾‾‾‾‾‾‾‾| *
  26. * | | | |‾‾‾‾‾‾‾‾‾‾‾‾ | *
  27. * | | |‾‾‾‾‾‾‾‾‾‾‾‾ | *
  28. * | |‾‾‾‾‾‾‾‾‾‾‾‾ \|/ *
  29. * ‾‾‾‾‾‾‾‾‾‾‾‾ v *
  30. * *
  31. * La poutre est divisée en 5 troncons de même longueur et de sections *
  32. * x1 x2 x3 x4 et x5 qui seront les variables de conception. *
  33. * Elle est encastrée à gauche et soumise à une force verticale à *
  34. * droite. *
  35. * *
  36. * Le problème d'optimisation est le suivant : *
  37. * - Trouver x=(x1 x2 x3 x4 x5) pour minimiser la masse de la poutre *
  38. * - tels que la flèche soit inférieure à une limite donnée *
  39. * *
  40. * Au final, le problème à résoudre se ramène à : *
  41. * Minimiser : f(x) = c1 * (x1 + x2 + x3 + x4 + x5) *
  42. * avec : g(x) = 61/x1**3 + 37/x2**3 + 19/x3**3 *
  43. * + 7/x4**3 + 1/x5**3 < c2 *
  44. * xi > 0 *
  45. * *
  46. * si on choisit c1 = 0.0624 et c2 = 1 alors la solution est : *
  47. * x1 = 6.016 x2 = 5.309 x3 = 4.494 x4 = 3.502 x5 = 2.153 *
  48. ************************************************************************
  49.  
  50. * Options d'affichage
  51. OPTI 'ECHO' 0 ;
  52. idess = FAUX ;
  53.  
  54. * Choix des paramètres du problème mécanique c1 et c2
  55. c1 = 0.0624 ;
  56. c2 = 1. ;
  57.  
  58.  
  59.  
  60. ************************************************************************
  61. * F O N C T I O N O B J E C T I F *
  62. * E T *
  63. * F O N C T I O N S C O N T R A I N T E S *
  64. ************************************************************************
  65.  
  66. * Procédure FF : calcul de la fonction objectif f(x) et de ses dérivées
  67. * partielles
  68. DEBP FF tx*'TABLE' ;
  69. x1 = tx . 1 ;
  70. x2 = tx . 2 ;
  71. x3 = tx . 3 ;
  72. x4 = tx . 4 ;
  73. x5 = tx . 5 ;
  74. tf = TABL 'VECTEUR' ;
  75. tf . 0 = c1 * (x1 + x2 + x3 + x4 + x5) ;
  76. tf . 1 = c1 ;
  77. tf . 2 = c1 ;
  78. tf . 3 = c1 ;
  79. tf . 4 = c1 ;
  80. tf . 5 = c1 ;
  81. FINP tf ;
  82.  
  83. * Procedure FG : calcul de la fonction contrainte g(x) et ses dérivées
  84. * partielles
  85. DEBP FG tx*'TABLE' ;
  86. x1 = tx . 1 ;
  87. x2 = tx . 2 ;
  88. x3 = tx . 3 ;
  89. x4 = tx . 4 ;
  90. x5 = tx . 5 ;
  91. tc = TABL 'VECTEUR' ;
  92. tc . 0 = (61. / (x1**3)) + (37. / (x2**3)) + (19. / (x3**3)) + (7. / (x4**3)) + (1. / (x5**3)) ;
  93. tc . 1 = -3. * 61. / (x1**4) ;
  94. tc . 2 = -3. * 37. / (x2**4) ;
  95. tc . 3 = -3. * 19. / (x3**4) ;
  96. tc . 4 = -3. * 7. / (x4**4) ;
  97. tc . 5 = -3. * 1. / (x5**4) ;
  98. FINP tc ;
  99.  
  100.  
  101.  
  102.  
  103.  
  104. ************************************************************************
  105. * O P T I M I S A T I O N *
  106. ************************************************************************
  107.  
  108. * Initialisation de la table d'optimisation
  109. to = TABL ;
  110. * -- valeurs initales de x
  111. to . 'VX0' = TABL 'VECTEUR' ;
  112. to . 'VX0' . 1 = 5. ;
  113. to . 'VX0' . 2 = 5. ;
  114. to . 'VX0' . 3 = 5. ;
  115. to . 'VX0' . 4 = 5. ;
  116. to . 'VX0' . 5 = 5. ;
  117. * -- valeur initiale de la fonction f(x)
  118. to . 'VF' = FF (to . 'VX0') ;
  119. * -- valeurs initiales des contraintes g(x)
  120. to . 'MC' = TABL ;
  121. to . 'MC' . 1 = FG (to . 'VX0') ;
  122. * -- bornes pour les xi
  123. to . 'VXMIN' = TABL 'VECTEUR' ;
  124. to . 'VXMIN' . 1 = 0. ;
  125. to . 'VXMIN' . 2 = 0. ;
  126. to . 'VXMIN' . 3 = 0. ;
  127. to . 'VXMIN' . 4 = 0. ;
  128. to . 'VXMIN' . 5 = 0. ;
  129. to . 'VXMAX' = TABL 'VECTEUR' ;
  130. to . 'VXMAX' . 1 = 50. ;
  131. to . 'VXMAX' . 2 = 50. ;
  132. to . 'VXMAX' . 3 = 50. ;
  133. to . 'VXMAX' . 4 = 50. ;
  134. to . 'VXMAX' . 5 = 50. ;
  135. * -- bornes pour la fonction contrainte (c2)
  136. to . 'VCMAX' = TABL 'VECTEUR' ;
  137. to . 'VCMAX' . 1 = c2 ;
  138. * -- choix de la methode ('STA' ou 'MOV')
  139. to . 'METHODE' = 'MOV' ;
  140. to . 'T0' = 2./3. ;
  141.  
  142. * Listes pour stocker les resultats intermediaires :
  143. * fonction objectif, infaisabilité et variables de conception
  144. lf = PROG (to . 'VF' . 0) ;
  145. g1 = to . 'MC' . 1 . 0 ;
  146. li = PROG (MAXI ((PROG 0.) ET ((g1 - c2) / c2))) ;
  147. lx1 = PROG (to . 'VX0' . 1) ;
  148. lx2 = PROG (to . 'VX0' . 2) ;
  149. lx3 = PROG (to . 'VX0' . 3) ;
  150. lx4 = PROG (to . 'VX0' . 4) ;
  151. lx5 = PROG (to . 'VX0' . 5) ;
  152.  
  153. * Boucle d'optimisation
  154. REPE bop 20 ;
  155. * appel a l'operateur EXCE --> nouveaux xi optimisés
  156. to_new = EXCE to ;
  157. * récuperation des nouvelles valeurs des variables xi
  158. tx_new = to_new . 'VX0' ;
  159. * calcul de la nouvelle valeur de la fonction objectif et de ses dérivées
  160. tf_new = FF tx_new ;
  161. fi = tf_new . 0 ;
  162. * calcul des nouvelles valeurs des fonctions contraintes et de leurs dérivées
  163. tg_new = FG tx_new ;
  164. gi = tg_new . 0 ;
  165. * mise à jour de la table d'optimisation
  166. to . 'VX0' = tx_new ;
  167. to . 'VF' = tf_new ;
  168. to . 'MC' . 1 = tg_new ;
  169. * calcul de l'infaisabilité (écart sur les fonctions contraintes)
  170. infi = MAXI (PROG 0. ((gi - c2) / c2)) ;
  171. * remplissage des listes pour visualition des itérations
  172. lf = lf ET fi ;
  173. li = li ET infi ;
  174. lx1 = lx1 ET (tx_new . 1) ;
  175. lx2 = lx2 ET (tx_new . 2) ;
  176. lx3 = lx3 ET (tx_new . 3) ;
  177. lx4 = lx4 ET (tx_new . 4) ;
  178. lx5 = lx5 ET (tx_new . 5) ;
  179. FIN bop ;
  180. nit = (DIME lf) - 1 ;
  181.  
  182.  
  183.  
  184.  
  185.  
  186. ************************************************************************
  187. * V É R I F I C A T I O N *
  188. ************************************************************************
  189.  
  190. * Valeurs de référence attendues pour la fonction objectif et les
  191. * variables de conception xi (article de Svanberg)
  192. fref = 1.340 ;
  193. lxref = PROG 6.016 5.309 4.494 3.502 2.153 ;
  194. * Comparaison avec les valeurs calculée par Cast3M
  195. tol1 = 1.E-3 ;
  196. ierr = FAUX ;
  197. MESS ' Variable de | Valeur | Valeur | Erreur' ;
  198. MESS ' conception | calculee | attendue | relative' ;
  199. MESS '-----------------------------------------------' ;
  200. REPE b1 5 ;
  201. xi = tx_new . &b1 ;
  202. xref = EXTR lxref &b1 ;
  203. erri = ABS ((xi - xref) / xref) ;
  204. moti = CHAI 'FORMAT' '(F6.4)' 'x' *5 &b1 *6 '|' *14 xi /16 '|' *26 xref /28 '|' *38 erri /40 ;
  205. SI (erri > tol1) ;
  206. ierr = VRAI ;
  207. moti = CHAI moti ' <-- NOK' ;
  208. FINSI ;
  209. MESS moti ;
  210. FIN b1 ;
  211. MESS ' Fonction | Valeur | Valeur | Erreur' ;
  212. MESS ' objectif | calculee | attendue | relative' ;
  213. MESS '-----------------------------------------------' ;
  214. erri = ABS ((fi - fref) / fref) ;
  215. moti = CHAI 'FORMAT' '(F6.4)' 'f' *5 '|' *14 fi /16 '|' *26 fref /28 '|' *38 erri /40 ;
  216. SI (erri > tol1) ;
  217. ierr = VRAI ;
  218. moti = CHAI moti ' <-- NOK' ;
  219. FINSI ;
  220. MESS moti ;
  221.  
  222.  
  223.  
  224.  
  225.  
  226. ************************************************************************
  227. * P O S T T R A I T E M E N T *
  228. ************************************************************************
  229.  
  230. * Évolutions temporelles de f, de l'infaisabilité et des variables
  231. * de conception en fonction des iterations d'optimisation
  232. SI idess ;
  233. lit = PROG 0. 'PAS' 1. nit ;
  234. evf = EVOL 'ROUG' 'MANU' 'Iteration' lit 'F' lf ;
  235. evfr = EVOL 'ROUG' 'MANU' 'Iteration' (PROG 0. nit) 'F' (PROG fref fref) ;
  236. tl = TABL ;
  237. tl . 2 = 'TIRR' ;
  238. tl . 'TITRE' = TABL ;
  239. tl . 'TITRE' . 1 = 'F calculee' ;
  240. tl . 'TITRE' . 2 = 'F ref.' ;
  241. DESS (evf ET evfr) 'TITR' 'Fonction objectif F(x) VS Iterations' 'LEGE' tl ;
  242. evi = EVOL 'VERT' 'MANU' 'Iteration' lit 'Inf' li ;
  243. tl . 'TITRE' . 1 = 'Infaisabilite' ;
  244. DESS evi 'TITR' 'Infaisabilite VS Iterations' 'LEGE' tl ;
  245. evx1 = EVOL 'ROUG' 'MANU' 'Iteration' lit 'x' lx1 ;
  246. x1r = EXTR lxref 1 ;
  247. evx1r = EVOL 'ROUG' 'MANU' 'Iteration' (PROG 0. nit) 'F' (PROG x1r x1r) ;
  248. evx2 = EVOL 'ORAN' 'MANU' 'Iteration' lit 'x' lx2 ;
  249. x2r = EXTR lxref 2 ;
  250. evx2r = EVOL 'ORAN' 'MANU' 'Iteration' (PROG 0. nit) 'F' (PROG x2r x2r) ;
  251. evx3 = EVOL 'JAUN' 'MANU' 'Iteration' lit 'x' lx3 ;
  252. x3r = EXTR lxref 3 ;
  253. evx3r = EVOL 'JAUN' 'MANU' 'Iteration' (PROG 0. nit) 'F' (PROG x3r x3r) ;
  254. evx4 = EVOL 'VERT' 'MANU' 'Iteration' lit 'x' lx4 ;
  255. x4r = EXTR lxref 4 ;
  256. evx4r = EVOL 'VERT' 'MANU' 'Iteration' (PROG 0. nit) 'F' (PROG x4r x4r) ;
  257. evx5 = EVOL 'BLEU' 'MANU' 'Iteration' lit 'x' lx5 ;
  258. x5r = EXTR lxref 5 ;
  259. evx5r = EVOL 'BLEU' 'MANU' 'Iteration' (PROG 0. nit) 'F' (PROG x5r x5r) ;
  260. tl . 4 = 'TIRR' ;
  261. tl . 6 = 'TIRR' ;
  262. tl . 8 = 'TIRR' ;
  263. tl . 10 = 'TIRR' ;
  264. tl . 'TITRE' . 1 = 'x1 calcule' ;
  265. tl . 'TITRE' . 2 = 'x1 ref.' ;
  266. tl . 'TITRE' . 3 = 'x2 calcule' ;
  267. tl . 'TITRE' . 4 = 'x2 ref.' ;
  268. tl . 'TITRE' . 5 = 'x3 calcule' ;
  269. tl . 'TITRE' . 6 = 'x3 ref.' ;
  270. tl . 'TITRE' . 7 = 'x4 calcule' ;
  271. tl . 'TITRE' . 8 = 'x4 ref.' ;
  272. tl . 'TITRE' . 9 = 'x5 calcule' ;
  273. tl . 'TITRE' . 10 = 'x5 ref.' ;
  274. DESS (evx1 ET evx1r ET evx2 ET evx2r ET evx3 ET evx3r ET evx4 ET evx4r ET evx5 ET evx5r)
  275. 'TITR' 'Valeurs x VS Iterations' 'LEGE' tl ;
  276. FINSI ;
  277.  
  278. * Sortie en erreur si l'écart aux valeurs de références est trop important
  279. SI ierr ;
  280. ERRE 'Erreur dans le calcul d''optimisation' ;
  281. FINSI ;
  282.  
  283. FIN ;
  284.  
  285.  
  286.  
  287.  

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