5.8 KiB
Playbook 01 — First Run: Campaign 01 (TPE v1)
Study: studies/01_v1_tpe
Algorithm: Optuna TPE, 200 trials
Constraint: Stress only — σ_max ≤ 100.6 MPa (no displacement constraint)
Expected runtime: ~8–10 hours
Pre-conditions
Before starting, verify:
- NX DesigncenterNX2512 is installed
atomizerconda environment is active- You are running from the
Atomizer/root directory - NX files in
studies/01_v1_tpe/1_setup/model/(check with step 1)
Step 1 — Pre-flight Check
Run the pre-flight script to verify all files, imports, and NX are ready:
C:\Users\antoi\anaconda3\envs\atomizer\python.exe \
projects/isogrid-dev-plate/studies/01_v1_tpe/check_preflight.py
Expected output:
Pre-flight checks
============================================================
Model files:
[OK] Geometry part (X.X MB)
[OK] Idealized part (CRITICAL) (X.X MB)
[OK] FEM file (X.X MB)
[OK] Simulation file (X.X MB)
[OK] Sandbox 1 geometry (X.X MB)
[OK] Sandbox 2 geometry (X.X MB)
NX:
[OK] run_journal.exe: C:/Program Files/Siemens/DesigncenterNX2512/NXBIN/run_journal.exe
Python Brain:
[OK] optimization_engine.isogrid
Material: AL7075-T6 sigma_allow=100.6 MPa
Extractors:
[OK] extract_part_mass_material + extract_solid_stress
============================================================
All checks PASSED — ready to run run_optimization.py
If anything is [MISSING], resolve before continuing.
Step 2 — Launch Campaign 01
C:\Users\antoi\anaconda3\envs\atomizer\python.exe \
projects/isogrid-dev-plate/studies/01_v1_tpe/run_optimization.py
The script will print a header:
======================================================================
Isogrid Dev Plate — Mass Minimization Study 01 (TPE v1)
======================================================================
Material: AL7075-T6
σ_yield: 503.0 MPa
σ_allow: 100.6 MPa (SF = 5)
Trials: 200
DB: ...3_results/study.db
Then iterate:
--- Trial 0 ---
η₀=0.123 α=0.875 β=0.412 γ_s=0.234 R₀=45.2 R_e=18.7 s_min=12.3 s_max=41.5
[Brain] sandbox_1: 104 pockets valid=True mass_est≈2420g
[Brain] sandbox_2: 31 pockets valid=True mass_est≈310g
[Brain] Total pockets: 135
[NX] Running journal: import_profile.py
[NX] OK in 18.3s
[NX] Running journal: solve_simulation.py
[NX] OK in 74.2s
[Extract] Mass: 2.731 kg (2731.0 g)
[Extract] Max stress: 83.47 MPa (allow=100.6 SF=6.02)
[Obj] mass=2.7310 kg penalty=0.00 obj=2.7310 feasible=True
Step 3 — Monitor Progress
Option A: Console output
Watch the terminal. Each trial prints mass, stress, and objective.
Option B: Optuna dashboard
C:\Users\antoi\anaconda3\envs\atomizer\python.exe -m optuna-dashboard \
sqlite:///projects/isogrid-dev-plate/studies/01_v1_tpe/3_results/study.db
Then open http://localhost:8080 in a browser.
Option C: Trial folders
Each completed trial creates:
studies/01_v1_tpe/2_iterations/trial_NNNN/
├── params.json ← sampled design variables
├── results.json ← mass, stress, SF, objective
├── rib_profile_sandbox_1.json ← rib geometry for this trial
└── rib_profile_sandbox_2.json
Step 4 — If a Trial Fails
Failures return a large penalty (1e6) and are logged in Optuna with error user attribute.
The study will continue automatically to the next trial.
To see which trials failed after the run:
import optuna
study = optuna.load_study(
study_name="isogrid_01_v1_tpe",
storage="sqlite:///studies/01_v1_tpe/3_results/study.db"
)
failed = [t for t in study.trials if t.user_attrs.get("error")]
for t in failed:
print(f"Trial {t.number}: {t.user_attrs['error']}")
Step 5 — Resume After Interruption
The optimizer uses load_if_exists=True — it resumes from where it stopped.
Simply re-run the same command:
C:\Users\antoi\anaconda3\envs\atomizer\python.exe \
projects/isogrid-dev-plate/studies/01_v1_tpe/run_optimization.py
It will print:
Resuming study: N trials already complete.
Current best: trial X obj=2.XXXX kg mass=2.XXXX kg SF=X.XX
Step 6 — After the Run
-
Fill in
STUDY_REPORT.mdwith actual results:- Best trial number, mass, stress, SF
- Convergence trial (when best was found)
- Feasibility rate
-
Update
CONTEXT.mdbaseline mass (Gap G-02):- Run
extract_part_mass_materialon the unmodified model to get solid plate baseline
- Run
-
Record improvement:
mass_reduction = (baseline_mass - best_mass) / baseline_mass * 100
-
Archive if campaign is complete:
python tools/archive_study.bat # or zip 3_results/ manually
Troubleshooting
| Symptom | Likely Cause | Fix |
|---|---|---|
[NX] FAILED on import journal |
NX can't find model files | Check 1_setup/model/ has all 4 NX files |
| Identical stress every trial | _i.prt not loading |
Verify ACS_Stack_Main_Plate_Iso_project_fem2_i.prt exists in model dir |
Brain ERROR |
Geometry JSON malformed | Check geometry_sandbox_1.json / _2.json in adaptive_isogrid_data/ |
run_journal.exe not found |
Wrong NX version path | Confirm DesigncenterNX2512 is installed; check check_preflight.py |
| Very high stress (>500 MPa) | Mesh not updating | _i.prt must be in same directory as .fem |
| Trial folders not appearing | 2_iterations/ not created |
Should auto-create; check for TrialManager error in console |
See also: docs/protocols/operations/OP_06_TROUBLESHOOT.md