Télécharger excel4.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : excel4.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 de la géométrie d'un treillis de 2 barres de section et *
  18. * d'écartement variables *
  19. * *
  20. * *
  21. * *
  22. * F *
  23. * / *
  24. * / *
  25. * / *
  26. * ʌ 3 * *
  27. * | ⟋ ⟍ *
  28. * | ⟋ ⟍ x1 : section des barres (cm2) *
  29. * 1m | ⟋ ⟍ *
  30. * | ⟋ ⟍ *
  31. * v 1 ⟋ ⟍ 2 *
  32. * ----*---------------------*----- *
  33. * <--------> *
  34. * x2 : 1/2 distance entre les barres (m) *
  35. * *
  36. * Les 2 barres sont rotulées en bas et soumises à une force au noeud 3 *
  37. * Fx = 24.8kN Fy = 198.4kN *
  38. * *
  39. * Le problème d'optimisation est le suivant : *
  40. * - Trouver (x1 x2) pour minimiser la masse du treillis *
  41. * - tels que la contrainte de traction dans chaque barre doit être *
  42. * inférieure à 100 N/mm2 *
  43. * *
  44. * Au final, le problème à résoudre se ramène à : *
  45. * Minimiser : w(x1,x2) = c1 * x1 + (1 + x2**2)**0.5 *
  46. * avec : s1(x1,x2) = c2 * (1 + x2**2)**0.5 * (8/x1 + 1/x1x2) < 1 *
  47. * s2(x1,x2) = c2 * (1 + x2**2)**0.5 * (8/x1 - 1/x1x2) < 1 *
  48. * 0.2 cm2 < x1 < 4 cm2 *
  49. * 0.1 m < x2 < 1.6 m *
  50. * *
  51. * si on choisit c1 = 1 et c2 = 0.124 alors la solution est : *
  52. * x1 = 1.41 cm2 x2 = 0.38 m *
  53. ************************************************************************
  54.  
  55. * Options d'affichage
  56. OPTI 'ECHO' 0 ;
  57. idess = FAUX ;
  58.  
  59. * Choix des paramètres du problème mécanique c1 et c2
  60. c1 = 1. ;
  61. c2 = 0.124 ;
  62.  
  63.  
  64.  
  65. ************************************************************************
  66. * F O N C T I O N O B J E C T I F *
  67. * E T *
  68. * F O N C T I O N S C O N T R A I N T E S *
  69. ************************************************************************
  70.  
  71. * Procédure FF : calcul de la fonction objectif w(x) et de ses
  72. * dérivées partielles
  73. DEBP FF tx*'TABLE' ;
  74. x1 = tx . 1 ;
  75. x2 = tx . 2 ;
  76. tf = TABL 'VECTEUR' ;
  77. ax2 = (1. + (x2**2))**0.5 ;
  78. tf . 0 = c1 * x1 * ax2 ;
  79. tf . 1 = c1 * ax2 ;
  80. tf . 2 = c1 * x1 * x2 / ax2 ;
  81. FINP tf ;
  82.  
  83. * Procédure FS1 : calcul de la fonction contrainte s1(x1,x2) et ses
  84. * dérivées partielles
  85. DEBP FS1 tx*'TABLE' ;
  86. x1 = tx . 1 ;
  87. x2 = tx . 2 ;
  88. tc = TABL 'VECTEUR' ;
  89. ax2 = (1. + (x2**2))**0.5 ;
  90. tc . 0 = c2 * ax2 * ((8./x1) + (1./(x1*x2))) ;
  91. tc . 1 = c2 * ax2 * ((-8./(x1*x1)) - (1./(x1*x1*x2))) ;
  92. tc . 2 = c2 * ((x2 * ((8./x1) + (1./(x1*x2))) / ax2) - (ax2/(x1*x2*x2))) ;
  93. FINP tc ;
  94. * Procédure FS2 : calcul de la fonction contrainte s2(x1,x2) et ses
  95. * dérivées partielles
  96. DEBP FS2 tx*'TABLE' ;
  97. x1 = tx . 1 ;
  98. x2 = tx . 2 ;
  99. tc = TABL 'VECTEUR' ;
  100. ax2 = (1. + (x2**2))**0.5 ;
  101. tc . 0 = c2 * ax2 * ((8./x1) - (1./(x1*x2))) ;
  102. tc . 1 = c2 * ax2 * ((-8./(x1*x1)) + (1./(x1*x1*x2))) ;
  103. tc . 2 = c2 * ((x2 * ((8./x1) + (1./(x1*x2))) / ax2) + (ax2/(x1*x2*x2))) ;
  104. FINP tc ;
  105.  
  106.  
  107.  
  108.  
  109. ************************************************************************
  110. * O P T I M I S A T I O N *
  111. ************************************************************************
  112.  
  113. * Initialisation de la table d'optimisation
  114. to = TABL ;
  115. * -- valeurs initales de x1 et x2
  116. to . 'VX0' = TABL 'VECTEUR' ;
  117. to . 'VX0' . 1 = 0.25 ;
  118. to . 'VX0' . 2 = 1.5 ;
  119. * -- valeur initiale de la fonction f(x1,x2)
  120. to . 'VF' = FF (to . 'VX0') ;
  121. * -- valeurs initiales des contraintes s1(x1,x2) et s2(x1,x2)
  122. to . 'MC' = TABL ;
  123. to . 'MC' . 1 = FS1 (to . 'VX0') ;
  124. to . 'MC' . 2 = FS2 (to . 'VX0') ;
  125. * -- bornes pour x1 et x2
  126. to . 'VXMIN' = TABL 'VECTEUR' ;
  127. to . 'VXMIN' . 1 = 0.2 ;
  128. to . 'VXMIN' . 2 = 0.1 ;
  129. to . 'VXMAX' = TABL 'VECTEUR' ;
  130. to . 'VXMAX' . 1 = 4. ;
  131. to . 'VXMAX' . 2 = 1.6 ;
  132. * -- bornes pour les fonctions contraintes
  133. to . 'VCMAX' = TABL 'VECTEUR' ;
  134. to . 'VCMAX' . 1 = 1. ;
  135. to . 'VCMAX' . 2 = 1. ;
  136. * -- choix de la methode ('STA' ou 'MOV')
  137. to . 'METHODE' = 'MOV' ;
  138. *to . 'T0' = 2./3. ;
  139. *to . 'S0' = 0.5 ;
  140.  
  141. * Listes pour stocker les resultats intermediaires :
  142. * fonction objectif, infaisabilité et variables de conception
  143. lf = PROG (to . 'VF' . 0) ;
  144. g1 = to . 'MC' . 1 . 0 ;
  145. g2 = to . 'MC' . 2 . 0 ;
  146. li = PROG (MAXI (PROG 0. ((g1 - 1.) / 1.) ((g2 - 1.) / 1.))) ;
  147. lx1 = PROG (to . 'VX0' . 1) ;
  148. lx2 = PROG (to . 'VX0' . 2) ;
  149.  
  150. * Boucle d'optimisation
  151. REPE bop 20 ;
  152. * appel a l'operateur EXCE --> nouveau couple (x1,x2) optimisé
  153. to_new = EXCE to ;
  154. * récuperation des nouvelles valeurs des variables x1 et x2
  155. tx_new = to_new . 'VX0' ;
  156. * calcul de la nouvelle valeur de la fonction objectif et de ses dérivées
  157. tf_new = FF tx_new ;
  158. fi = tf_new . 0 ;
  159. * calcul des nouvelles valeurs des fonctions contraintes et de leurs dérivées
  160. tg1_new = FS1 tx_new ;
  161. tg2_new = FS2 tx_new ;
  162. g1 = tg1_new . 0 ;
  163. g2 = tg2_new . 0 ;
  164. * mise à jour de la table d'optimisation
  165. to . 'VX0' = tx_new ;
  166. to . 'VF' = tf_new ;
  167. to . 'MC' . 1 = tg1_new ;
  168. to . 'MC' . 2 = tg2_new ;
  169. * calcul de l'infaisabilité (écart sur les fonctions contraintes)
  170. infi = MAXI (PROG 0. ((g1 - 1.) / 1.) ((g2 - 1.) / 1.)) ;
  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. FIN bop ;
  177. nit = (DIME lf) - 1 ;
  178.  
  179.  
  180.  
  181.  
  182. ************************************************************************
  183. * V É R I F I C A T I O N *
  184. ************************************************************************
  185.  
  186. * Valeurs de référence attendues pour la fonction objectif et les
  187. * variables de conception x1,x2 (article de Svanberg)
  188. fref = 1.51 ;
  189. x1ref = 1.41 ;
  190. x2ref = 0.38 ;
  191. * Comparaison avec les valeurs calculées par Cast3M
  192. tol1 = 1.E-2 ;
  193. ierr = FAUX ;
  194. MESS ' Variable de | Valeur | Valeur | Erreur' ;
  195. MESS ' conception | calculee | attendue | relative' ;
  196. MESS '-----------------------------------------------' ;
  197. x1 = tx_new . 1 ;
  198. x2 = tx_new . 2 ;
  199. err1 = ABS ((x1 - x1ref) / x1ref) ;
  200. err2 = ABS ((x2 - x2ref) / x2ref) ;
  201. mot1 = CHAI 'FORMAT' '(F6.4)' 'x1' *5 '|' *14 x1 /16 '|' *26 x1ref /28 '|' *38 err1 /40 ;
  202. mot2 = CHAI 'FORMAT' '(F6.4)' 'x2' *5 '|' *14 x2 /16 '|' *26 x2ref /28 '|' *38 err2 /40 ;
  203. SI (err1 > tol1) ;
  204. ierr = VRAI ;
  205. mot1 = CHAI mot1 ' <-- NOK' ;
  206. FINSI ;
  207. MESS mot1 ;
  208. SI (err2 > tol1) ;
  209. ierr = VRAI ;
  210. mot2 = CHAI mot2 ' <-- NOK' ;
  211. FINSI ;
  212. MESS mot2 ;
  213. MESS ' Fonction | Valeur | Valeur | Erreur' ;
  214. MESS ' objectif | calculee | attendue | relative' ;
  215. MESS '-----------------------------------------------' ;
  216. erri = ABS ((fi - fref) / fref) ;
  217. moti = CHAI 'FORMAT' '(F6.4)' 'f' *5 '|' *14 fi /16 '|' *26 fref /28 '|' *38 erri /40 ;
  218. SI (erri > tol1) ;
  219. ierr = VRAI ;
  220. moti = CHAI moti ' <-- NOK' ;
  221. FINSI ;
  222. MESS moti ;
  223.  
  224.  
  225.  
  226.  
  227.  
  228. ************************************************************************
  229. * P O S T T R A I T E M E N T *
  230. ************************************************************************
  231.  
  232. * Évolutions temporelles de f, de l'infaisabilité et des variables
  233. * de conception en fonction des iterations d'optimisation
  234. SI idess ;
  235. lit = PROG 0. 'PAS' 1. nit ;
  236. evf = EVOL 'ROUG' 'MANU' 'Iteration' lit 'F' lf ;
  237. evfr = EVOL 'ROUG' 'MANU' 'Iteration' (PROG 0. nit) 'F' (PROG fref fref) ;
  238. tl = TABL ;
  239. tl . 2 = 'TIRR' ;
  240. tl . 'TITRE' = TABL ;
  241. tl . 'TITRE' . 1 = 'F calculee' ;
  242. tl . 'TITRE' . 2 = 'F ref.' ;
  243. DESS (evf ET evfr) 'TITR' 'Fonction objectif F(x) VS Iterations' 'LEGE' tl ;
  244. evi = EVOL 'VERT' 'MANU' 'Iteration' lit 'Inf' li ;
  245. tl . 'TITRE' . 1 = 'Infaisabilite' ;
  246. DESS evi 'TITR' 'Infaisabilite VS Iterations' 'LEGE' tl ;
  247. evx1 = EVOL 'ROUG' 'MANU' 'Iteration' lit 'x1,x2' lx1 ;
  248. x1r = EXTR lxref 1 ;
  249. evx1r = EVOL 'ROUG' 'MANU' 'Iteration' (PROG 0. nit) 'F' (PROG x1ref x1ref) ;
  250. evx2 = EVOL 'ORAN' 'MANU' 'Iteration' lit 'x1,x2' lx2 ;
  251. x2r = EXTR lxref 2 ;
  252. evx2r = EVOL 'ORAN' 'MANU' 'Iteration' (PROG 0. nit) 'F' (PROG x2ref x2ref) ;
  253. tl . 4 = 'TIRR' ;
  254. tl . 'TITRE' . 1 = 'x1 calcule' ;
  255. tl . 'TITRE' . 2 = 'x1 ref.' ;
  256. tl . 'TITRE' . 3 = 'x2 calcule' ;
  257. tl . 'TITRE' . 4 = 'x2 ref.' ;
  258. DESS (evx1 ET evx1r ET evx2 ET evx2r) 'TITR' 'Valeurs x1 et x2 VS Iterations' 'LEGE' tl ;
  259. FINSI ;
  260.  
  261. * Sortie en erreur si l'écart aux valeurs de références est trop important
  262. SI ierr ;
  263. ERRE 'Erreur dans le calcul d''optimisation' ;
  264. FINSI ;
  265.  
  266. FIN ;
  267.  
  268.  
  269.  
  270.  

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