PyFemtet 0.4.3__tar.gz → 0.4.7__tar.gz
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.
- pyfemtet-0.4.7/PKG-INFO +98 -0
- pyfemtet-0.4.7/README.md +61 -0
- pyfemtet-0.4.7/pyfemtet/__init__.py +1 -0
- pyfemtet-0.4.7/pyfemtet/_test_util.py +95 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/_femopt.py +54 -16
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/_femopt_core.py +14 -7
- pyfemtet-0.4.7/pyfemtet/opt/femprj_sample/cad_ex01_NX_test_result.reccsv +13 -0
- pyfemtet-0.4.7/pyfemtet/opt/femprj_sample/cad_ex01_SW_test_result.reccsv +13 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample/gal_ex58_parametric.femprj +0 -0
- pyfemtet-0.4.7/pyfemtet/opt/femprj_sample/gal_ex58_parametric_test_result.reccsv +13 -0
- pyfemtet-0.4.7/pyfemtet/opt/femprj_sample/gau_ex08_parametric_test_result.reccsv +23 -0
- pyfemtet-0.4.7/pyfemtet/opt/femprj_sample/her_ex40_parametric_test_result.reccsv +18 -0
- pyfemtet-0.4.7/pyfemtet/opt/femprj_sample/paswat_ex1_parametric_test_result.reccsv +18 -0
- pyfemtet-0.4.7/pyfemtet/opt/femprj_sample/wat_ex14_parametric_test_result.reccsv +18 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample_jp/gal_ex58_parametric_jp.femprj +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/interface/_femtet.py +78 -25
- pyfemtet-0.4.7/pyfemtet/opt/interface/_femtet_parametric.py +88 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/opt/_base.py +12 -3
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/visualization/_graphs.py +6 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/visualization/_monitor.py +2 -2
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyproject.toml +6 -3
- pyfemtet-0.4.3/PKG-INFO +0 -48
- pyfemtet-0.4.3/README.md +0 -13
- pyfemtet-0.4.3/pyfemtet/__init__.py +0 -1
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/LICENSE +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/FemtetPJTSample/NX_ex01/NX_ex01.femprj +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/FemtetPJTSample/NX_ex01/NX_ex01.prt +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/FemtetPJTSample/NX_ex01/NX_ex01.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/FemtetPJTSample/Sldworks_ex01/Sldworks_ex01.SLDPRT +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/FemtetPJTSample/Sldworks_ex01/Sldworks_ex01.femprj +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/FemtetPJTSample/Sldworks_ex01/Sldworks_ex01.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/FemtetPJTSample/_her_ex40_parametric.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/FemtetPJTSample/gau_ex08_parametric.femprj +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/FemtetPJTSample/gau_ex08_parametric.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/FemtetPJTSample/her_ex40_parametric.femprj +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/FemtetPJTSample/her_ex40_parametric.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/FemtetPJTSample/wat_ex14_parallel_parametric.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/FemtetPJTSample/wat_ex14_parametric.femprj +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/FemtetPJTSample/wat_ex14_parametric.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/core.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/dispatch_extensions.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/logger.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/__init__.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample/cad_ex01_NX.femprj +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample/cad_ex01_NX.prt +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample/cad_ex01_NX.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample/cad_ex01_SW.SLDPRT +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample/cad_ex01_SW.femprj +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample/cad_ex01_SW.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample/gal_ex58_parametric.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample/gau_ex08_parametric.femprj +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample/gau_ex08_parametric.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample/her_ex40_parametric.femprj +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample/her_ex40_parametric.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample/paswat_ex1_parametric.femprj +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample/paswat_ex1_parametric.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample/paswat_ex1_parametric_parallel.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample/wat_ex14_parametric.femprj +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample/wat_ex14_parametric.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample_jp/cad_ex01_NX_jp.femprj +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample_jp/cad_ex01_NX_jp.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample_jp/cad_ex01_SW_jp.femprj +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample_jp/cad_ex01_SW_jp.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample_jp/gal_ex58_parametric_jp.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample_jp/gau_ex08_parametric_jp.femprj +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample_jp/gau_ex08_parametric_jp.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample_jp/her_ex40_parametric_jp.femprj +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample_jp/her_ex40_parametric_jp.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample_jp/paswat_ex1_parametric_jp.femprj +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample_jp/paswat_ex1_parametric_jp.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample_jp/paswat_ex1_parametric_parallel_jp.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample_jp/wat_ex14_parametric_jp.femprj +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/femprj_sample_jp/wat_ex14_parametric_jp.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/interface/__init__.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/interface/_base.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/interface/_femtet_with_nx/__init__.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/interface/_femtet_with_nx/_interface.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/interface/_femtet_with_nx/update_model.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/interface/_femtet_with_sldworks.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/opt/__init__.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/opt/_optuna.py +0 -0
- {pyfemtet-0.4.3 → pyfemtet-0.4.7}/pyfemtet/opt/visualization/__init__.py +0 -0
pyfemtet-0.4.7/PKG-INFO
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: pyfemtet
|
|
3
|
+
Version: 0.4.7
|
|
4
|
+
Summary: Design parameter optimization using Femtet.
|
|
5
|
+
Home-page: https://github.com/pyfemtet/pyfemtet
|
|
6
|
+
License: BSD-3-Clause
|
|
7
|
+
Author: kazuma.naito
|
|
8
|
+
Author-email: kazuma.naito@murata.com
|
|
9
|
+
Requires-Python: >=3.9.3,<3.13
|
|
10
|
+
Classifier: License :: OSI Approved :: BSD License
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Requires-Dist: botorch (>=0.9.5) ; python_version >= "3.12" and python_version < "3.13"
|
|
16
|
+
Requires-Dist: botorch (>=0.9.5,<0.10.0) ; python_version < "3.12"
|
|
17
|
+
Requires-Dist: colorlog (>=6.8.0,<7.0.0)
|
|
18
|
+
Requires-Dist: dash (>=2.14.2,<3.0.0)
|
|
19
|
+
Requires-Dist: dash-bootstrap-components (>=1.5.0,<2.0.0)
|
|
20
|
+
Requires-Dist: dask (>=2023.12.1,<2024.0.0)
|
|
21
|
+
Requires-Dist: distributed (>=2023.12.1,<2024.0.0)
|
|
22
|
+
Requires-Dist: femtetutils (>=1.0.0,<2.0.0)
|
|
23
|
+
Requires-Dist: numpy (>=1.26.2,<2.0.0)
|
|
24
|
+
Requires-Dist: openpyxl (>=3.1.2,<4.0.0)
|
|
25
|
+
Requires-Dist: optuna (>=3.4.0,<4.0.0)
|
|
26
|
+
Requires-Dist: optuna-integration (>=3.6.0,<4.0.0)
|
|
27
|
+
Requires-Dist: pandas (>=2.1.3,<3.0.0)
|
|
28
|
+
Requires-Dist: plotly (>=5.18.0,<6.0.0)
|
|
29
|
+
Requires-Dist: psutil (>=5.9.6,<6.0.0)
|
|
30
|
+
Requires-Dist: pytest-dashboard (>=0.1.2,<0.2.0)
|
|
31
|
+
Requires-Dist: pywin32 (>=306,<307)
|
|
32
|
+
Requires-Dist: scipy (>=1.11.4,<2.0.0)
|
|
33
|
+
Requires-Dist: tqdm (>=4.66.1,<5.0.0)
|
|
34
|
+
Project-URL: Repository, https://github.com/pyfemtet/pyfemtet
|
|
35
|
+
Description-Content-Type: text/markdown
|
|
36
|
+
|
|
37
|
+
# Welcome! PyFemtet is the extension package for Femtet.
|
|
38
|
+
|
|
39
|
+
## Main Features
|
|
40
|
+
|
|
41
|
+
<img src="img/pyfemtet_conceptual_diagram.png" width="450">
|
|
42
|
+
|
|
43
|
+
> [!NOTE]
|
|
44
|
+
> For details, see the documentation of "Related Pages" section.
|
|
45
|
+
|
|
46
|
+
### Design Parameter Optimization
|
|
47
|
+
- Single or multiple objective optimization
|
|
48
|
+
- Progress monitor GUI
|
|
49
|
+
- Parallel computation with controling multiple Femtet processes
|
|
50
|
+
- Result output in easy-to-analyze csv format for Excel and other tools
|
|
51
|
+
|
|
52
|
+
### Dispatch Extensions
|
|
53
|
+
- Create `CFemtet` object with process ID specification
|
|
54
|
+
|
|
55
|
+
## Related Pages
|
|
56
|
+
|
|
57
|
+
- Femtet Website: https://www.muratasoftware.com/
|
|
58
|
+
- Documentation (English): https://pyfemtet.readthedocs.io/en/stable/
|
|
59
|
+
- ドキュメント(日本語): https://pyfemtet.readthedocs.io/jp/stable/
|
|
60
|
+
- Source code: https://github.com/pyfemtet/pyfemtet
|
|
61
|
+
- Bug reports: https://github.com/pyfemtet/pyfemtet/issues
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
## Getting Started
|
|
65
|
+
|
|
66
|
+
> [!NOTE]
|
|
67
|
+
> Currently Femtet and `pyfemtet` supports **Windows only**.
|
|
68
|
+
|
|
69
|
+
### 1. Install Femtet
|
|
70
|
+
|
|
71
|
+
- Access [Murata Software Website](https://www.muratasoftware.com/) and get **Femtet trial version** or purchase a lisence.
|
|
72
|
+
- Get installer and launch it.
|
|
73
|
+
- **Run 'EnableMacros'** from the start menu.
|
|
74
|
+
> [!NOTE]
|
|
75
|
+
> This procedure requires administrator privileges.
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
### 2. Install PyFemtet
|
|
79
|
+
|
|
80
|
+
> [!NOTE]
|
|
81
|
+
> The commands on this section are for `CMD` or `PowerShell` on with `py launcher`.
|
|
82
|
+
> For a virtual environment, replace `py` to `python`.
|
|
83
|
+
> If you do not have Python, please install it first.
|
|
84
|
+
|
|
85
|
+
- Get `pyfemtet` via following command:
|
|
86
|
+
|
|
87
|
+
```py -m pip install pyfemtet```
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
### 3. Setting `win32com` Constants
|
|
91
|
+
|
|
92
|
+
- Run following command to enable COM constants:
|
|
93
|
+
|
|
94
|
+
```py -m win32com.client.makepy FemtetMacro```
|
|
95
|
+
|
|
96
|
+
That's all! Now you can use Femtet's extention features via `pyfemtet`.
|
|
97
|
+
For more information including sample code and FEM projects, see the documentation of "Related Pages" section.
|
|
98
|
+
|
pyfemtet-0.4.7/README.md
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Welcome! PyFemtet is the extension package for Femtet.
|
|
2
|
+
|
|
3
|
+
## Main Features
|
|
4
|
+
|
|
5
|
+
<img src="img/pyfemtet_conceptual_diagram.png" width="450">
|
|
6
|
+
|
|
7
|
+
> [!NOTE]
|
|
8
|
+
> For details, see the documentation of "Related Pages" section.
|
|
9
|
+
|
|
10
|
+
### Design Parameter Optimization
|
|
11
|
+
- Single or multiple objective optimization
|
|
12
|
+
- Progress monitor GUI
|
|
13
|
+
- Parallel computation with controling multiple Femtet processes
|
|
14
|
+
- Result output in easy-to-analyze csv format for Excel and other tools
|
|
15
|
+
|
|
16
|
+
### Dispatch Extensions
|
|
17
|
+
- Create `CFemtet` object with process ID specification
|
|
18
|
+
|
|
19
|
+
## Related Pages
|
|
20
|
+
|
|
21
|
+
- Femtet Website: https://www.muratasoftware.com/
|
|
22
|
+
- Documentation (English): https://pyfemtet.readthedocs.io/en/stable/
|
|
23
|
+
- ドキュメント(日本語): https://pyfemtet.readthedocs.io/jp/stable/
|
|
24
|
+
- Source code: https://github.com/pyfemtet/pyfemtet
|
|
25
|
+
- Bug reports: https://github.com/pyfemtet/pyfemtet/issues
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
## Getting Started
|
|
29
|
+
|
|
30
|
+
> [!NOTE]
|
|
31
|
+
> Currently Femtet and `pyfemtet` supports **Windows only**.
|
|
32
|
+
|
|
33
|
+
### 1. Install Femtet
|
|
34
|
+
|
|
35
|
+
- Access [Murata Software Website](https://www.muratasoftware.com/) and get **Femtet trial version** or purchase a lisence.
|
|
36
|
+
- Get installer and launch it.
|
|
37
|
+
- **Run 'EnableMacros'** from the start menu.
|
|
38
|
+
> [!NOTE]
|
|
39
|
+
> This procedure requires administrator privileges.
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
### 2. Install PyFemtet
|
|
43
|
+
|
|
44
|
+
> [!NOTE]
|
|
45
|
+
> The commands on this section are for `CMD` or `PowerShell` on with `py launcher`.
|
|
46
|
+
> For a virtual environment, replace `py` to `python`.
|
|
47
|
+
> If you do not have Python, please install it first.
|
|
48
|
+
|
|
49
|
+
- Get `pyfemtet` via following command:
|
|
50
|
+
|
|
51
|
+
```py -m pip install pyfemtet```
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
### 3. Setting `win32com` Constants
|
|
55
|
+
|
|
56
|
+
- Run following command to enable COM constants:
|
|
57
|
+
|
|
58
|
+
```py -m win32com.client.makepy FemtetMacro```
|
|
59
|
+
|
|
60
|
+
That's all! Now you can use Femtet's extention features via `pyfemtet`.
|
|
61
|
+
For more information including sample code and FEM projects, see the documentation of "Related Pages" section.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.4.7"
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import csv
|
|
3
|
+
from shutil import copy
|
|
4
|
+
from time import sleep
|
|
5
|
+
from subprocess import run
|
|
6
|
+
from multiprocessing import Process
|
|
7
|
+
from glob import glob
|
|
8
|
+
|
|
9
|
+
import numpy as np
|
|
10
|
+
import pandas as pd
|
|
11
|
+
from tqdm import tqdm
|
|
12
|
+
from win32com.client import Dispatch
|
|
13
|
+
from femtetutils import util
|
|
14
|
+
|
|
15
|
+
from pyfemtet.opt import FEMOpt
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def _open_femprj(femprj_path):
|
|
19
|
+
Femtet = Dispatch('FemtetMacro.Femtet')
|
|
20
|
+
for _ in tqdm(range(5), 'wait for dispatch Femtet'):
|
|
21
|
+
sleep(1)
|
|
22
|
+
Femtet.LoadProject(femprj_path, True)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def launch_femtet(femprj_path):
|
|
26
|
+
# launch Femtet externally
|
|
27
|
+
print('Launching Femtet...')
|
|
28
|
+
util.execute_femtet()
|
|
29
|
+
pid = util.get_last_executed_femtet_process_id()
|
|
30
|
+
for _ in tqdm(range(8), 'Wait for launch Femtet.'):
|
|
31
|
+
sleep(1)
|
|
32
|
+
|
|
33
|
+
# open femprj in a different process
|
|
34
|
+
# to release Femtet for sample program
|
|
35
|
+
print('Opening femprj...')
|
|
36
|
+
p = Process(
|
|
37
|
+
target=_open_femprj,
|
|
38
|
+
args=(femprj_path,),
|
|
39
|
+
)
|
|
40
|
+
p.start()
|
|
41
|
+
p.join()
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def taskkill_femtet():
|
|
45
|
+
for _ in tqdm(range(3), 'wait before taskkill Femtet'):
|
|
46
|
+
sleep(1)
|
|
47
|
+
run(['taskkill', '/f', '/im', 'Femtet.exe'])
|
|
48
|
+
for _ in tqdm(range(3), 'wait after taskkill Femtet'):
|
|
49
|
+
sleep(1)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def find_latest_csv(dir_path=None):
|
|
53
|
+
if dir_path is None: dir_path = '.'
|
|
54
|
+
target = os.path.join(dir_path, '*.csv')
|
|
55
|
+
files = [(f, os.path.getmtime(f)) for f in glob(target)]
|
|
56
|
+
out = sorted(files, key=lambda files: files[1])[-1]
|
|
57
|
+
return os.path.abspath(out[0])
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def py_to_reccsv(py_path, suffix=''):
|
|
61
|
+
dst_csv_path = py_path + suffix
|
|
62
|
+
dst_csv_path = dst_csv_path.replace(f'.py{suffix}', f'{suffix}.reccsv')
|
|
63
|
+
return dst_csv_path
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def record_result(src: FEMOpt or str, py_path, suffix=''):
|
|
67
|
+
"""Record the result csv for `is_equal_result`."""
|
|
68
|
+
|
|
69
|
+
if isinstance(src, FEMOpt): # get df directory
|
|
70
|
+
src_csv_path = src.history_path
|
|
71
|
+
else:
|
|
72
|
+
src_csv_path = os.path.abspath(src)
|
|
73
|
+
|
|
74
|
+
dst_csv_path = py_to_reccsv(py_path, suffix)
|
|
75
|
+
copy(src_csv_path, dst_csv_path)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def _get_obj_from_csv(csv_path):
|
|
79
|
+
df = pd.read_csv(csv_path, encoding='cp932', header=2)
|
|
80
|
+
columns = df.columns
|
|
81
|
+
with open(csv_path, mode='r', encoding='cp932', newline='\n') as f:
|
|
82
|
+
reader = csv.reader(f, delimiter=',')
|
|
83
|
+
meta = reader.__next__()
|
|
84
|
+
obj_indices = np.where(np.array(meta) == 'obj')[0]
|
|
85
|
+
out = df.iloc[:, obj_indices]
|
|
86
|
+
return out, columns
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def is_equal_result(csv1, csv2):
|
|
90
|
+
"""Check the equality of two result csv files."""
|
|
91
|
+
df1, columns1 = _get_obj_from_csv(csv1)
|
|
92
|
+
df2, columns2 = _get_obj_from_csv(csv2)
|
|
93
|
+
assert len(columns1) == len(columns2), '結果 csv の column 数が異なります。'
|
|
94
|
+
assert len(df1) == len(df2), '結果 csv の row 数が異なります。'
|
|
95
|
+
assert (np.abs(df1.values - df2.values) / np.abs(df2.values)).max() <= 0.01, '前回の結果と 1% を超える相違があります。'
|
|
@@ -81,6 +81,7 @@ class FEMOpt:
|
|
|
81
81
|
self.monitor_process_future = None
|
|
82
82
|
self.monitor_server_kwargs = dict()
|
|
83
83
|
self.monitor_process_worker_name = None
|
|
84
|
+
self._is_error_exit = False
|
|
84
85
|
|
|
85
86
|
# multiprocess 時に pickle できないオブジェクト参照の削除
|
|
86
87
|
def __getstate__(self):
|
|
@@ -328,12 +329,27 @@ class FEMOpt:
|
|
|
328
329
|
subprocess_indices = list(range(n_parallel))
|
|
329
330
|
worker_addresses = list(self.client.nthreads().keys())
|
|
330
331
|
|
|
332
|
+
# worker が足りない場合はエラー
|
|
333
|
+
if n_parallel > len(worker_addresses):
|
|
334
|
+
raise RuntimeError(f'n_parallel({n_parallel}) > n_workers({len(worker_addresses)}). Worker 数が不足しています。')
|
|
335
|
+
|
|
336
|
+
# worker が多い場合は閉じる
|
|
337
|
+
if n_parallel < len(worker_addresses):
|
|
338
|
+
used_worker_addresses = worker_addresses[:n_parallel] # 前から順番に選ぶ:CPU の早い / メモリの多い順に並べることが望ましい
|
|
339
|
+
unused_worker_addresses = worker_addresses[n_parallel:]
|
|
340
|
+
self.client.retire_workers(unused_worker_addresses, close_workers=True)
|
|
341
|
+
worker_addresses = used_worker_addresses
|
|
342
|
+
|
|
331
343
|
# monitor worker の設定
|
|
332
344
|
logger.info('Launching monitor server. This may take a few seconds.')
|
|
333
|
-
self.monitor_process_worker_name = datetime.datetime.now().strftime("Monitor
|
|
345
|
+
self.monitor_process_worker_name = datetime.datetime.now().strftime("Monitor%Y%m%d%H%M%S")
|
|
334
346
|
current_n_workers = len(self.client.nthreads().keys())
|
|
335
|
-
from
|
|
336
|
-
|
|
347
|
+
from subprocess import Popen
|
|
348
|
+
import sys
|
|
349
|
+
Popen(
|
|
350
|
+
f'{sys.executable} -m dask worker {self.client.scheduler.address} --nthreads 1 --nworkers 1 --name {self.monitor_process_worker_name} --no-nanny',
|
|
351
|
+
shell=True
|
|
352
|
+
)
|
|
337
353
|
|
|
338
354
|
# monitor 用 worker が増えるまで待つ
|
|
339
355
|
self.client.wait_for_workers(n_workers=current_n_workers + 1)
|
|
@@ -357,12 +373,23 @@ class FEMOpt:
|
|
|
357
373
|
# Femtet 特有の処理
|
|
358
374
|
metadata = None
|
|
359
375
|
if isinstance(self.fem, FemtetInterface):
|
|
376
|
+
# 結果 csv に記載する femprj に関する情報
|
|
360
377
|
metadata = json.dumps(
|
|
361
378
|
dict(
|
|
362
379
|
femprj_path=self.fem.original_femprj_path,
|
|
363
380
|
model_name=self.fem.model_name
|
|
364
381
|
)
|
|
365
382
|
)
|
|
383
|
+
# Femtet の parametric 設定を目的関数に用いるかどうか
|
|
384
|
+
if self.fem.parametric_output_indexes_use_as_objective is not None:
|
|
385
|
+
from pyfemtet.opt.interface._femtet_parametric import add_parametric_results_as_objectives
|
|
386
|
+
indexes = list(self.fem.parametric_output_indexes_use_as_objective.keys())
|
|
387
|
+
directions = list(self.fem.parametric_output_indexes_use_as_objective.values())
|
|
388
|
+
add_parametric_results_as_objectives(
|
|
389
|
+
self,
|
|
390
|
+
indexes,
|
|
391
|
+
directions,
|
|
392
|
+
)
|
|
366
393
|
|
|
367
394
|
# actor の設定
|
|
368
395
|
self.status = OptimizationStatus(self.client)
|
|
@@ -389,7 +416,7 @@ class FEMOpt:
|
|
|
389
416
|
# kwargs
|
|
390
417
|
**self.monitor_server_kwargs,
|
|
391
418
|
# kwargs of submit
|
|
392
|
-
workers=self.monitor_process_worker_name,
|
|
419
|
+
workers=self.monitor_process_worker_name,
|
|
393
420
|
allow_other_workers=False
|
|
394
421
|
)
|
|
395
422
|
|
|
@@ -452,10 +479,13 @@ class FEMOpt:
|
|
|
452
479
|
t_save_history.start()
|
|
453
480
|
|
|
454
481
|
# 終了を待つ
|
|
455
|
-
|
|
482
|
+
local_opt_crashed = False
|
|
483
|
+
opt_crashed_list = self.client.gather(calc_futures)
|
|
456
484
|
if not self.opt.is_cluster: # 既存の fem を使っているならそれも待つ
|
|
457
485
|
if t_main is not None:
|
|
458
486
|
t_main.join()
|
|
487
|
+
local_opt_crashed = self.opt._is_error_exit
|
|
488
|
+
opt_crashed_list.append(local_opt_crashed)
|
|
459
489
|
self.status.set(OptimizationStatus.TERMINATED)
|
|
460
490
|
end = time()
|
|
461
491
|
|
|
@@ -465,6 +495,13 @@ class FEMOpt:
|
|
|
465
495
|
logger.info(f'計算が終了しました. 実行時間は {int(end - start)} 秒でした。ウィンドウを閉じると終了します.')
|
|
466
496
|
logger.info(f'結果は{self.history.path}を確認してください.')
|
|
467
497
|
|
|
498
|
+
# ひとつでも crashed ならばフラグを立てる
|
|
499
|
+
if any(opt_crashed_list):
|
|
500
|
+
self._is_error_exit = True
|
|
501
|
+
|
|
502
|
+
return self.history.local_data
|
|
503
|
+
|
|
504
|
+
|
|
468
505
|
def terminate_all(self):
|
|
469
506
|
"""Try to terminate all launched processes.
|
|
470
507
|
|
|
@@ -476,7 +513,10 @@ class FEMOpt:
|
|
|
476
513
|
sleep(1)
|
|
477
514
|
|
|
478
515
|
# terminate monitor process
|
|
479
|
-
self.
|
|
516
|
+
if self._is_error_exit:
|
|
517
|
+
self.status.set(OptimizationStatus.CRASHED)
|
|
518
|
+
else:
|
|
519
|
+
self.status.set(OptimizationStatus.TERMINATE_ALL)
|
|
480
520
|
logger.info(self.monitor_process_future.result())
|
|
481
521
|
sleep(1)
|
|
482
522
|
|
|
@@ -514,22 +554,20 @@ class FEMOpt:
|
|
|
514
554
|
else:
|
|
515
555
|
logger.warn('Monitor process worker not found.')
|
|
516
556
|
|
|
517
|
-
# close scheduler, other workers(, cluster)
|
|
518
|
-
self.client.close()
|
|
519
|
-
while self.client.scheduler is not None:
|
|
520
|
-
sleep(1)
|
|
521
|
-
logger.info('Terminate client.')
|
|
522
|
-
|
|
523
557
|
# close FEM (if specified to quit when deconstruct)
|
|
524
558
|
del self.fem
|
|
525
559
|
logger.info('Terminate FEM.')
|
|
560
|
+
sleep(1)
|
|
526
561
|
|
|
527
|
-
#
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
logger.info('Terminate all relative processes.')
|
|
562
|
+
# close scheduler, other workers(, cluster)
|
|
563
|
+
self.client.shutdown()
|
|
564
|
+
logger.info('Terminate all relative processes.')
|
|
531
565
|
sleep(3)
|
|
532
566
|
|
|
567
|
+
# if optimization was crashed, raise Exception
|
|
568
|
+
if self._is_error_exit:
|
|
569
|
+
raise RuntimeError('At least 1 of optimization processes have been crashed. See console log.')
|
|
570
|
+
|
|
533
571
|
|
|
534
572
|
def _start_monitor_server(
|
|
535
573
|
history,
|
|
@@ -7,6 +7,7 @@ import datetime
|
|
|
7
7
|
import inspect
|
|
8
8
|
import ast
|
|
9
9
|
import csv
|
|
10
|
+
import ctypes
|
|
10
11
|
|
|
11
12
|
# 3rd-party
|
|
12
13
|
import numpy as np
|
|
@@ -197,9 +198,12 @@ class Function:
|
|
|
197
198
|
|
|
198
199
|
# serializable でない COM 定数を parallelize するため
|
|
199
200
|
# COM 定数を一度 _Scapegoat 型のオブジェクトにする
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
201
|
+
# ParametricIF で使う dll 関数は _FuncPtr 型であって __globals__ を持たないが、
|
|
202
|
+
# これは絶対に constants を持たないので単に無視すればよい。
|
|
203
|
+
if not isinstance(fun, ctypes._CFuncPtr):
|
|
204
|
+
for varname in fun.__globals__:
|
|
205
|
+
if isinstance(fun.__globals__[varname], Constants):
|
|
206
|
+
fun.__globals__[varname] = _Scapegoat()
|
|
203
207
|
|
|
204
208
|
self.fun = fun
|
|
205
209
|
self.name = name
|
|
@@ -224,10 +228,11 @@ class Function:
|
|
|
224
228
|
def _restore_constants(self):
|
|
225
229
|
"""Helper function for parallelize Femtet."""
|
|
226
230
|
fun = self.fun
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
if
|
|
230
|
-
fun.__globals__[varname]
|
|
231
|
+
if not isinstance(fun, ctypes._CFuncPtr):
|
|
232
|
+
for varname in fun.__globals__:
|
|
233
|
+
if isinstance(fun.__globals__[varname], _Scapegoat):
|
|
234
|
+
if not fun.__globals__[varname]._ignore_when_restore_constants:
|
|
235
|
+
fun.__globals__[varname] = constants
|
|
231
236
|
|
|
232
237
|
|
|
233
238
|
class Objective(Function):
|
|
@@ -691,6 +696,7 @@ class OptimizationStatus:
|
|
|
691
696
|
RUNNING = 30
|
|
692
697
|
INTERRUPTING = 40
|
|
693
698
|
TERMINATED = 50
|
|
699
|
+
CRASHED = 55
|
|
694
700
|
TERMINATE_ALL = 60
|
|
695
701
|
|
|
696
702
|
def __init__(self, client, name='entire'):
|
|
@@ -712,6 +718,7 @@ class OptimizationStatus:
|
|
|
712
718
|
if status_const == cls.INTERRUPTING: return 'Interrupting'
|
|
713
719
|
if status_const == cls.TERMINATED: return 'Terminated'
|
|
714
720
|
if status_const == cls.TERMINATE_ALL: return 'Terminate_all'
|
|
721
|
+
if status_const == cls.CRASHED: return 'Crashed'
|
|
715
722
|
|
|
716
723
|
def set(self, status_const):
|
|
717
724
|
"""Set optimization status."""
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"{""femprj_path"": null, ""model_name"": ""ex58_UnLoad""}",prm,obj,obj_direction,,,,,
|
|
2
|
+
,,,,,,,,
|
|
3
|
+
trial,rot,final angle (degree),final angle (degree)_direction,non_domi,feasible,hypervolume,message,time
|
|
4
|
+
1,90.0,81.62540665669353,90,False,True,-1.0,initial,2024-06-11 12:19:15.494862
|
|
5
|
+
2,87.49080237694724,79.02571752958842,90,False,True,-1.0,,2024-06-11 12:19:19.728891
|
|
6
|
+
3,99.01428612819832,90.96145916607887,90,False,True,-1.0,,2024-06-11 12:19:23.959099
|
|
7
|
+
4,99.99999999999999,91.89033160850725,90,False,True,-1.0,,2024-06-11 12:19:29.210094
|
|
8
|
+
5,96.7613593526426,88.77003517126444,90,False,True,-1.0,,2024-06-11 12:19:33.556167
|
|
9
|
+
6,80.0,71.5309188581146,90,False,True,-1.0,,2024-06-11 12:19:37.894866
|
|
10
|
+
7,97.45535890878755,89.47178515828678,90,False,True,-1.0,,2024-06-11 12:19:42.314653
|
|
11
|
+
8,96.18747750627301,88.19831186499154,90,False,True,-1.0,,2024-06-11 12:19:46.867626
|
|
12
|
+
9,98.14241558949382,90.13165212114446,90,False,True,-1.0,,2024-06-11 12:19:51.352111
|
|
13
|
+
10,98.08002450883177,90.07026771243692,90,True,True,-1.0,,2024-06-11 12:19:55.861780
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"{""femprj_path"": null, ""model_name"": ""ex58_UnLoad""}",prm,obj,obj_direction,,,,,
|
|
2
|
+
,,,,,,,,
|
|
3
|
+
trial,rot,final angle (degree),final angle (degree)_direction,non_domi,feasible,hypervolume,message,time
|
|
4
|
+
1,90.0,81.62540665669353,90,False,True,-1.0,initial,2024-06-11 12:19:15.494862
|
|
5
|
+
2,87.49080237694724,79.02571752958842,90,False,True,-1.0,,2024-06-11 12:19:19.728891
|
|
6
|
+
3,99.01428612819832,90.96145916607887,90,False,True,-1.0,,2024-06-11 12:19:23.959099
|
|
7
|
+
4,99.99999999999999,91.89033160850725,90,False,True,-1.0,,2024-06-11 12:19:29.210094
|
|
8
|
+
5,96.7613593526426,88.77003517126444,90,False,True,-1.0,,2024-06-11 12:19:33.556167
|
|
9
|
+
6,80.0,71.5309188581146,90,False,True,-1.0,,2024-06-11 12:19:37.894866
|
|
10
|
+
7,97.45535890878755,89.47178515828678,90,False,True,-1.0,,2024-06-11 12:19:42.314653
|
|
11
|
+
8,96.18747750627301,88.19831186499154,90,False,True,-1.0,,2024-06-11 12:19:46.867626
|
|
12
|
+
9,98.14241558949382,90.13165212114446,90,False,True,-1.0,,2024-06-11 12:19:51.352111
|
|
13
|
+
10,98.08002450883177,90.07026771243692,90,True,True,-1.0,,2024-06-11 12:19:55.861780
|
|
Binary file
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"{""femprj_path"": null, ""model_name"": ""ex58_UnLoad""}",prm,obj,obj_direction,,,,,
|
|
2
|
+
,,,,,,,,
|
|
3
|
+
trial,rot,final angle (degree),final angle (degree)_direction,non_domi,feasible,hypervolume,message,time
|
|
4
|
+
1,90.0,81.62540665669353,90,False,True,-1.0,initial,2024-06-11 12:19:15.494862
|
|
5
|
+
2,87.49080237694724,79.02571752958842,90,False,True,-1.0,,2024-06-11 12:19:19.728891
|
|
6
|
+
3,99.01428612819832,90.96145916607887,90,False,True,-1.0,,2024-06-11 12:19:23.959099
|
|
7
|
+
4,99.99999999999999,91.89033160850725,90,False,True,-1.0,,2024-06-11 12:19:29.210094
|
|
8
|
+
5,96.7613593526426,88.77003517126444,90,False,True,-1.0,,2024-06-11 12:19:33.556167
|
|
9
|
+
6,80.0,71.5309188581146,90,False,True,-1.0,,2024-06-11 12:19:37.894866
|
|
10
|
+
7,97.45535890878755,89.47178515828678,90,False,True,-1.0,,2024-06-11 12:19:42.314653
|
|
11
|
+
8,96.18747750627301,88.19831186499154,90,False,True,-1.0,,2024-06-11 12:19:46.867626
|
|
12
|
+
9,98.14241558949382,90.13165212114446,90,False,True,-1.0,,2024-06-11 12:19:51.352111
|
|
13
|
+
10,98.08002450883177,90.07026771243692,90,True,True,-1.0,,2024-06-11 12:19:55.861780
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"{""femprj_path"": null, ""model_name"": ""ex8""}",prm,prm,prm,obj,obj_direction,,,,,
|
|
2
|
+
,,,,,,,,,,
|
|
3
|
+
trial,helical_pitch,coil_radius,n_turns,self-inductance (F),self-inductance (F)_direction,non_domi,feasible,hypervolume,message,time
|
|
4
|
+
1,6.0,10.0,5.0,2.2519131001598675e-07,1e-07,False,True,-1.0,initial,2024-06-11 12:02:57.767918
|
|
5
|
+
2,5.623252451619978,9.556428757689245,3.9279757672456204,1.5669600588107823e-07,1e-07,False,True,-1.0,,2024-06-11 12:03:01.879689
|
|
6
|
+
3,4.420717726239158,8.795585311974417,3.404460046972835,1.2486865567061983e-07,1e-07,False,True,-1.0,,2024-06-11 12:03:06.695218
|
|
7
|
+
4,6.890675795624973,1.185260448662222,4.879639408647977,1.1068853339253005e-08,1e-07,False,True,-1.0,,2024-06-11 12:03:09.810784
|
|
8
|
+
5,7.363282035041603,2.9110519961044856,1.7272998688284025,5.928345320407693e-09,1e-07,False,True,-1.0,,2024-06-11 12:03:12.620381
|
|
9
|
+
6,4.506659276939239,8.848248131255941,3.3689827006547204,1.223080407315596e-07,1e-07,False,True,-1.0,,2024-06-11 12:03:21.984837
|
|
10
|
+
7,4.766513095940718,9.009910692888063,3.2031623183171014,1.1395898205496435e-07,1e-07,False,True,-1.0,,2024-06-11 12:03:25.935771
|
|
11
|
+
8,4.952240014062343,9.147228346475954,2.923015991988623,1.0163581024783297e-07,1e-07,False,True,-1.0,,2024-06-11 12:03:29.971566
|
|
12
|
+
9,5.066580537443571,9.328659775516126,2.415616268398396,7.9346679307476e-08,1e-07,False,True,-1.0,,2024-06-11 12:03:33.843674
|
|
13
|
+
10,5.01255047733164,9.185738480635885,2.8492684510814064,9.909738207022439e-08,1e-07,False,True,-1.0,,2024-06-11 12:03:38.301538
|
|
14
|
+
11,5.00852993138919,9.181676469148485,2.8487833409683856,9.932809365733774e-08,1e-07,False,True,-1.0,,2024-06-11 12:03:42.927279
|
|
15
|
+
12,5.015372908010907,9.156507516160001,2.84363953399497,9.865521830979344e-08,1e-07,False,True,-1.0,,2024-06-11 12:03:47.695209
|
|
16
|
+
13,4.936583250613616,9.643690440100311,2.8584657253663925,1.101940126271035e-07,1e-07,False,True,-1.0,,2024-06-11 12:03:52.718947
|
|
17
|
+
14,5.102945083594629,8.690025958818417,2.845587386493274,8.937388292289982e-08,1e-07,False,True,-1.0,,2024-06-11 12:03:58.135407
|
|
18
|
+
15,4.991284994799307,9.188650804778193,2.8530392301069725,9.970815493825604e-08,1e-07,False,True,-1.0,,2024-06-11 12:04:05.138794
|
|
19
|
+
16,4.798136039813497,9.176815614734876,2.8229449492498473,9.890481643260465e-08,1e-07,False,True,-1.0,,2024-06-11 12:04:14.148550
|
|
20
|
+
17,4.930367618092964,9.199092260972836,2.8443627311061546,9.98421974076081e-08,1e-07,True,True,-1.0,,2024-06-11 12:04:28.793111
|
|
21
|
+
18,4.917692804276215,9.210004097072988,2.8402049456555583,1.0026551790777177e-07,1e-07,False,True,-1.0,,2024-06-11 12:04:53.890898
|
|
22
|
+
19,4.916044853968383,9.214647159558751,2.839933299380106,9.881932615643327e-08,1e-07,False,True,-1.0,,2024-06-11 12:05:39.178010
|
|
23
|
+
20,4.924334850336223,9.19023089875423,2.8409787839543563,9.883080340842676e-08,1e-07,False,True,-1.0,,2024-06-11 12:07:03.669665
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"{""femprj_path"": null, ""model_name"": ""Harm""}",prm,prm,prm,obj,obj_direction,,cns,cns_lb,cns_ub,cns,cns_lb,cns_ub,,,,
|
|
2
|
+
,,,,,,,,,,,,,,,,
|
|
3
|
+
trial,antenna_radius,substrate_w,port_x,first resonant frequency(Hz),first resonant frequency(Hz)_direction,non_domi,antenna and substrate clearance,antenna and substrate clearance_lower_bound,antenna and substrate clearance_upper_bound,antenna and port clearance,antenna and port clearance_lower_bound,antenna and port clearance_upper_bound,feasible,hypervolume,message,time
|
|
4
|
+
1,10.0,50.0,5.0,4289000000.0,3000000000.0,False,15.0,1,,5.0,1,,True,-1.0,initial,2024-06-11 12:08:26.664402
|
|
5
|
+
2,13.979877262955549,43.12037280884873,3.96389588638785,3050000000.0,3000000000.0,False,7.580309099999999,1,,10.01598141,1,,True,-1.0,,2024-06-11 12:08:45.888336
|
|
6
|
+
3,17.48663961200633,44.246782213565524,4.4546743769349115,2460000000.0,3000000000.0,False,4.636751499999999,1,,13.03196522,1,,True,-1.0,,2024-06-11 12:09:08.898036
|
|
7
|
+
4,11.841049763255539,55.70351922786027,4.793801861008835,3581000000.0,3000000000.0,False,16.0107098,1,,7.04724794,1,,True,-1.0,,2024-06-11 12:09:30.818053
|
|
8
|
+
5,12.713516576204174,51.84829137724085,1.8825578416799567,2932000000.0,3000000000.0,False,13.2106291,1,,10.83095876,1,,True,-1.0,,2024-06-11 12:09:46.800326
|
|
9
|
+
6,14.113172778521575,43.41048247374583,2.235980266720311,2991000000.0,3000000000.0,True,7.592068450000001,1,,11.877192529999999,1,,True,-1.0,,2024-06-11 12:10:06.872645
|
|
10
|
+
7,19.233283058799998,59.31264066149119,16.35954961421276,2283000000.0,3000000000.0,False,10.42303725,1,,2.8737335,1,,True,-1.0,,2024-06-11 12:10:40.123116
|
|
11
|
+
8,11.60228740609402,42.44076469689558,10.408361292114133,3758000000.0,3000000000.0,False,9.618094950000001,1,,1.1939261000000005,1,,True,-1.0,,2024-06-11 12:11:03.207759
|
|
12
|
+
9,14.93783426530973,46.23422152178822,10.881292402378406,2932000000.0,3000000000.0,False,8.179276449999998,1,,4.056541900000001,1,,True,-1.0,,2024-06-11 12:11:30.548731
|
|
13
|
+
10,13.968499682166277,58.437484700462335,2.6813575389864703,2991000000.0,3000000000.0,True,15.250242649999999,1,,11.28714216,1,,True,-1.0,,2024-06-11 12:11:50.050599
|
|
14
|
+
11,14.54315734982604,52.537550133941885,1.0,2932000000.0,3000000000.0,False,11.725617749999998,1,,13.5431573,1,,True,-1.0,,2024-06-11 12:12:12.701262
|
|
15
|
+
12,14.586861208706766,59.99999999999999,5.909396621050475,2932000000.0,3000000000.0,False,15.4131388,1,,8.677464579999999,1,,True,-1.0,,2024-06-11 12:12:34.168326
|
|
16
|
+
13,14.706782700305354,40.0,1.0,2814000000.0,3000000000.0,False,5.2932173,1,,13.7067827,1,,True,-1.0,,2024-06-11 12:13:37.839853
|
|
17
|
+
14,14.43570684403354,51.141218169528905,5.404811972123167,2932000000.0,3000000000.0,False,11.134902299999998,1,,9.030894830000001,1,,True,-1.0,,2024-06-11 12:14:39.583756
|
|
18
|
+
15,14.458054466363947,59.99999999999999,1.0,2932000000.0,3000000000.0,False,15.5419455,1,,13.4580545,1,,True,-1.0,,2024-06-11 12:14:58.872749
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"{""femprj_path"": null, ""model_name"": ""Ex1""}",prm,prm,prm,obj,obj_direction,obj,obj_direction,obj,obj_direction,,,,,
|
|
2
|
+
,,,,,,,,,,,,,,
|
|
3
|
+
trial,substrate_w,substrate_d,rot,max temp. of<br>MAINCHIP (degree),max temp. of<br>MAINCHIP (degree)_direction,max temp. of<br>SUBCHIP (degree),max temp. of<br>SUBCHIP (degree)_direction,substrate size (mm2),substrate size (mm2)_direction,non_domi,feasible,hypervolume,message,time
|
|
4
|
+
1,40.0,60.0,0.0,33.67695768582703,minimize,33.95371403110336,minimize,2400.0,minimize,True,True,0.0,initial,2024-06-11 12:17:25.110141
|
|
5
|
+
2,36.232524516199774,58.71857196665782,131.75890952605292,36.750613396557995,minimize,35.98760273557258,minimize,2127.522098595014,minimize,False,True,0.0,,2024-06-11 12:17:29.371084
|
|
6
|
+
3,44.74902239948739,38.05648465150335,28.079013660516477,37.661215802334205,minimize,37.688375728423864,minimize,1702.9904863055572,minimize,False,True,0.0,,2024-06-11 12:17:33.564289
|
|
7
|
+
4,24.20717726239158,56.52057979014832,108.20070211377758,38.03360975542378,minimize,37.132207739036424,minimize,1368.2036963173987,minimize,False,True,0.0,,2024-06-11 12:17:37.853520
|
|
8
|
+
5,48.90675795624973,34.53519685169086,174.58377338915898,35.8008561699603,minimize,35.41803365231452,minimize,1689.0045172706505,minimize,True,True,1.8564481859818923e-05,,2024-06-11 12:17:41.999764
|
|
9
|
+
6,53.632820350416026,39.520816877635184,32.72849409727811,36.27586854489045,minimize,36.24746978400414,minimize,2119.612874858985,minimize,False,True,1.8564481859818923e-05,,2024-06-11 12:17:46.239353
|
|
10
|
+
7,28.969371374430487,41.91029831694798,94.45615769380281,37.30507756114715,minimize,37.03664336271842,minimize,1214.1149969374887,minimize,True,True,0.0004588839992990786,,2024-06-11 12:17:50.385009
|
|
11
|
+
8,38.413910708400394,41.57195764514909,110.1335210500283,37.576825749490744,minimize,37.23183262975933,minimize,1596.9414668705863,minimize,False,True,0.0004588839992990786,,2024-06-11 12:17:54.833608
|
|
12
|
+
9,27.30076670477759,41.59576086191567,65.9451317928645,40.3319296385719,minimize,40.398458177958574,minimize,1135.596164039882,minimize,True,True,0.000640516961074097,,2024-06-11 12:17:59.016440
|
|
13
|
+
10,39.33065940024737,54.41457499621835,35.941280788504756,36.33478914713188,minimize,36.42436238628697,minimize,2140.161115720755,minimize,False,True,0.000640516961074097,,2024-06-11 12:18:03.281085
|
|
14
|
+
11,29.88951598161767,48.530123354694155,153.62497867846213,39.42958363258689,minimize,38.57020860420411,minimize,1450.5418998462744,minimize,False,True,0.000640516961074097,,2024-06-11 12:18:07.538199
|
|
15
|
+
12,31.485762571965203,47.06581165954471,80.23637941165202,36.63056881181441,minimize,36.53774341292369,minimize,1481.9029737625024,minimize,True,True,0.0006405332168774407,,2024-06-11 12:18:11.814563
|
|
16
|
+
13,22.592602387021333,51.59088187331228,6.2020220936995525,40.387965035487035,minimize,40.85943258832127,minimize,1165.5722822320565,minimize,False,True,0.0006405332168774407,,2024-06-11 12:18:16.222971
|
|
17
|
+
14,58.76493724495243,44.20401050976337,64.09642020029887,34.858239533999296,minimize,34.725797147945734,minimize,2597.645901020641,minimize,False,True,0.0006405332168774407,,2024-06-11 12:18:20.540597
|
|
18
|
+
15,32.86246372091377,44.383694428619314,102.63175919113127,37.1577717589319,minimize,36.7308460274431,minimize,1458.5575460918933,minimize,True,True,0.0006704802815873576,,2024-06-11 12:18:24.780506
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"{""femprj_path"": null, ""model_name"": ""Ex14""}",prm,prm,obj,obj_direction,obj,obj_direction,obj,obj_direction,,,,,
|
|
2
|
+
,,,,,,,,,,,,,
|
|
3
|
+
trial,substrate_w,substrate_d,max temp. of<br>MAINCHIP (degree),max temp. of<br>MAINCHIP (degree)_direction,max temp. of<br>SUBCHIP (degree),max temp. of<br>SUBCHIP (degree)_direction,substrate size,substrate size_direction,non_domi,feasible,hypervolume,message,time
|
|
4
|
+
1,40.0,60.0,37.52037094703595,minimize,37.219570759517936,minimize,2400.0,minimize,True,True,0.0,initial,2024-06-11 12:15:44.138912
|
|
5
|
+
2,28.741722139252524,58.66928627306774,39.9508830973249,minimize,39.599423416818745,minimize,1686.2563226399373,minimize,True,True,2.970229880317643e-05,,2024-06-11 12:15:48.376064
|
|
6
|
+
3,35.17589095260529,49.163779073319986,39.86737960935721,minimize,39.626434415381006,minimize,1729.3797347696782,minimize,True,True,0.000549159406835399,,2024-06-11 12:15:52.656210
|
|
7
|
+
4,24.808335527963855,37.21185204907747,45.61866728905813,minimize,45.454085110378436,minimize,923.164108992346,minimize,True,True,0.0005566073404974778,,2024-06-11 12:15:56.376449
|
|
8
|
+
5,23.04550501902759,56.38675593592325,42.04691673232563,minimize,41.64255082527148,minimize,1299.4612650272293,minimize,True,True,0.0005567909231334245,,2024-06-11 12:16:00.326849
|
|
9
|
+
6,32.82007021137776,52.11795960049323,39.9187861643026,minimize,39.65372077487905,minimize,1710.515092752764,minimize,True,True,0.0007091441422963771,,2024-06-11 12:16:04.696885
|
|
10
|
+
7,22.370520897324443,59.18756600837385,41.85766092262706,minimize,41.41235961737965,minimize,1324.0566822231292,minimize,True,True,0.0007092394191664859,,2024-06-11 12:16:08.614814
|
|
11
|
+
8,36.98396753440759,38.733155988313456,41.459966487020225,minimize,41.32468375000158,minimize,1432.50578267643,minimize,True,True,0.000726093206891994,,2024-06-11 12:16:12.849722
|
|
12
|
+
9,25.27284940972781,37.951921766042716,45.203996793500714,minimize,45.02945742624087,minimize,959.1532040919769,minimize,True,True,0.000740299173075068,,2024-06-11 12:16:16.595183
|
|
13
|
+
10,27.476360373271678,47.16842365407042,42.20017927506254,minimize,41.94996082930303,minimize,1296.0166090811015,minimize,True,True,0.0007432067663207338,,2024-06-11 12:16:20.601673
|
|
14
|
+
11,30.35761516871566,42.82064718778404,42.23879430266078,minimize,42.04418338920198,minimize,1299.9327303125576,minimize,False,True,0.0007432067663207338,,2024-06-11 12:16:24.664582
|
|
15
|
+
12,39.45166799418159,54.41754192649335,38.28305390496612,minimize,38.021101163274,minimize,2146.862796414889,minimize,True,True,0.0007445437960082572,,2024-06-11 12:16:29.231158
|
|
16
|
+
13,33.521593044416015,57.50694947262799,38.98990028232446,minimize,38.68463558069958,minimize,1927.7245558105535,minimize,True,True,0.0008565127001001895,,2024-06-11 12:16:33.869770
|
|
17
|
+
14,39.51381652632001,59.67156845010898,37.636491167600745,minimize,37.3320157660186,minimize,2357.85140797618,minimize,True,True,0.0009138674403261316,,2024-06-11 12:16:38.728862
|
|
18
|
+
15,27.034698907527144,51.95067544919728,41.46094657033741,minimize,41.16337804204099,minimize,1404.470867090637,minimize,True,True,0.0009230159948292316,,2024-06-11 12:16:42.930323
|