- Embed Plotly.js inline for offline viewing (fixes CDN loading issues) - Add 4x resolution PNG export for all charts via toImageButtonOptions - Add SAT3_Trajectory_V7 study (TPE warm-start from V5, 86 trials, WS=277.37) - Include V7 optimization report and configuration Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
5.2 KiB
5.2 KiB
SAT3_Trajectory_V7 - Final Converged Optimization (TPE Warm-Start)
See ../README.md for M1 Mirror project overview
Overview
Final study in the SAT3 Trajectory series. Return to proven TPE after SAT V6 underperformed (~30% FEA success rate due to geometry infeasibility). Warm-started with all 194 V5 trials for immediate TPE model knowledge. Ran 86 additional trials with 100% FEA success rate, confirming the design space is fully converged.
Result: The optimum found in V5 (trial #181, WS=277.55) was confirmed as the global minimum. V7's best independent trial (#222, WS=277.60) matched it to within 0.08%.
Changes from V6
- Algorithm: SAT v3 (surrogate) → TPE (Optuna) — back to proven method
- Warm-start: Pre-loaded 194 V5 trials into Optuna DB, n_startup=0 (fully informed TPE)
- Bounds: Same as V6 (lateral_inner_pivot expanded to [5, 19])
- Seed: 77 (different from V5's 42) for fresh exploration
- NX fixes: sys.exit(0) bug fix in solve_simulation.py, early-exit crash detection in solver.py, NX process cleanup with force-kill
Results Summary
| Metric | Value |
|---|---|
| Best WS | 277.37 (trial #0, baseline re-eval) |
| Best V7 independent | 277.60 (trial #222) |
| V7 completed trials | 86 |
| V7 FEA failures | 0 (100% success rate) |
| Total trials (V5+V7) | 275 completed |
| Winning mass | 97.2 kg (22.8 kg under 120 kg limit) |
| Convergence | Top 10 within 0.85 WS of each other |
Winning Design Parameters
[Degrees]lateral_inner_angle=29.788
[Degrees]lateral_outer_angle=15.336
[mm]lateral_inner_pivot=15.513
[mm]lateral_middle_pivot=16.681
[mm]lateral_closeness=8.403
[mm]whiffle_min=61.929
[mm]triangle_width=171.39
[mm]offset_plane=3.048
[mm]lateral_outer_pivot=7.668 (derived = lateral_outer_angle / 2)
Winning Design Optical Performance
| Metric | Value (nm) | Weight |
|---|---|---|
| WFE 40/20 | 6.97 | 5.0 |
| WFE 60/20 | 13.01 | 5.0 |
| MFG 90 | 28.59 | 4.0 |
| Total filtered RMS | 3.24 | 4.0 |
| Coma RMS | 8.81 | 3.0 |
| Astigmatism RMS | 2.53 | 3.0 |
| Trefoil RMS | 3.41 | 2.0 |
| Spherical RMS | 4.64 | 2.0 |
| Weighted Sum | 277.37 |
Constraints: Mass = 97.2 kg (PASS), R^2 = 1.0000 (PASS), Pivot = angle/2 (ENFORCED)
Method
- Algorithm: TPE (Optuna, warm-started from V5)
- Extraction: HYBRID (Trajectory + Discrete Angle OPD with annular aperture)
- Annular inner radius: 135.75 mm (271.5 mm central hole)
- Solver: NX Nastran 2512
Objectives (8 weighted, same as V3-V6)
| Metric | Weight | Type |
|---|---|---|
| wfe_40_20 | 5.0 | Discrete angle OPD |
| wfe_60_20 | 5.0 | Discrete angle OPD |
| mfg_90 | 4.0 | Discrete angle OPD |
| total_filtered_rms_nm | 4.0 | Trajectory |
| coma_rms_nm | 3.0 | Trajectory |
| astigmatism_rms_nm | 3.0 | Trajectory |
| trefoil_rms_nm | 2.0 | Trajectory |
| spherical_rms_nm | 2.0 | Trajectory |
Design Variables (8 active + 1 derived)
| Variable | Min | Max | Optimal | Units | Notes |
|---|---|---|---|---|---|
| lateral_inner_angle | 20.0 | 35.0 | 29.788 | deg | Interior optimum |
| lateral_outer_angle | 9.0 | 17.0 | 15.336 | deg | Drives pivot |
| lateral_inner_pivot | 5.0 | 19.0 | 15.513 | mm | Expanded in V6 |
| lateral_middle_pivot | 12.0 | 25.0 | 16.681 | mm | Interior optimum |
| lateral_closeness | 5.0 | 15.0 | 8.403 | mm | Most sensitive param |
| whiffle_min | 25.0 | 80.0 | 61.929 | mm | Interior optimum |
| triangle_width | 155.0 | 185.0 | 171.390 | mm | Interior optimum |
| offset_plane | -10.0 | 15.0 | 3.048 | mm | Must be small positive |
| lateral_outer_pivot | — | — | 7.668 | mm | DERIVED = angle/2 |
Reports & Deliverables
| File | Location |
|---|---|
| Optimization report | 3_results/OPTIMIZATION_REPORT.md |
| Optimization log | 3_results/optimization.log |
| Study database | 3_results/study.db |
| Full optical report (HTML) | 2_iterations/iter0/*_OPTICAL_REPORT_*.html |
| Zernike 40/20 annular (HTML) | 2_iterations/iter0/*_40_vs_20_ANNULAR.html |
| Zernike 60/20 annular (HTML) | 2_iterations/iter0/*_60_vs_20_ANNULAR.html |
| Zernike 90 mfg annular (HTML) | 2_iterations/iter0/*_90_mfg_ANNULAR.html |
| Winning params.exp | 2_iterations/iter0/params.exp |
| OP2 results | 2_iterations/iter0/*-solution_1.op2 |
| Updated NX model | 2_iterations/iter0/M1_Blank.prt |
Study History
| Version | Algorithm | Trials | Best WS | FEA Success | Outcome |
|---|---|---|---|---|---|
| V1 | TPE | 69 | ~350 | ~90% | Initial exploration |
| V2 | TPE | 101 | ~310 | ~90% | Refined bounds |
| V3 | TPE | 160 | ~290 | ~95% | Trajectory method added |
| V4 | TPE | 140 | 279.97 | ~95% | Derived pivot constraint |
| V5 | TPE | 189 | 277.55 | ~100% | HYBRID extraction |
| V6 | SAT v3 | 27 | 307.91 | ~30% | Surrogate failed |
| V7 | TPE (warm) | 86 | 277.37 | 100% | CONVERGED |
Total FEA evaluations: 772
Usage
cd studies/M1_Mirror/SAT3_Trajectory_V7
# Test single FEA with winning params
python run_optimization.py --test
# Start optimization (200 trials default)
python run_optimization.py --start
# Resume and extend
python run_optimization.py --start --trials 100 --resume