pyfemtet 0.9.5__py3-none-any.whl → 1.0.0b0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pyfemtet might be problematic. Click here for more details.

Files changed (272) hide show
  1. pyfemtet/__init__.py +6 -1
  2. pyfemtet/_i18n/1. make_pot_and_update_po.bat +8 -0
  3. pyfemtet/_i18n/2. build_mo.bat +5 -0
  4. pyfemtet/_i18n/__init__.py +4 -0
  5. pyfemtet/_i18n/babel.cfg +2 -0
  6. pyfemtet/_i18n/i18n.py +37 -0
  7. pyfemtet/_i18n/locales/ja/LC_MESSAGES/messages.mo +0 -0
  8. pyfemtet/_i18n/locales/ja/LC_MESSAGES/messages.po +1020 -0
  9. pyfemtet/_i18n/locales/messages.pot +987 -0
  10. pyfemtet/{_message → _i18n}/messages.py +128 -41
  11. pyfemtet/_util/closing.py +19 -0
  12. pyfemtet/_util/dask_util.py +89 -7
  13. pyfemtet/_util/df_util.py +29 -0
  14. pyfemtet/_util/excel_macro_util.py +8 -3
  15. pyfemtet/_util/excel_parse_util.py +43 -23
  16. pyfemtet/_util/femtet_access_inspection.py +120 -0
  17. pyfemtet/{_femtet_config_util/autosave.py → _util/femtet_autosave.py} +7 -0
  18. pyfemtet/_util/femtet_exit.py +105 -0
  19. pyfemtet/_util/femtet_version.py +20 -0
  20. pyfemtet/_util/helper.py +94 -0
  21. pyfemtet/_util/process_util.py +107 -0
  22. pyfemtet/_util/str_enum.py +44 -0
  23. pyfemtet/core.py +15 -47
  24. pyfemtet/dispatch_extensions/__init__.py +8 -11
  25. pyfemtet/dispatch_extensions/_impl.py +42 -198
  26. pyfemtet/logger/__init__.py +8 -1
  27. pyfemtet/logger/_impl.py +5 -6
  28. pyfemtet/opt/__init__.py +3 -17
  29. pyfemtet/opt/exceptions.py +45 -0
  30. pyfemtet/opt/femopt.py +608 -0
  31. pyfemtet/opt/history/__init__.py +11 -0
  32. pyfemtet/opt/history/_history.py +1404 -0
  33. pyfemtet/opt/history/_hypervolume.py +169 -0
  34. pyfemtet/opt/history/_optimality.py +79 -0
  35. pyfemtet/opt/interface/__init__.py +17 -24
  36. pyfemtet/opt/interface/_base_interface.py +222 -0
  37. pyfemtet/opt/interface/_excel_interface/__init__.py +3 -0
  38. pyfemtet/opt/interface/_excel_interface/debug-excel-interface.xlsm +0 -0
  39. pyfemtet/opt/interface/_excel_interface/excel_interface.py +999 -0
  40. pyfemtet/opt/interface/_femtet_interface/__init__.py +3 -0
  41. pyfemtet/opt/interface/{_femtet_parametric.py → _femtet_interface/_femtet_parametric.py} +20 -12
  42. pyfemtet/opt/interface/{_femtet.py → _femtet_interface/femtet_interface.py} +505 -349
  43. pyfemtet/opt/interface/_femtet_with_nx_interface/__init__.py +5 -0
  44. pyfemtet/opt/interface/_femtet_with_nx_interface/femtet_with_nx_interface.py +230 -0
  45. pyfemtet/opt/interface/_femtet_with_nx_interface/model1.prt +0 -0
  46. pyfemtet/opt/interface/_femtet_with_nx_interface/model1.x_t +98 -0
  47. pyfemtet/opt/interface/{_femtet_with_nx → _femtet_with_nx_interface}/update_model.py +1 -3
  48. pyfemtet/opt/interface/_femtet_with_solidworks/__init__.py +5 -0
  49. pyfemtet/opt/interface/_femtet_with_solidworks/femtet_with_solidworks_interface.py +122 -0
  50. pyfemtet/opt/interface/_solidworks_interface/__init__.py +5 -0
  51. pyfemtet/opt/interface/_solidworks_interface/solidworks_interface.py +206 -0
  52. pyfemtet/opt/interface/_surrogate_model_interface/__init__.py +8 -0
  53. pyfemtet/opt/interface/_surrogate_model_interface/base_surrogate_interface.py +150 -0
  54. pyfemtet/opt/interface/_surrogate_model_interface/botorch_interface.py +298 -0
  55. pyfemtet/opt/interface/_surrogate_model_interface/debug-pof-botorch.reccsv +18 -0
  56. pyfemtet/opt/interface/_with_excel_settings/__init__.py +61 -0
  57. pyfemtet/opt/interface/_with_excel_settings/with_excel_settings.py +134 -0
  58. pyfemtet/opt/meta_script/YAML_Generator.xlsm +0 -0
  59. pyfemtet/opt/meta_script/__main__.py +58 -36
  60. pyfemtet/opt/optimizer/__init__.py +7 -9
  61. pyfemtet/opt/optimizer/_base_optimizer.py +885 -0
  62. pyfemtet/opt/optimizer/optuna_optimizer/__init__.py +9 -0
  63. pyfemtet/opt/optimizer/optuna_optimizer/_optuna_attribute.py +73 -0
  64. pyfemtet/opt/optimizer/optuna_optimizer/_optuna_optimizer.py +678 -0
  65. pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/__init__.py +7 -0
  66. pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/debug-pof-botorch.reccsv +18 -0
  67. pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/enable_nonlinear_constraint.py +244 -0
  68. pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/pof_botorch_sampler.py +1249 -0
  69. pyfemtet/opt/optimizer/optuna_optimizer/wat_ex14_parametric_jp.femprj +0 -0
  70. pyfemtet/opt/optimizer/scipy_optimizer/__init__.py +1 -0
  71. pyfemtet/opt/optimizer/scipy_optimizer/_scipy_optimizer.py +364 -0
  72. pyfemtet/opt/prediction/__init__.py +7 -0
  73. pyfemtet/opt/prediction/_botorch_utils.py +133 -0
  74. pyfemtet/opt/prediction/_gpytorch_modules_extension.py +142 -0
  75. pyfemtet/opt/prediction/_helper.py +155 -0
  76. pyfemtet/opt/prediction/_model.py +118 -0
  77. pyfemtet/opt/problem/problem.py +304 -0
  78. pyfemtet/opt/problem/variable_manager/__init__.py +20 -0
  79. pyfemtet/opt/problem/variable_manager/_string_as_expression.py +115 -0
  80. pyfemtet/opt/problem/variable_manager/_variable_manager.py +295 -0
  81. pyfemtet/opt/visualization/history_viewer/__main__.py +5 -0
  82. pyfemtet/opt/visualization/{_base.py → history_viewer/_base_application.py} +18 -13
  83. pyfemtet/opt/visualization/history_viewer/_common_pages.py +150 -0
  84. pyfemtet/opt/visualization/{_complex_components → history_viewer/_complex_components}/alert_region.py +10 -5
  85. pyfemtet/opt/visualization/{_complex_components → history_viewer/_complex_components}/control_femtet.py +16 -13
  86. pyfemtet/opt/visualization/{_complex_components → history_viewer/_complex_components}/main_graph.py +117 -47
  87. pyfemtet/opt/visualization/{_complex_components → history_viewer/_complex_components}/pm_graph.py +159 -138
  88. pyfemtet/opt/visualization/history_viewer/_process_monitor/_application.py +173 -0
  89. pyfemtet/opt/visualization/history_viewer/_process_monitor/_pages.py +291 -0
  90. pyfemtet/opt/visualization/{_wrapped_components → history_viewer/_wrapped_components}/dbc.py +1 -1
  91. pyfemtet/opt/visualization/{_wrapped_components → history_viewer/_wrapped_components}/dcc.py +1 -1
  92. pyfemtet/opt/visualization/{_wrapped_components → history_viewer/_wrapped_components}/html.py +1 -1
  93. pyfemtet/opt/visualization/history_viewer/result_viewer/__main__.py +5 -0
  94. pyfemtet/opt/visualization/{result_viewer/application.py → history_viewer/result_viewer/_application.py} +6 -6
  95. pyfemtet/opt/visualization/{result_viewer/pages.py → history_viewer/result_viewer/_pages.py} +106 -82
  96. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08.csv +18 -0
  97. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08.db +0 -0
  98. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8.jpg +0 -0
  99. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8.log +45 -0
  100. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8.pdt +0 -0
  101. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_1.jpg +0 -0
  102. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_1.pdt +0 -0
  103. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_10.jpg +0 -0
  104. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_10.pdt +0 -0
  105. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_11.jpg +0 -0
  106. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_11.pdt +0 -0
  107. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_12.jpg +0 -0
  108. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_12.pdt +0 -0
  109. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_13.jpg +0 -0
  110. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_13.pdt +0 -0
  111. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_14.jpg +0 -0
  112. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_14.pdt +0 -0
  113. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_15.jpg +0 -0
  114. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_15.pdt +0 -0
  115. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_16.jpg +0 -0
  116. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_16.pdt +0 -0
  117. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_17.jpg +0 -0
  118. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_17.pdt +0 -0
  119. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_18.jpg +0 -0
  120. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_18.pdt +0 -0
  121. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_19.jpg +0 -0
  122. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_19.pdt +0 -0
  123. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_2.jpg +0 -0
  124. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_2.pdt +0 -0
  125. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_20.jpg +0 -0
  126. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_20.pdt +0 -0
  127. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_3.jpg +0 -0
  128. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_3.pdt +0 -0
  129. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.bgr +0 -0
  130. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.bnd +0 -0
  131. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.btr +0 -0
  132. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.jpg +0 -0
  133. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.mtl +0 -0
  134. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.pdt +0 -0
  135. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.prm +0 -0
  136. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_5.jpg +0 -0
  137. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_5.pdt +0 -0
  138. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_6.jpg +0 -0
  139. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_6.pdt +0 -0
  140. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_7.jpg +0 -0
  141. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_7.pdt +0 -0
  142. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_8.jpg +0 -0
  143. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_8.pdt +0 -0
  144. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_9.jpg +0 -0
  145. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_9.pdt +0 -0
  146. pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.femprj +0 -0
  147. pyfemtet/opt/visualization/plotter/main_figure_creator.py +536 -0
  148. pyfemtet/opt/visualization/plotter/pm_graph_creator.py +359 -0
  149. pyfemtet/opt/worker_status.py +120 -0
  150. {pyfemtet-0.9.5.dist-info → pyfemtet-1.0.0b0.dist-info}/METADATA +23 -24
  151. pyfemtet-1.0.0b0.dist-info/RECORD +172 -0
  152. pyfemtet-1.0.0b0.dist-info/entry_points.txt +3 -0
  153. pyfemtet/_femtet_config_util/exit.py +0 -59
  154. pyfemtet/_message/1. make_pot.bat +0 -11
  155. pyfemtet/_message/2. make_mo.bat +0 -6
  156. pyfemtet/_message/__init__.py +0 -5
  157. pyfemtet/_message/babel.cfg +0 -2
  158. pyfemtet/_message/locales/ja/LC_MESSAGES/messages.mo +0 -0
  159. pyfemtet/_message/locales/ja/LC_MESSAGES/messages.po +0 -570
  160. pyfemtet/_message/locales/messages.pot +0 -551
  161. pyfemtet/_warning.py +0 -87
  162. pyfemtet/brep/_impl.py +0 -18
  163. pyfemtet/opt/_femopt.py +0 -1007
  164. pyfemtet/opt/_femopt_core.py +0 -1169
  165. pyfemtet/opt/_test_utils/control_femtet.py +0 -39
  166. pyfemtet/opt/_test_utils/hyper_sphere.py +0 -24
  167. pyfemtet/opt/_test_utils/record_history.py +0 -130
  168. pyfemtet/opt/advanced_samples/excel_ui/(ref) original_project.femprj +0 -0
  169. pyfemtet/opt/advanced_samples/excel_ui/femtet-macro.xlsm +0 -0
  170. pyfemtet/opt/advanced_samples/excel_ui/pyfemtet-core.py +0 -291
  171. pyfemtet/opt/advanced_samples/excel_ui/test-pyfemtet-core.cmd +0 -22
  172. pyfemtet/opt/advanced_samples/restart/gal_ex13_parametric.femprj +0 -0
  173. pyfemtet/opt/advanced_samples/restart/gal_ex13_parametric_restart.py +0 -99
  174. pyfemtet/opt/advanced_samples/restart/gal_ex13_parametric_restart_jp.py +0 -102
  175. pyfemtet/opt/advanced_samples/surrogate_model/gal_ex13_create_training_data.py +0 -60
  176. pyfemtet/opt/advanced_samples/surrogate_model/gal_ex13_create_training_data_jp.py +0 -57
  177. pyfemtet/opt/advanced_samples/surrogate_model/gal_ex13_optimize_with_surrogate.py +0 -100
  178. pyfemtet/opt/advanced_samples/surrogate_model/gal_ex13_optimize_with_surrogate_jp.py +0 -90
  179. pyfemtet/opt/advanced_samples/surrogate_model/gal_ex13_parametric.femprj +0 -0
  180. pyfemtet/opt/interface/_base.py +0 -101
  181. pyfemtet/opt/interface/_excel_interface.py +0 -984
  182. pyfemtet/opt/interface/_femtet_excel.py +0 -141
  183. pyfemtet/opt/interface/_femtet_with_nx/__init__.py +0 -3
  184. pyfemtet/opt/interface/_femtet_with_nx/_interface.py +0 -178
  185. pyfemtet/opt/interface/_femtet_with_sldworks.py +0 -298
  186. pyfemtet/opt/interface/_surrogate/__init__.py +0 -5
  187. pyfemtet/opt/interface/_surrogate/_base.py +0 -129
  188. pyfemtet/opt/interface/_surrogate/_chaospy.py +0 -71
  189. pyfemtet/opt/interface/_surrogate/_singletaskgp.py +0 -71
  190. pyfemtet/opt/interface/_surrogate_excel.py +0 -102
  191. pyfemtet/opt/optimizer/_base.py +0 -376
  192. pyfemtet/opt/optimizer/_optuna/_botorch_patch/enable_nonlinear_constraint.py +0 -220
  193. pyfemtet/opt/optimizer/_optuna/_optuna.py +0 -434
  194. pyfemtet/opt/optimizer/_optuna/_pof_botorch.py +0 -1914
  195. pyfemtet/opt/optimizer/_scipy.py +0 -159
  196. pyfemtet/opt/optimizer/_scipy_scalar.py +0 -127
  197. pyfemtet/opt/optimizer/parameter.py +0 -113
  198. pyfemtet/opt/prediction/_base.py +0 -61
  199. pyfemtet/opt/prediction/single_task_gp.py +0 -119
  200. pyfemtet/opt/samples/femprj_sample/ParametricIF.femprj +0 -0
  201. pyfemtet/opt/samples/femprj_sample/ParametricIF.py +0 -29
  202. pyfemtet/opt/samples/femprj_sample/ParametricIF_test_result.reccsv +0 -13
  203. pyfemtet/opt/samples/femprj_sample/cad_ex01_NX.femprj +0 -0
  204. pyfemtet/opt/samples/femprj_sample/cad_ex01_NX.prt +0 -0
  205. pyfemtet/opt/samples/femprj_sample/cad_ex01_NX.py +0 -135
  206. pyfemtet/opt/samples/femprj_sample/cad_ex01_NX_test_result.reccsv +0 -23
  207. pyfemtet/opt/samples/femprj_sample/cad_ex01_SW.SLDPRT +0 -0
  208. pyfemtet/opt/samples/femprj_sample/cad_ex01_SW.femprj +0 -0
  209. pyfemtet/opt/samples/femprj_sample/cad_ex01_SW.py +0 -131
  210. pyfemtet/opt/samples/femprj_sample/cad_ex01_SW_test_result.reccsv +0 -23
  211. pyfemtet/opt/samples/femprj_sample/constrained_pipe.femprj +0 -0
  212. pyfemtet/opt/samples/femprj_sample/constrained_pipe.py +0 -96
  213. pyfemtet/opt/samples/femprj_sample/constrained_pipe_test_result.reccsv +0 -13
  214. pyfemtet/opt/samples/femprj_sample/gal_ex58_parametric.femprj +0 -0
  215. pyfemtet/opt/samples/femprj_sample/gal_ex58_parametric.py +0 -74
  216. pyfemtet/opt/samples/femprj_sample/gal_ex58_parametric_test_result.reccsv +0 -13
  217. pyfemtet/opt/samples/femprj_sample/gau_ex08_parametric.femprj +0 -0
  218. pyfemtet/opt/samples/femprj_sample/gau_ex08_parametric.py +0 -58
  219. pyfemtet/opt/samples/femprj_sample/gau_ex08_parametric_test_result.reccsv +0 -23
  220. pyfemtet/opt/samples/femprj_sample/gau_ex12_parametric.femprj +0 -0
  221. pyfemtet/opt/samples/femprj_sample/gau_ex12_parametric.py +0 -52
  222. pyfemtet/opt/samples/femprj_sample/her_ex40_parametric.femprj +0 -0
  223. pyfemtet/opt/samples/femprj_sample/her_ex40_parametric.py +0 -138
  224. pyfemtet/opt/samples/femprj_sample/her_ex40_parametric_test_result.reccsv +0 -18
  225. pyfemtet/opt/samples/femprj_sample/paswat_ex1_parametric.femprj +0 -0
  226. pyfemtet/opt/samples/femprj_sample/paswat_ex1_parametric.py +0 -60
  227. pyfemtet/opt/samples/femprj_sample/paswat_ex1_parametric_parallel.py +0 -61
  228. pyfemtet/opt/samples/femprj_sample/paswat_ex1_parametric_test_result.reccsv +0 -18
  229. pyfemtet/opt/samples/femprj_sample/wat_ex14_parametric.femprj +0 -0
  230. pyfemtet/opt/samples/femprj_sample/wat_ex14_parametric.py +0 -58
  231. pyfemtet/opt/samples/femprj_sample/wat_ex14_parametric_parallel.py +0 -58
  232. pyfemtet/opt/samples/femprj_sample/wat_ex14_parametric_test_result.reccsv +0 -18
  233. pyfemtet/opt/samples/femprj_sample_jp/ParametricIF_jp.femprj +0 -0
  234. pyfemtet/opt/samples/femprj_sample_jp/ParametricIF_jp.py +0 -29
  235. pyfemtet/opt/samples/femprj_sample_jp/cad_ex01_NX_jp.femprj +0 -0
  236. pyfemtet/opt/samples/femprj_sample_jp/cad_ex01_NX_jp.py +0 -129
  237. pyfemtet/opt/samples/femprj_sample_jp/cad_ex01_SW_jp.femprj +0 -0
  238. pyfemtet/opt/samples/femprj_sample_jp/cad_ex01_SW_jp.py +0 -125
  239. pyfemtet/opt/samples/femprj_sample_jp/constrained_pipe_jp.py +0 -93
  240. pyfemtet/opt/samples/femprj_sample_jp/gal_ex58_parametric_jp.femprj +0 -0
  241. pyfemtet/opt/samples/femprj_sample_jp/gal_ex58_parametric_jp.py +0 -70
  242. pyfemtet/opt/samples/femprj_sample_jp/gau_ex08_parametric_jp.femprj +0 -0
  243. pyfemtet/opt/samples/femprj_sample_jp/gau_ex08_parametric_jp.py +0 -57
  244. pyfemtet/opt/samples/femprj_sample_jp/gau_ex12_parametric_jp.py +0 -52
  245. pyfemtet/opt/samples/femprj_sample_jp/her_ex40_parametric_jp.femprj +0 -0
  246. pyfemtet/opt/samples/femprj_sample_jp/her_ex40_parametric_jp.py +0 -138
  247. pyfemtet/opt/samples/femprj_sample_jp/paswat_ex1_parametric_jp.femprj +0 -0
  248. pyfemtet/opt/samples/femprj_sample_jp/paswat_ex1_parametric_jp.py +0 -58
  249. pyfemtet/opt/samples/femprj_sample_jp/paswat_ex1_parametric_parallel_jp.py +0 -59
  250. pyfemtet/opt/samples/femprj_sample_jp/wat_ex14_parametric_jp.py +0 -56
  251. pyfemtet/opt/samples/femprj_sample_jp/wat_ex14_parametric_parallel_jp.py +0 -56
  252. pyfemtet/opt/visualization/_complex_components/main_figure_creator.py +0 -332
  253. pyfemtet/opt/visualization/_complex_components/pm_graph_creator.py +0 -201
  254. pyfemtet/opt/visualization/_process_monitor/application.py +0 -226
  255. pyfemtet/opt/visualization/_process_monitor/pages.py +0 -406
  256. pyfemtet/opt/visualization/_wrapped_components/__init__.py +0 -0
  257. pyfemtet/opt/visualization/result_viewer/__init__.py +0 -0
  258. pyfemtet-0.9.5.dist-info/RECORD +0 -158
  259. pyfemtet-0.9.5.dist-info/entry_points.txt +0 -3
  260. /pyfemtet/{_femtet_config_util → opt/problem}/__init__.py +0 -0
  261. /pyfemtet/{brep → opt/visualization/history_viewer}/__init__.py +0 -0
  262. /pyfemtet/opt/{_test_utils → visualization/history_viewer/_complex_components}/__init__.py +0 -0
  263. /pyfemtet/opt/{optimizer/_optuna → visualization/history_viewer/_process_monitor}/__init__.py +0 -0
  264. /pyfemtet/opt/{optimizer/_optuna/_botorch_patch → visualization/history_viewer/_wrapped_components}/__init__.py +0 -0
  265. /pyfemtet/opt/visualization/{_wrapped_components → history_viewer/_wrapped_components}/str_enum.py +0 -0
  266. /pyfemtet/opt/visualization/{result_viewer → history_viewer/result_viewer}/.gitignore +0 -0
  267. /pyfemtet/opt/visualization/{_complex_components → history_viewer/result_viewer}/__init__.py +0 -0
  268. /pyfemtet/opt/visualization/{_process_monitor → plotter}/__init__.py +0 -0
  269. /pyfemtet/opt/{samples/femprj_sample_jp/wat_ex14_parametric_jp.femprj → wat_ex14_parametric_jp.femprj} +0 -0
  270. {pyfemtet-0.9.5.dist-info → pyfemtet-1.0.0b0.dist-info}/LICENSE +0 -0
  271. {pyfemtet-0.9.5.dist-info → pyfemtet-1.0.0b0.dist-info}/LICENSE_THIRD_PARTY.txt +0 -0
  272. {pyfemtet-0.9.5.dist-info → pyfemtet-1.0.0b0.dist-info}/WHEEL +0 -0
@@ -1,129 +0,0 @@
1
- """外部 CAD (NX) 連携
2
-
3
- Femtet の応力解析ソルバ、および
4
- Siemens 社製 CAD ソフト NX を用いて
5
- 軽量かつ高剛性な H 型鋼の設計を行います。
6
-
7
- 事前準備として、下記の手順を実行してください。
8
- - NX のインストール
9
- - C:\temp フォルダを作成する
10
- - Note: NX が .x_t ファイルをこのフォルダに保存します。
11
- - 以下のファイルを同じフォルダに配置
12
- - cad_ex01_NX_jp.py (このファイル)
13
- - cad_ex01_NX.prt
14
- - cad_ex01_NX_jp.femprj
15
- """
16
-
17
- import os
18
-
19
- from win32com.client import constants
20
-
21
- from pyfemtet.opt import FEMOpt
22
- from pyfemtet.opt.interface import FemtetWithNXInterface
23
- from pyfemtet.core import ModelError
24
-
25
-
26
- here, me = os.path.split(__file__)
27
- os.chdir(here)
28
-
29
-
30
- def von_mises(Femtet):
31
- """モデルの最大フォン・ミーゼス応力を取得します。
32
-
33
- Note:
34
- 目的関数または制約関数は、
35
- 第一引数としてFemtetを受け取り、
36
- 戻り値としてfloat型を返す必要があります。
37
-
38
- Warning:
39
- CAD 連携機能では、意図しない位置に境界条件が設定される可能性があります。
40
-
41
- この例では、境界条件が意図したとおりに割り当てられている場合、
42
- 最大変位は常に負になります。最大変位が正の場合、境界条件の割り当てが
43
- 失敗したとみなし、ModelError を送出します。
44
-
45
- 最適化中に ModelError、MeshError、または SolveError が発生した場合、
46
- 最適化プロセスは試行を失敗とみなし、次のトライアルにスキップします。
47
- """
48
-
49
- # 簡易的な境界条件の正しさチェック
50
- dx, dy, dz = Femtet.Gogh.Galileo.GetMaxDisplacement_py()
51
- if dz >= 0:
52
- raise ModelError('境界条件の設定が間違っています。')
53
-
54
- # ミーゼス応力計算
55
- Gogh = Femtet.Gogh
56
- Gogh.Galileo.Potential = constants.GALILEO_VON_MISES_C
57
- succeed, (x, y, z), mises = Gogh.Galileo.GetMAXPotentialPoint_py(constants.CMPX_REAL_C)
58
-
59
- return mises
60
-
61
-
62
- def mass(Femtet):
63
- """モデルの質量を取得します。"""
64
- return Femtet.Gogh.Galileo.GetMass('H_beam')
65
-
66
-
67
- def C_minus_B(Femtet, opt):
68
- """C 寸法と B 寸法の差を計算します。
69
-
70
- 別の例では、次のスニペットを使用して設計変数にアクセスします。
71
-
72
- A = Femtet.GetVariableValue('A')
73
-
74
- ただし、CAD 連携機能を使用する場合、設計変数が .femprj ファイルに
75
- 設定されていないため、この方法は機能しません。
76
-
77
- CAD 連携機能を使用する場合、以下の方法で設計変数にアクセスすることができます。
78
-
79
- # add_parameter() で追加したパラメータの変数名をキーとする辞書を得る方法
80
- params: dict = opt.get_parameter()
81
- A = params['A']
82
-
83
- 又は
84
-
85
- # add_parameter() で追加した順のパラメータの値の配列を得る方法
86
- values: np.ndarray = opt.get_parameter('values')
87
- A, B, C = values
88
-
89
- 目的関数と拘束関数は、最初の引数の後に任意の変数を取ることができます。
90
- FEMOpt のメンバ変数 opt には get_parameter() というメソッドがあります。
91
- このメソッドによって add_parameter() で追加された設計変数を取得できます。
92
- opt を第 2 引数として取ることにより、目的関数または拘束関数内で
93
- get_parameter() を実行して設計変数を取得できます。
94
- """
95
- A, B, C = opt.get_parameter('values')
96
- return C - B
97
-
98
-
99
- if __name__ == '__main__':
100
-
101
- # NX-Femtet 連携オブジェクトの初期化
102
- # この処理により、Python プロセスは Femtet に接続を試みます。
103
- fem = FemtetWithNXInterface(
104
- prt_path='cad_ex01_NX.prt',
105
- open_result_with_gui=False,
106
- export_curves=False,
107
- export_surfaces=False,
108
- export_solids=True,
109
- export_flattened_assembly=False,
110
- )
111
-
112
- # FEMOpt オブジェクトの初期化 (最適化問題とFemtetとの接続を行います)
113
- femopt = FEMOpt(fem=fem)
114
-
115
- # 設計変数を最適化問題に追加 (femprj ファイルに登録されている変数を指定してください)
116
- femopt.add_parameter('A', 10, lower_bound=1, upper_bound=59)
117
- femopt.add_parameter('B', 10, lower_bound=1, upper_bound=40)
118
- femopt.add_parameter('C', 20, lower_bound=5, upper_bound=59)
119
-
120
- # 拘束関数を最適化問題に追加
121
- femopt.add_constraint(C_minus_B, 'C>B', lower_bound=1, args=femopt.opt)
122
-
123
- # 目的関数を最適化問題に追加
124
- femopt.add_objective(von_mises, name='von Mises (Pa)')
125
- femopt.add_objective(mass, name='mass (kg)')
126
-
127
- # 最適化を実行
128
- femopt.set_random_seed(42)
129
- femopt.optimize(n_trials=20)
@@ -1,125 +0,0 @@
1
- """外部 CAD (SOLIDWORKS) 連携
2
-
3
- Femtet の応力解析ソルバ、および
4
- Dassault Systemes 社製 CAD ソフト SOLIDWORKS を用いて
5
- 軽量かつ高剛性な H 型鋼の設計を行います。
6
-
7
- 事前準備として、下記の手順を実行してください。
8
- - SOLIDWORKS のインストール
9
- - C:\temp フォルダを作成する
10
- - Note: SOLIDWORKS が .x_t ファイルをこのフォルダに保存します。
11
- - 以下のファイルを同じフォルダに配置
12
- - cad_ex01_SW_jp.py (このファイル)
13
- - cad_ex01_SW.SLDPRT
14
- - cad_ex01_SW_jp.femprj
15
- """
16
-
17
- import os
18
-
19
- from win32com.client import constants
20
-
21
- from pyfemtet.opt import FEMOpt
22
- from pyfemtet.opt.interface import FemtetWithSolidworksInterface
23
- from pyfemtet.core import ModelError
24
-
25
-
26
- here, me = os.path.split(__file__)
27
- os.chdir(here)
28
-
29
-
30
- def von_mises(Femtet):
31
- """モデルの最大フォン・ミーゼス応力を取得します。
32
-
33
- Note:
34
- 目的関数または制約関数は、
35
- 第一引数としてFemtetを受け取り、
36
- 戻り値としてfloat型を返す必要があります。
37
-
38
- Warning:
39
- CAD 連携機能では、意図しない位置に境界条件が設定される可能性があります。
40
-
41
- この例では、境界条件が意図したとおりに割り当てられている場合、
42
- 最大変位は常に負になります。最大変位が正の場合、境界条件の割り当てが
43
- 失敗したとみなし、ModelError を送出します。
44
-
45
- 最適化中に ModelError、MeshError、または SolveError が発生した場合、
46
- 最適化プロセスは試行を失敗とみなし、次のトライアルにスキップします。
47
- """
48
-
49
- # 簡易的な境界条件の正しさチェック
50
- dx, dy, dz = Femtet.Gogh.Galileo.GetMaxDisplacement_py()
51
- if dz >= 0:
52
- raise ModelError('境界条件の設定が間違っています。')
53
-
54
- # ミーゼス応力計算
55
- Gogh = Femtet.Gogh
56
- Gogh.Galileo.Potential = constants.GALILEO_VON_MISES_C
57
- succeed, (x, y, z), mises = Gogh.Galileo.GetMAXPotentialPoint_py(constants.CMPX_REAL_C)
58
-
59
- return mises
60
-
61
-
62
- def mass(Femtet):
63
- """モデルの質量を取得します。"""
64
- return Femtet.Gogh.Galileo.GetMass('H_beam')
65
-
66
-
67
- def C_minus_B(Femtet, opt):
68
- """C 寸法と B 寸法の差を計算します。
69
-
70
- 別の例では、次のスニペットを使用して設計変数にアクセスします。
71
-
72
- A = Femtet.GetVariableValue('A')
73
-
74
- ただし、CAD 連携機能を使用する場合、設計変数が .femprj ファイルに
75
- 設定されていないため、この方法は機能しません。
76
-
77
- CAD 連携機能を使用する場合、以下の方法で設計変数にアクセスすることができます。
78
-
79
- # add_parameter() で追加したパラメータの変数名をキーとする辞書を得る方法
80
- params: dict = opt.get_parameter()
81
- A = params['A']
82
-
83
- 又は
84
-
85
- # add_parameter() で追加した順のパラメータの値の配列を得る方法
86
- values: np.ndarray = opt.get_parameter('values')
87
- A, B, C = values
88
-
89
- 目的関数と拘束関数は、最初の引数の後に任意の変数を取ることができます。
90
- FEMOpt のメンバ変数 opt には get_parameter() というメソッドがあります。
91
- このメソッドによって add_parameter() で追加された設計変数を取得できます。
92
- opt を第 2 引数として取ることにより、目的関数または拘束関数内で
93
- get_parameter() を実行して設計変数を取得できます。
94
- """
95
- A, B, C = opt.get_parameter('values')
96
- return C - B
97
-
98
-
99
- if __name__ == '__main__':
100
-
101
- # NX-Femtet 連携オブジェクトの初期化
102
- # この処理により、Python プロセスは Femtet に接続を試みます。
103
- fem = FemtetWithSolidworksInterface(
104
- sldprt_path='cad_ex01_SW.SLDPRT',
105
- open_result_with_gui=False,
106
- )
107
-
108
- # FEMOpt オブジェクトの初期化 (最適化問題とFemtetとの接続を行います)
109
- femopt = FEMOpt(fem=fem)
110
-
111
- # 設計変数を最適化問題に追加 (femprj ファイルに登録されている変数を指定してください)
112
- femopt.add_parameter('A', 10, lower_bound=1, upper_bound=59)
113
- femopt.add_parameter('B', 10, lower_bound=1, upper_bound=40)
114
- femopt.add_parameter('C', 20, lower_bound=5, upper_bound=59)
115
-
116
- # 拘束関数を最適化問題に追加
117
- femopt.add_constraint(C_minus_B, 'C>B', lower_bound=1, args=femopt.opt)
118
-
119
- # 目的関数を最適化問題に追加
120
- femopt.add_objective(von_mises, name='von Mises (Pa)')
121
- femopt.add_objective(mass, name='mass (kg)')
122
-
123
- # 最適化を実行
124
- femopt.set_random_seed(42)
125
- femopt.optimize(n_trials=20)
@@ -1,93 +0,0 @@
1
- """拘束付き最適化を実装するサンプル。
2
-
3
- このセクションでは、拘束の種類と、拘束を必要とするモデルで
4
- 最適化を実行する手順について説明します。
5
-
6
- """
7
-
8
- from optuna_integration import BoTorchSampler
9
- from pyfemtet.opt import FEMOpt, OptunaOptimizer
10
-
11
-
12
- def mises_stress(Femtet):
13
- """フォンミーゼス応力を目的関数として計算します。
14
-
15
- この関数は、最適化の実行中に FEMOpt オブジェクトによって
16
- 自動的に呼び出されます。
17
-
18
- 引数:
19
- Femtet: PyFemtet を使用して目的関数または拘束関数を
20
- 定義する場合、最初の引数は Femtet インスタンスを
21
- 取る必要があります。
22
-
23
- 戻り値:
24
- float: 目的または拘束関数は単一の float を返すよう定義してください。
25
- """
26
- return Femtet.Gogh.Galileo.GetMaxStress_py()[2]
27
-
28
-
29
- def radius_diff(Femtet, opt):
30
- """パイプの外側の半径と内側の半径の差を計算します。
31
-
32
- この拘束は、最適化の実行中にパイプの内側の半径が
33
- 外側の半径を超えないようにするために呼び出されます。
34
-
35
- 注意:
36
- OptunaOptimizer の BoTorchSampler を使用していて、
37
- strict な拘束を使用する場合、パラメータを提案するため
38
- に繰り返し計算が必要になるため、Femtet へのアクセスが
39
- 非常に遅くなる可能性があることに注意してください。
40
- この関数の例のように、Femtet にアクセスするのではなく、
41
- Optimizer オブジェクトを介してパラメータを取得して計算
42
- を実行することをお勧めします。
43
-
44
- 非推奨::
45
-
46
- p = Femtet.GetVariableValue('p')
47
-
48
- 代わりに::
49
-
50
- params = opt.get_parameter()
51
- p = params['p']
52
-
53
- 引数:
54
- Femtet: PyFemtet を使用して目的関数または拘束関数を
55
- 定義する場合、最初の引数は Femtet インスタンスを
56
- 取る必要があります。
57
- opt: このオブジェクトを使用すると、Femtet を経由せず
58
- に外側の半径と内側の半径の値を取得できます。
59
- """
60
- params = opt.get_parameter()
61
- internal_r = params['internal_r']
62
- external_r = params['external_r']
63
- return external_r - internal_r
64
-
65
-
66
- if __name__ == '__main__':
67
- # 最適化手法のセットアップ
68
- opt = OptunaOptimizer(
69
- sampler_class=BoTorchSampler,
70
- sampler_kwargs=dict(
71
- n_startup_trials=3, # 最初の 3 回はランダムサンプリングを行います。
72
- )
73
- )
74
- femopt = FEMOpt(opt=opt)
75
-
76
- # 変数の追加
77
- femopt.add_parameter("external_r", 10, lower_bound=0.1, upper_bound=10)
78
- femopt.add_parameter("internal_r", 5, lower_bound=0.1, upper_bound=10)
79
-
80
- # 最適化の実行中に外側の半径を超えないように strict 拘束を追加します。
81
- femopt.add_constraint(
82
- radius_diff, # 拘束関数 (ここでは 外半径 - 内半径).
83
- name='管厚さ', # 拘束関数にはプログラム上の名前とは別に自由な名前を付与できます.
84
- lower_bound=1, # 拘束関数の下限 (ここでは管の厚みを最低 1 とする).
85
- args=(femopt.opt,) # 拘束関数に渡される、Femtet 以外の追加の引数.
86
- )
87
-
88
- # 目的関数の追加
89
- femopt.add_objective(mises_stress, name='ミーゼス応力')
90
-
91
- # 最適化の実行
92
- femopt.set_random_seed(42)
93
- femopt.optimize(n_trials=10)
@@ -1,70 +0,0 @@
1
- """単目的最適化: スプリングバックを加味した曲げ
2
-
3
- Femtet の応力解析ソルバを利用して、スプリングバックを考慮した
4
- 目標の材料曲げ角度を達成するために必要な曲げ角度を決定します。
5
- ※ 弾塑性解析は特別オプション機能です。
6
-
7
- 対応プロジェクト:gal_ex58_parametric_jp.femprj
8
- """
9
- import numpy as np
10
- from win32com.client import constants
11
- from optuna.integration.botorch import BoTorchSampler
12
-
13
- from pyfemtet.opt import FEMOpt, OptunaOptimizer
14
-
15
-
16
- def bending(Femtet):
17
- """材料の曲げ角度を取得します。
18
-
19
- Note:
20
- 目的関数または制約関数は、
21
- 第一引数としてFemtetを受け取り、
22
- 戻り値としてfloat型を返す必要があります。
23
-
24
- Params:
25
- Femtet: Femtet をマクロで操作するためのインスタンスです。詳細な情報については、「Femtet マクロヘルプ」をご覧ください。
26
-
27
- Returns:
28
- float: 曲げ。
29
- """
30
- Gogh = Femtet.Gogh
31
-
32
- # モードを除荷後に設定
33
- Gogh.Galileo.Mode = Gogh.Galileo.nMode - 1
34
-
35
- # 計測対象点の変位を取得
36
- Gogh.Galileo.Vector = constants.GALILEO_DISPLACEMENT_C
37
- succeed, (x, y, z) = Gogh.Galileo.GetVectorAtPoint_py(200, 0, 0)
38
-
39
- # 曲げ起点 (100, 0) と変形後の点を結ぶ線分が X 軸となす角度を計算
40
- bending_point = np.array((100, 0))
41
- bended_point = np.array((200 + 1000 * x.Real, 1000 * z.Real))
42
- dx, dz = bended_point - bending_point
43
- degree = np.arctan2(-dz, dx)
44
-
45
- return degree * 360 / (2*np.pi) # 単位: 度
46
-
47
-
48
- if __name__ == '__main__':
49
-
50
- # 数値最適化問題の初期化 (最適化手法を決定します)
51
- opt = OptunaOptimizer(
52
- sampler_class=BoTorchSampler,
53
- sampler_kwargs=dict(
54
- n_startup_trials=3,
55
- )
56
- )
57
-
58
- # FEMOpt オブジェクトの初期化 (最適化問題とFemtetとの接続を行います)
59
- femopt = FEMOpt(opt=opt)
60
-
61
- # 設計変数を最適化問題に追加 (femprj ファイルに登録されている変数を指定してください)
62
- femopt.add_parameter("rot", 90, lower_bound=80, upper_bound=100)
63
-
64
- # 目的関数を最適化問題に追加
65
- # 曲げ角度の目標は 90° です。
66
- femopt.add_objective(bending, name='曲げ角度(度)', direction=90)
67
-
68
- # 最適化を実行
69
- femopt.set_random_seed(42)
70
- femopt.optimize(n_trials=10)
@@ -1,57 +0,0 @@
1
- """単目的最適化: 有限長ヘリカルコイルの自己インダクタンス
2
-
3
- Femtet の磁場解析ソルバを利用して、
4
- 有限長ヘリカルコイルの自己インダクタンスを
5
- 目標の値にする設計を行います。
6
-
7
- 対応プロジェクト: gau_ex08_parametric_jp.femprj
8
- """
9
- from optuna.integration.botorch import BoTorchSampler
10
- from pyfemtet.opt import FEMOpt, OptunaOptimizer
11
-
12
-
13
- def inductance(Femtet):
14
- """自己インダクタンスを取得します。
15
-
16
- Note:
17
- 目的関数または制約関数は、
18
- 第一引数としてFemtetを受け取り、
19
- 戻り値としてfloat型を返す必要があります。
20
-
21
- Params:
22
- Femtet: Femtet をマクロで操作するためのインスタンスです。詳細な情報については、「Femtet マクロヘルプ」をご覧ください。
23
-
24
- Returns:
25
- float: 自己インダクタンスです。
26
- """
27
- Gogh = Femtet.Gogh
28
-
29
- coil_name = Gogh.Gauss.GetCoilList()[0]
30
- return Gogh.Gauss.GetL(coil_name, coil_name) # 単位: F
31
-
32
-
33
- if __name__ == '__main__':
34
-
35
- # 数値最適化問題の初期化 (最適化手法を決定します)
36
- opt = OptunaOptimizer(
37
- sampler_class=BoTorchSampler,
38
- sampler_kwargs=dict(
39
- n_startup_trials=5,
40
- )
41
- )
42
-
43
- # FEMOpt オブジェクトの初期化 (最適化問題とFemtetとの接続を行います)。
44
- femopt = FEMOpt(opt=opt)
45
-
46
- # 設計変数を最適化問題に追加 (femprj ファイルに登録されている変数を指定してください)。
47
- femopt.add_parameter("helical_pitch", 6, lower_bound=4.2, upper_bound=8)
48
- femopt.add_parameter("coil_radius", 10, lower_bound=1, upper_bound=10)
49
- femopt.add_parameter("n_turns", 5, lower_bound=1, upper_bound=5)
50
-
51
- # 目的関数を最適化問題に追加
52
- # 目標の自己インダクタンスは 0.1 μF です。
53
- femopt.add_objective(inductance, name='自己インダクタンス (F)', direction=1e-7)
54
-
55
- # 最適化を実行
56
- femopt.set_random_seed(42)
57
- femopt.optimize(n_trials=20)
@@ -1,52 +0,0 @@
1
- """パラメトリック解析出力設定を目的関数とする最適化
2
-
3
- Femtet のパラメトリック解析の結果出力設定機能で出力される値を
4
- 最適化の目的関数として使用する方法をデモします。
5
- この機能により、目的関数をコーディングすることなく
6
- 最適化を実施できます。
7
-
8
-
9
- 注意:
10
-
11
- この機能を使う際は、以下のことに注意してください。
12
-
13
- - パラメトリック解析のスイープテーブルが削除されます。
14
- - 複素数やベクトルを出力する出力設定は、第一の値のみが
15
- 目的関数として使用されます。(複素数の場合は実数、
16
- ベクトル値の場合は X 成分など)
17
-
18
-
19
- 対応するプロジェクト: gau_ex12_parametric.femprj
20
- """
21
-
22
- from pyfemtet.opt import FEMOpt, FemtetInterface
23
-
24
-
25
- if __name__ == '__main__':
26
-
27
- # Femtet の設定を参照するため、Femtet と接続を
28
- # 行うためのオブジェクトを初期化します。
29
- fem = FemtetInterface()
30
-
31
- # パラメトリック解析の結果出力設定を目的関数にします。
32
- # number は Femtet パラメトリック解析ダイアログの
33
- # 結果出力設定タブのテーブルの番号で、direction は
34
- # その目的関数の目標です(FEMOpt.add_objective と同様)。
35
-
36
- # 相互インダクタンス
37
- fem.use_parametric_output_as_objective(number=1, direction=1.5e-7)
38
-
39
- # コイル中央の磁界の強さ
40
- fem.use_parametric_output_as_objective(number=2, direction='minimize')
41
-
42
- # 最適化用オブジェクトを初期化します。
43
- # さきほど初期化した fem を渡します。
44
- femopt = FEMOpt(fem=fem)
45
-
46
- # パラメータを設定します。
47
- femopt.add_parameter('in_radius', 10, 5, 10)
48
- femopt.add_parameter('out_radius', 20, 20, 25)
49
-
50
- # 最適化を実行します。
51
- femopt.set_random_seed(42) # 乱数シードの固定
52
- femopt.optimize(n_trials=20)
@@ -1,138 +0,0 @@
1
- """単目的最適化: 円形パッチアンテナの共振周波数
2
-
3
- Femtet の電磁波解析ソルバを利用して、円形パッチアンテナの
4
- 電磁波調和解析を行い、共振特性を目標の値にする設計を行います。
5
-
6
- 対応プロジェクト: her_ex40_parametric_jp.femprj
7
- """
8
- from time import sleep
9
-
10
- import numpy as np
11
- from scipy.signal import find_peaks
12
- from tqdm import tqdm
13
- from optuna.integration.botorch import BoTorchSampler
14
-
15
- from pyfemtet.core import SolveError
16
- from pyfemtet.opt import OptunaOptimizer, FEMOpt
17
-
18
-
19
- class SParameterCalculator:
20
- """Sパラメータ計算用クラス"""
21
-
22
- def __init__(self):
23
- self.freq = []
24
- self.S = []
25
- self.interpolated_function = None
26
- self.resonance_frequency = None
27
- self.minimum_S = None
28
-
29
- def _get_freq_and_S_parameter(self, Femtet):
30
- """周波数とSパラメータの関係を取得します。"""
31
-
32
- Gogh = Femtet.Gogh
33
-
34
- freq_list = []
35
- dB_S_list = []
36
- for mode in tqdm(range(Gogh.Hertz.nMode), '周波数と S(1, 1) の関係を取得'):
37
- # 周波数モード設定
38
- Gogh.Hertz.Mode = mode
39
- sleep(0.01)
40
-
41
- # 周波数を取得
42
- freq = Gogh.Hertz.GetFreq().Real
43
-
44
- # S(1, 1) を取得
45
- comp_S = Gogh.Hertz.GetSMatrix(0, 0)
46
- norm = np.linalg.norm((comp_S.Real, comp_S.Imag))
47
- dB_S = 20 * np.log10(norm)
48
-
49
- # 結果を保存
50
- freq_list.append(freq)
51
- dB_S_list.append(dB_S)
52
-
53
- self.freq = freq_list
54
- self.S = dB_S_list
55
-
56
- def _calc_resonance_frequency(self):
57
- """Sパラメータの第一ピークを与える周波数を取得します。"""
58
- peaks, _ = find_peaks(-np.array(self.S), height=None, threshold=None, distance=None, prominence=0.5, width=None, wlen=None, rel_height=0.5, plateau_size=None)
59
- if len(peaks) == 0:
60
- raise SolveError('S(1,1) のピークを取得できませんでした。')
61
- self.resonance_frequency = self.freq[peaks[0]]
62
- self.minimum_S = self.S[peaks[0]]
63
-
64
- def get_resonance_frequency(self, Femtet):
65
- """パッチアンテナの共振周波数を計算します。
66
-
67
- Note:
68
- 目的関数または制約関数は、
69
- 第一引数としてFemtetを受け取り、
70
- 戻り値としてfloat型を返す必要があります。
71
-
72
- Params:
73
- Femtet: Femtet をマクロで操作するためのインスタンスです。詳細な情報については、「Femtet マクロヘルプ」をご覧ください。
74
-
75
- Returns:
76
- float: パッチアンテナの共振周波数。
77
- """
78
- self._get_freq_and_S_parameter(Femtet)
79
- self._calc_resonance_frequency()
80
- return self.resonance_frequency # 単位: Hz
81
-
82
-
83
- def antenna_is_smaller_than_substrate(Femtet, opt):
84
- """アンテナの大きさと基板の大きさの関係を計算します。
85
-
86
- この関数は、変数の更新によってモデル形状が破綻しないように
87
- 変数の組み合わせを拘束するために使われます。
88
-
89
- Params:
90
- Femtet: Femtet をマクロで操作するためのインスタンスです。詳細な情報については、「Femtet マクロヘルプ」をご覧ください。
91
-
92
- Returns:
93
- float: 基板エッジとアンテナエッジの間隙。1 mm 以上が必要です。
94
- """
95
- params = opt.get_parameter()
96
- r = params['antenna_radius']
97
- w = params['substrate_w']
98
- return w / 2 - r # 単位: mm
99
-
100
-
101
- def port_is_inside_antenna(Femtet, opt):
102
- """給電ポートの位置とアンテナの大きさの関係を計算します。"""
103
- params = opt.get_parameter()
104
- r = params['antenna_radius']
105
- x = params['port_x']
106
- return r - x # 単位: mm。1 mm 以上が必要です。
107
-
108
-
109
- if __name__ == '__main__':
110
- # 周波数特性を計算するためのオブジェクトを初期化
111
- s = SParameterCalculator()
112
-
113
- # 数値最適化問題の初期化 (最適化手法を決定します)
114
- opt = OptunaOptimizer(
115
- sampler_class=BoTorchSampler,
116
- sampler_kwargs=dict(
117
- n_startup_trials=10,
118
- )
119
- )
120
-
121
- # FEMOpt オブジェクトの初期化 (最適化問題とFemtetとの接続を行います)
122
- femopt = FEMOpt(opt=opt)
123
-
124
- # 設計変数を最適化問題に追加 (femprj ファイルに登録されている変数を指定してください)
125
- femopt.add_parameter('antenna_radius', 10, 5, 20)
126
- femopt.add_parameter('substrate_w', 50, 40, 60)
127
- femopt.add_parameter('port_x', 5, 1, 20)
128
-
129
- # 拘束関数を最適化問題に追加
130
- femopt.add_constraint(antenna_is_smaller_than_substrate, 'アンテナと基板エッジの間隙', lower_bound=1, args=(opt,))
131
- femopt.add_constraint(port_is_inside_antenna, 'アンテナエッジと給電ポートの間隙', lower_bound=1, args=(opt,))
132
-
133
- # 目的関数を最適化問題に追加
134
- # 共振周波数の目標は 3.0 GHz です。
135
- femopt.add_objective(s.get_resonance_frequency, '第一共振周波数(Hz)', direction=3.0 * 1e9)
136
-
137
- femopt.set_random_seed(42)
138
- femopt.optimize(n_trials=15)