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.
- pyfemtet/__init__.py +6 -1
- pyfemtet/_i18n/1. make_pot_and_update_po.bat +8 -0
- pyfemtet/_i18n/2. build_mo.bat +5 -0
- pyfemtet/_i18n/__init__.py +4 -0
- pyfemtet/_i18n/babel.cfg +2 -0
- pyfemtet/_i18n/i18n.py +37 -0
- pyfemtet/_i18n/locales/ja/LC_MESSAGES/messages.mo +0 -0
- pyfemtet/_i18n/locales/ja/LC_MESSAGES/messages.po +1020 -0
- pyfemtet/_i18n/locales/messages.pot +987 -0
- pyfemtet/{_message → _i18n}/messages.py +128 -41
- pyfemtet/_util/closing.py +19 -0
- pyfemtet/_util/dask_util.py +89 -7
- pyfemtet/_util/df_util.py +29 -0
- pyfemtet/_util/excel_macro_util.py +8 -3
- pyfemtet/_util/excel_parse_util.py +43 -23
- pyfemtet/_util/femtet_access_inspection.py +120 -0
- pyfemtet/{_femtet_config_util/autosave.py → _util/femtet_autosave.py} +7 -0
- pyfemtet/_util/femtet_exit.py +105 -0
- pyfemtet/_util/femtet_version.py +20 -0
- pyfemtet/_util/helper.py +94 -0
- pyfemtet/_util/process_util.py +107 -0
- pyfemtet/_util/str_enum.py +44 -0
- pyfemtet/core.py +15 -47
- pyfemtet/dispatch_extensions/__init__.py +8 -11
- pyfemtet/dispatch_extensions/_impl.py +42 -198
- pyfemtet/logger/__init__.py +8 -1
- pyfemtet/logger/_impl.py +5 -6
- pyfemtet/opt/__init__.py +3 -17
- pyfemtet/opt/exceptions.py +45 -0
- pyfemtet/opt/femopt.py +608 -0
- pyfemtet/opt/history/__init__.py +11 -0
- pyfemtet/opt/history/_history.py +1404 -0
- pyfemtet/opt/history/_hypervolume.py +169 -0
- pyfemtet/opt/history/_optimality.py +79 -0
- pyfemtet/opt/interface/__init__.py +17 -24
- pyfemtet/opt/interface/_base_interface.py +222 -0
- pyfemtet/opt/interface/_excel_interface/__init__.py +3 -0
- pyfemtet/opt/interface/_excel_interface/debug-excel-interface.xlsm +0 -0
- pyfemtet/opt/interface/_excel_interface/excel_interface.py +999 -0
- pyfemtet/opt/interface/_femtet_interface/__init__.py +3 -0
- pyfemtet/opt/interface/{_femtet_parametric.py → _femtet_interface/_femtet_parametric.py} +20 -12
- pyfemtet/opt/interface/{_femtet.py → _femtet_interface/femtet_interface.py} +505 -349
- pyfemtet/opt/interface/_femtet_with_nx_interface/__init__.py +5 -0
- pyfemtet/opt/interface/_femtet_with_nx_interface/femtet_with_nx_interface.py +230 -0
- pyfemtet/opt/interface/_femtet_with_nx_interface/model1.prt +0 -0
- pyfemtet/opt/interface/_femtet_with_nx_interface/model1.x_t +98 -0
- pyfemtet/opt/interface/{_femtet_with_nx → _femtet_with_nx_interface}/update_model.py +1 -3
- pyfemtet/opt/interface/_femtet_with_solidworks/__init__.py +5 -0
- pyfemtet/opt/interface/_femtet_with_solidworks/femtet_with_solidworks_interface.py +122 -0
- pyfemtet/opt/interface/_solidworks_interface/__init__.py +5 -0
- pyfemtet/opt/interface/_solidworks_interface/solidworks_interface.py +206 -0
- pyfemtet/opt/interface/_surrogate_model_interface/__init__.py +8 -0
- pyfemtet/opt/interface/_surrogate_model_interface/base_surrogate_interface.py +150 -0
- pyfemtet/opt/interface/_surrogate_model_interface/botorch_interface.py +298 -0
- pyfemtet/opt/interface/_surrogate_model_interface/debug-pof-botorch.reccsv +18 -0
- pyfemtet/opt/interface/_with_excel_settings/__init__.py +61 -0
- pyfemtet/opt/interface/_with_excel_settings/with_excel_settings.py +134 -0
- pyfemtet/opt/meta_script/YAML_Generator.xlsm +0 -0
- pyfemtet/opt/meta_script/__main__.py +58 -36
- pyfemtet/opt/optimizer/__init__.py +7 -9
- pyfemtet/opt/optimizer/_base_optimizer.py +885 -0
- pyfemtet/opt/optimizer/optuna_optimizer/__init__.py +9 -0
- pyfemtet/opt/optimizer/optuna_optimizer/_optuna_attribute.py +73 -0
- pyfemtet/opt/optimizer/optuna_optimizer/_optuna_optimizer.py +678 -0
- pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/__init__.py +7 -0
- pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/debug-pof-botorch.reccsv +18 -0
- pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/enable_nonlinear_constraint.py +244 -0
- pyfemtet/opt/optimizer/optuna_optimizer/_pof_botorch/pof_botorch_sampler.py +1249 -0
- pyfemtet/opt/optimizer/optuna_optimizer/wat_ex14_parametric_jp.femprj +0 -0
- pyfemtet/opt/optimizer/scipy_optimizer/__init__.py +1 -0
- pyfemtet/opt/optimizer/scipy_optimizer/_scipy_optimizer.py +364 -0
- pyfemtet/opt/prediction/__init__.py +7 -0
- pyfemtet/opt/prediction/_botorch_utils.py +133 -0
- pyfemtet/opt/prediction/_gpytorch_modules_extension.py +142 -0
- pyfemtet/opt/prediction/_helper.py +155 -0
- pyfemtet/opt/prediction/_model.py +118 -0
- pyfemtet/opt/problem/problem.py +304 -0
- pyfemtet/opt/problem/variable_manager/__init__.py +20 -0
- pyfemtet/opt/problem/variable_manager/_string_as_expression.py +115 -0
- pyfemtet/opt/problem/variable_manager/_variable_manager.py +295 -0
- pyfemtet/opt/visualization/history_viewer/__main__.py +5 -0
- pyfemtet/opt/visualization/{_base.py → history_viewer/_base_application.py} +18 -13
- pyfemtet/opt/visualization/history_viewer/_common_pages.py +150 -0
- pyfemtet/opt/visualization/{_complex_components → history_viewer/_complex_components}/alert_region.py +10 -5
- pyfemtet/opt/visualization/{_complex_components → history_viewer/_complex_components}/control_femtet.py +16 -13
- pyfemtet/opt/visualization/{_complex_components → history_viewer/_complex_components}/main_graph.py +117 -47
- pyfemtet/opt/visualization/{_complex_components → history_viewer/_complex_components}/pm_graph.py +159 -138
- pyfemtet/opt/visualization/history_viewer/_process_monitor/_application.py +173 -0
- pyfemtet/opt/visualization/history_viewer/_process_monitor/_pages.py +291 -0
- pyfemtet/opt/visualization/{_wrapped_components → history_viewer/_wrapped_components}/dbc.py +1 -1
- pyfemtet/opt/visualization/{_wrapped_components → history_viewer/_wrapped_components}/dcc.py +1 -1
- pyfemtet/opt/visualization/{_wrapped_components → history_viewer/_wrapped_components}/html.py +1 -1
- pyfemtet/opt/visualization/history_viewer/result_viewer/__main__.py +5 -0
- pyfemtet/opt/visualization/{result_viewer/application.py → history_viewer/result_viewer/_application.py} +6 -6
- pyfemtet/opt/visualization/{result_viewer/pages.py → history_viewer/result_viewer/_pages.py} +106 -82
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08.csv +18 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08.db +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8.jpg +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8.log +45 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8.pdt +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_1.jpg +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_1.pdt +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_10.jpg +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_10.pdt +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_11.jpg +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_11.pdt +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_12.jpg +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_12.pdt +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_13.jpg +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_13.pdt +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_14.jpg +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_14.pdt +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_15.jpg +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_15.pdt +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_16.jpg +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_16.pdt +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_17.jpg +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_17.pdt +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_18.jpg +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_18.pdt +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_19.jpg +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_19.pdt +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_2.jpg +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_2.pdt +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_20.jpg +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_20.pdt +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_3.jpg +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_3.pdt +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.bgr +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.bnd +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.btr +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.jpg +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.mtl +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.pdt +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_4.prm +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_5.jpg +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_5.pdt +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_6.jpg +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_6.pdt +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_7.jpg +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_7.pdt +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_8.jpg +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_8.pdt +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_9.jpg +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.Results/ex8_trial_9.pdt +0 -0
- pyfemtet/opt/visualization/history_viewer/result_viewer/tutorial_files/tutorial_gau_ex08_parametric.femprj +0 -0
- pyfemtet/opt/visualization/plotter/main_figure_creator.py +536 -0
- pyfemtet/opt/visualization/plotter/pm_graph_creator.py +359 -0
- pyfemtet/opt/worker_status.py +120 -0
- {pyfemtet-0.9.5.dist-info → pyfemtet-1.0.0b0.dist-info}/METADATA +23 -24
- pyfemtet-1.0.0b0.dist-info/RECORD +172 -0
- pyfemtet-1.0.0b0.dist-info/entry_points.txt +3 -0
- pyfemtet/_femtet_config_util/exit.py +0 -59
- pyfemtet/_message/1. make_pot.bat +0 -11
- pyfemtet/_message/2. make_mo.bat +0 -6
- pyfemtet/_message/__init__.py +0 -5
- pyfemtet/_message/babel.cfg +0 -2
- pyfemtet/_message/locales/ja/LC_MESSAGES/messages.mo +0 -0
- pyfemtet/_message/locales/ja/LC_MESSAGES/messages.po +0 -570
- pyfemtet/_message/locales/messages.pot +0 -551
- pyfemtet/_warning.py +0 -87
- pyfemtet/brep/_impl.py +0 -18
- pyfemtet/opt/_femopt.py +0 -1007
- pyfemtet/opt/_femopt_core.py +0 -1169
- pyfemtet/opt/_test_utils/control_femtet.py +0 -39
- pyfemtet/opt/_test_utils/hyper_sphere.py +0 -24
- pyfemtet/opt/_test_utils/record_history.py +0 -130
- pyfemtet/opt/advanced_samples/excel_ui/(ref) original_project.femprj +0 -0
- pyfemtet/opt/advanced_samples/excel_ui/femtet-macro.xlsm +0 -0
- pyfemtet/opt/advanced_samples/excel_ui/pyfemtet-core.py +0 -291
- pyfemtet/opt/advanced_samples/excel_ui/test-pyfemtet-core.cmd +0 -22
- pyfemtet/opt/advanced_samples/restart/gal_ex13_parametric.femprj +0 -0
- pyfemtet/opt/advanced_samples/restart/gal_ex13_parametric_restart.py +0 -99
- pyfemtet/opt/advanced_samples/restart/gal_ex13_parametric_restart_jp.py +0 -102
- pyfemtet/opt/advanced_samples/surrogate_model/gal_ex13_create_training_data.py +0 -60
- pyfemtet/opt/advanced_samples/surrogate_model/gal_ex13_create_training_data_jp.py +0 -57
- pyfemtet/opt/advanced_samples/surrogate_model/gal_ex13_optimize_with_surrogate.py +0 -100
- pyfemtet/opt/advanced_samples/surrogate_model/gal_ex13_optimize_with_surrogate_jp.py +0 -90
- pyfemtet/opt/advanced_samples/surrogate_model/gal_ex13_parametric.femprj +0 -0
- pyfemtet/opt/interface/_base.py +0 -101
- pyfemtet/opt/interface/_excel_interface.py +0 -984
- pyfemtet/opt/interface/_femtet_excel.py +0 -141
- pyfemtet/opt/interface/_femtet_with_nx/__init__.py +0 -3
- pyfemtet/opt/interface/_femtet_with_nx/_interface.py +0 -178
- pyfemtet/opt/interface/_femtet_with_sldworks.py +0 -298
- pyfemtet/opt/interface/_surrogate/__init__.py +0 -5
- pyfemtet/opt/interface/_surrogate/_base.py +0 -129
- pyfemtet/opt/interface/_surrogate/_chaospy.py +0 -71
- pyfemtet/opt/interface/_surrogate/_singletaskgp.py +0 -71
- pyfemtet/opt/interface/_surrogate_excel.py +0 -102
- pyfemtet/opt/optimizer/_base.py +0 -376
- pyfemtet/opt/optimizer/_optuna/_botorch_patch/enable_nonlinear_constraint.py +0 -220
- pyfemtet/opt/optimizer/_optuna/_optuna.py +0 -434
- pyfemtet/opt/optimizer/_optuna/_pof_botorch.py +0 -1914
- pyfemtet/opt/optimizer/_scipy.py +0 -159
- pyfemtet/opt/optimizer/_scipy_scalar.py +0 -127
- pyfemtet/opt/optimizer/parameter.py +0 -113
- pyfemtet/opt/prediction/_base.py +0 -61
- pyfemtet/opt/prediction/single_task_gp.py +0 -119
- pyfemtet/opt/samples/femprj_sample/ParametricIF.femprj +0 -0
- pyfemtet/opt/samples/femprj_sample/ParametricIF.py +0 -29
- pyfemtet/opt/samples/femprj_sample/ParametricIF_test_result.reccsv +0 -13
- pyfemtet/opt/samples/femprj_sample/cad_ex01_NX.femprj +0 -0
- pyfemtet/opt/samples/femprj_sample/cad_ex01_NX.prt +0 -0
- pyfemtet/opt/samples/femprj_sample/cad_ex01_NX.py +0 -135
- pyfemtet/opt/samples/femprj_sample/cad_ex01_NX_test_result.reccsv +0 -23
- pyfemtet/opt/samples/femprj_sample/cad_ex01_SW.SLDPRT +0 -0
- pyfemtet/opt/samples/femprj_sample/cad_ex01_SW.femprj +0 -0
- pyfemtet/opt/samples/femprj_sample/cad_ex01_SW.py +0 -131
- pyfemtet/opt/samples/femprj_sample/cad_ex01_SW_test_result.reccsv +0 -23
- pyfemtet/opt/samples/femprj_sample/constrained_pipe.femprj +0 -0
- pyfemtet/opt/samples/femprj_sample/constrained_pipe.py +0 -96
- pyfemtet/opt/samples/femprj_sample/constrained_pipe_test_result.reccsv +0 -13
- pyfemtet/opt/samples/femprj_sample/gal_ex58_parametric.femprj +0 -0
- pyfemtet/opt/samples/femprj_sample/gal_ex58_parametric.py +0 -74
- pyfemtet/opt/samples/femprj_sample/gal_ex58_parametric_test_result.reccsv +0 -13
- pyfemtet/opt/samples/femprj_sample/gau_ex08_parametric.femprj +0 -0
- pyfemtet/opt/samples/femprj_sample/gau_ex08_parametric.py +0 -58
- pyfemtet/opt/samples/femprj_sample/gau_ex08_parametric_test_result.reccsv +0 -23
- pyfemtet/opt/samples/femprj_sample/gau_ex12_parametric.femprj +0 -0
- pyfemtet/opt/samples/femprj_sample/gau_ex12_parametric.py +0 -52
- pyfemtet/opt/samples/femprj_sample/her_ex40_parametric.femprj +0 -0
- pyfemtet/opt/samples/femprj_sample/her_ex40_parametric.py +0 -138
- pyfemtet/opt/samples/femprj_sample/her_ex40_parametric_test_result.reccsv +0 -18
- pyfemtet/opt/samples/femprj_sample/paswat_ex1_parametric.femprj +0 -0
- pyfemtet/opt/samples/femprj_sample/paswat_ex1_parametric.py +0 -60
- pyfemtet/opt/samples/femprj_sample/paswat_ex1_parametric_parallel.py +0 -61
- pyfemtet/opt/samples/femprj_sample/paswat_ex1_parametric_test_result.reccsv +0 -18
- pyfemtet/opt/samples/femprj_sample/wat_ex14_parametric.femprj +0 -0
- pyfemtet/opt/samples/femprj_sample/wat_ex14_parametric.py +0 -58
- pyfemtet/opt/samples/femprj_sample/wat_ex14_parametric_parallel.py +0 -58
- pyfemtet/opt/samples/femprj_sample/wat_ex14_parametric_test_result.reccsv +0 -18
- pyfemtet/opt/samples/femprj_sample_jp/ParametricIF_jp.femprj +0 -0
- pyfemtet/opt/samples/femprj_sample_jp/ParametricIF_jp.py +0 -29
- pyfemtet/opt/samples/femprj_sample_jp/cad_ex01_NX_jp.femprj +0 -0
- pyfemtet/opt/samples/femprj_sample_jp/cad_ex01_NX_jp.py +0 -129
- pyfemtet/opt/samples/femprj_sample_jp/cad_ex01_SW_jp.femprj +0 -0
- pyfemtet/opt/samples/femprj_sample_jp/cad_ex01_SW_jp.py +0 -125
- pyfemtet/opt/samples/femprj_sample_jp/constrained_pipe_jp.py +0 -93
- pyfemtet/opt/samples/femprj_sample_jp/gal_ex58_parametric_jp.femprj +0 -0
- pyfemtet/opt/samples/femprj_sample_jp/gal_ex58_parametric_jp.py +0 -70
- pyfemtet/opt/samples/femprj_sample_jp/gau_ex08_parametric_jp.femprj +0 -0
- pyfemtet/opt/samples/femprj_sample_jp/gau_ex08_parametric_jp.py +0 -57
- pyfemtet/opt/samples/femprj_sample_jp/gau_ex12_parametric_jp.py +0 -52
- pyfemtet/opt/samples/femprj_sample_jp/her_ex40_parametric_jp.femprj +0 -0
- pyfemtet/opt/samples/femprj_sample_jp/her_ex40_parametric_jp.py +0 -138
- pyfemtet/opt/samples/femprj_sample_jp/paswat_ex1_parametric_jp.femprj +0 -0
- pyfemtet/opt/samples/femprj_sample_jp/paswat_ex1_parametric_jp.py +0 -58
- pyfemtet/opt/samples/femprj_sample_jp/paswat_ex1_parametric_parallel_jp.py +0 -59
- pyfemtet/opt/samples/femprj_sample_jp/wat_ex14_parametric_jp.py +0 -56
- pyfemtet/opt/samples/femprj_sample_jp/wat_ex14_parametric_parallel_jp.py +0 -56
- pyfemtet/opt/visualization/_complex_components/main_figure_creator.py +0 -332
- pyfemtet/opt/visualization/_complex_components/pm_graph_creator.py +0 -201
- pyfemtet/opt/visualization/_process_monitor/application.py +0 -226
- pyfemtet/opt/visualization/_process_monitor/pages.py +0 -406
- pyfemtet/opt/visualization/_wrapped_components/__init__.py +0 -0
- pyfemtet/opt/visualization/result_viewer/__init__.py +0 -0
- pyfemtet-0.9.5.dist-info/RECORD +0 -158
- pyfemtet-0.9.5.dist-info/entry_points.txt +0 -3
- /pyfemtet/{_femtet_config_util → opt/problem}/__init__.py +0 -0
- /pyfemtet/{brep → opt/visualization/history_viewer}/__init__.py +0 -0
- /pyfemtet/opt/{_test_utils → visualization/history_viewer/_complex_components}/__init__.py +0 -0
- /pyfemtet/opt/{optimizer/_optuna → visualization/history_viewer/_process_monitor}/__init__.py +0 -0
- /pyfemtet/opt/{optimizer/_optuna/_botorch_patch → visualization/history_viewer/_wrapped_components}/__init__.py +0 -0
- /pyfemtet/opt/visualization/{_wrapped_components → history_viewer/_wrapped_components}/str_enum.py +0 -0
- /pyfemtet/opt/visualization/{result_viewer → history_viewer/result_viewer}/.gitignore +0 -0
- /pyfemtet/opt/visualization/{_complex_components → history_viewer/result_viewer}/__init__.py +0 -0
- /pyfemtet/opt/visualization/{_process_monitor → plotter}/__init__.py +0 -0
- /pyfemtet/opt/{samples/femprj_sample_jp/wat_ex14_parametric_jp.femprj → wat_ex14_parametric_jp.femprj} +0 -0
- {pyfemtet-0.9.5.dist-info → pyfemtet-1.0.0b0.dist-info}/LICENSE +0 -0
- {pyfemtet-0.9.5.dist-info → pyfemtet-1.0.0b0.dist-info}/LICENSE_THIRD_PARTY.txt +0 -0
- {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)
|
|
Binary file
|
|
@@ -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)
|
|
Binary file
|
|
@@ -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)
|
|
Binary file
|
|
@@ -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)
|
|
Binary file
|
|
@@ -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)
|
|
Binary file
|