Files
Atomizer/projects/isogrid-dev-plate/playbooks/01_FIRST_RUN.md
2026-02-19 08:00:36 +00:00

5.8 KiB
Raw Blame History

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: ~810 hours


Pre-conditions

Before starting, verify:

  • NX DesigncenterNX2512 is installed
  • atomizer conda 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

  1. Fill in STUDY_REPORT.md with actual results:

    • Best trial number, mass, stress, SF
    • Convergence trial (when best was found)
    • Feasibility rate
  2. Update CONTEXT.md baseline mass (Gap G-02):

    • Run extract_part_mass_material on the unmodified model to get solid plate baseline
  3. Record improvement:

    • mass_reduction = (baseline_mass - best_mass) / baseline_mass * 100
  4. 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