auto: daily sync
This commit is contained in:
189
projects/isogrid-dev-plate/playbooks/01_FIRST_RUN.md
Normal file
189
projects/isogrid-dev-plate/playbooks/01_FIRST_RUN.md
Normal file
@@ -0,0 +1,189 @@
|
||||
# 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
|
||||
- [ ] `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:
|
||||
|
||||
```bash
|
||||
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
|
||||
|
||||
```bash
|
||||
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
|
||||
```bash
|
||||
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:
|
||||
```python
|
||||
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:
|
||||
|
||||
```bash
|
||||
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:**
|
||||
```bash
|
||||
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`
|
||||
Reference in New Issue
Block a user