Files
Atomizer/.claude/skills/run-optimization.md
Antoine 8cbdbcad78 feat: Add Protocol 13 adaptive optimization, Plotly charts, and dashboard improvements
## Protocol 13: Adaptive Multi-Objective Optimization
- Iterative FEA + Neural Network surrogate workflow
- Initial FEA sampling, NN training, NN-accelerated search
- FEA validation of top NN predictions, retraining loop
- adaptive_state.json tracks iteration history and best values
- M1 mirror study (V11) with 103 FEA, 3000 NN trials

## Dashboard Visualization Enhancements
- Added Plotly.js interactive charts (parallel coords, Pareto, convergence)
- Lazy loading with React.lazy() for performance
- Code splitting: plotly.js-basic-dist (~1MB vs 3.5MB)
- Chart library toggle (Recharts default, Plotly on-demand)
- ExpandableChart component for full-screen modal views
- ConsoleOutput component for real-time log viewing

## Documentation
- Protocol 13 detailed documentation
- Dashboard visualization guide
- Plotly components README
- Updated run-optimization skill with Mode 5 (adaptive)

## Bug Fixes
- Fixed TypeScript errors in dashboard components
- Fixed Card component to accept ReactNode title
- Removed unused imports across components

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 07:41:54 -05:00

418 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Run Optimization Skill
**Last Updated**: December 3, 2025
**Version**: 2.0 - Added Adaptive Multi-Objective (Protocol 13)
You are helping the user run and monitor Atomizer optimization studies.
## Purpose
Execute optimization studies with proper:
1. Pre-flight validation
2. Resource management
3. Progress monitoring
4. Error recovery
5. Dashboard integration
## Triggers
- "run optimization"
- "start the study"
- "run {study_name}"
- "execute optimization"
- "begin the optimization"
## Prerequisites
- Study must exist in `studies/{study_name}/`
- `optimization_config.json` must be present and valid
- `run_optimization.py` must exist
- NX model files must be in place
## Pre-Flight Checklist
Before running, verify:
### 1. Study Structure
```
studies/{study_name}/
├── 1_setup/
│ ├── model/
│ │ ├── {Model}.prt ✓ Required
│ │ ├── {Model}_sim1.sim ✓ Required
│ │ └── {Model}_fem1.fem ? Optional (created by NX)
│ ├── optimization_config.json ✓ Required
│ └── workflow_config.json ? Optional
├── 2_results/ ? Created automatically
└── run_optimization.py ✓ Required
```
### 2. Configuration Validation
```python
from optimization_engine.validators.config_validator import validate_config
result = validate_config(study_dir / "1_setup" / "optimization_config.json")
if result.errors:
# STOP - fix errors first
for error in result.errors:
print(f"ERROR: {error}")
if result.warnings:
# WARN but can continue
for warning in result.warnings:
print(f"WARNING: {warning}")
```
### 3. NX Environment
- Verify NX is installed (check `config.py` for `NX_VERSION`)
- Verify Nastran solver is available
- Check for any running NX processes that might conflict
## Execution Modes
### Mode 1: Quick Test (3-5 trials)
```bash
cd studies/{study_name}
python run_optimization.py --trials 3
```
**Use when**: First time running, testing configuration
### Mode 2: Standard Run
```bash
cd studies/{study_name}
python run_optimization.py --trials 30
```
**Use when**: Production optimization with FEA only
### Mode 3: Extended with NN Surrogate
```bash
cd studies/{study_name}
python run_optimization.py --trials 200 --enable-nn
```
**Use when**: Large-scale optimization with trained surrogate
### Mode 4: Resume Interrupted
```bash
cd studies/{study_name}
python run_optimization.py --trials 30 --resume
```
**Use when**: Optimization was interrupted
### Mode 5: Adaptive Multi-Objective (Protocol 13)
```bash
cd studies/{study_name}
python run_optimization.py --start
```
**Use when**:
- FEA takes > 5 minutes per run
- Multi-objective optimization (2-4 objectives)
- Need to explore > 100 designs efficiently
**Workflow:**
1. Initial FEA trials (50-100) for NN training data
2. Train neural network surrogate
3. NN-accelerated search (1000+ trials in seconds)
4. Validate top NN predictions with FEA
5. Retrain NN with new data, repeat
**Configuration** (in optimization_config.json):
```json
{
"protocol": 13,
"adaptive_settings": {
"enabled": true,
"initial_fea_trials": 50,
"nn_trials_per_iteration": 1000,
"fea_validation_per_iteration": 5,
"max_iterations": 10
}
}
```
**Monitoring:**
- `adaptive_state.json`: Current iteration, best values, history
- Dashboard shows FEA (blue) vs NN (orange) trials
- Pareto front updates after each FEA validation
## Execution Steps
### Step 1: Validate Study
Run pre-flight checks and present status:
```
PRE-FLIGHT CHECK: {study_name}
===============================
Configuration:
✓ optimization_config.json valid
✓ 4 design variables defined
✓ 2 objectives (multi-objective)
✓ 2 constraints configured
Model Files:
✓ Beam.prt exists (3.2 MB)
✓ Beam_sim1.sim exists (1.1 MB)
✓ Beam_fem1.fem exists (0.8 MB)
Environment:
✓ NX 2412 detected
✓ Nastran solver available
? No NX processes running (clean slate)
Estimated Runtime:
- 30 trials × ~30s/trial = ~15 minutes
- With NN: 200 trials × ~2s/trial = ~7 minutes (after training)
Ready to run. Proceed? (Y/n)
```
### Step 2: Start Optimization
```python
import subprocess
import sys
from pathlib import Path
def run_optimization(study_name: str, trials: int = 30,
enable_nn: bool = False, resume: bool = False):
"""Start optimization as background process."""
study_dir = Path(f"studies/{study_name}")
cmd = [
sys.executable,
str(study_dir / "run_optimization.py"),
"--trials", str(trials)
]
if enable_nn:
cmd.append("--enable-nn")
if resume:
cmd.append("--resume")
# Run in background
process = subprocess.Popen(
cmd,
cwd=study_dir,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT
)
return process.pid
```
### Step 3: Monitor Progress
Provide real-time updates:
```
OPTIMIZATION RUNNING: {study_name}
==================================
Progress: [████████░░░░░░░░░░░░] 12/30 trials (40%)
Elapsed: 5m 32s
ETA: ~8 minutes
Current Trial #12:
Parameters: thickness=2.3, diameter=15.2, ...
Status: Running FEA...
Best So Far (Pareto Front):
#1: mass=245g, freq=125Hz (feasible)
#2: mass=280g, freq=142Hz (feasible)
#3: mass=310g, freq=158Hz (feasible)
Constraint Violations: 3/12 trials (25%)
Common: max_stress exceeded
Dashboard: http://localhost:3003
Optuna Dashboard: http://localhost:8081
```
### Step 4: Handle Completion/Errors
**On Success**:
```
OPTIMIZATION COMPLETE
=====================
Study: {study_name}
Duration: 14m 23s
Trials: 30/30
Results:
Feasible designs: 24/30 (80%)
Pareto-optimal: 8 designs
Best Designs:
#1: mass=231g, freq=118Hz ← Lightest
#2: mass=298g, freq=156Hz ← Stiffest
#3: mass=265g, freq=138Hz ← Balanced
Next Steps:
1. View results: /generate-report {study_name}
2. Continue optimization: python run_optimization.py --trials 50 --resume
3. Export designs: python export_pareto.py
```
**On Error**:
```
OPTIMIZATION ERROR
==================
Trial #15 failed with:
Error: NX simulation timeout after 600s
Design: thickness=1.2, diameter=45, hole_count=12
Possible causes:
1. Mesh quality issues with extreme parameters
2. Convergence problems in solver
3. NX process locked/crashed
Recovery options:
1. [Recommended] Resume with --resume flag (skips failed)
2. Narrow design variable bounds
3. Check NX manually with these parameters
Resume command:
python run_optimization.py --trials 30 --resume
```
## Dashboard Integration
Always inform user about monitoring options:
```
MONITORING OPTIONS
==================
1. Atomizer Dashboard (recommended):
cd atomizer-dashboard/backend && python -m uvicorn api.main:app --port 8000
cd atomizer-dashboard/frontend && npm run dev
→ http://localhost:3003
Features:
- ALL extracted metrics displayed per trial (not just mass/frequency)
- Quick preview shows first 6 metrics with abbreviations
- Expanded view shows full metric names and values
- Multi-objective studies: Zernike RMS, coefficients, workload metrics
2. Optuna Dashboard:
python -c "import optuna; from optuna_dashboard import run_server; ..."
→ http://localhost:8081
3. Command Line:
Watch study.db for updates
Tail the log file
```
**IMPORTANT**: For multi-objective studies with custom metrics (Zernike, thermal, etc.),
the Atomizer Dashboard automatically displays ALL numeric metrics from user_attrs.
No configuration needed - metrics are discovered dynamically.
## Resource Management
### Before Running
- Check available RAM (recommend 8GB+ free)
- Check disk space (OP2 files can be large)
- Close unnecessary NX sessions
### During Run
- Monitor CPU usage (Nastran is CPU-intensive)
- Watch for disk space issues
- Handle NX license timeouts
### Cleanup After
- Option to remove intermediate OP2 files
- Compress results for archival
- Clean worker directories
## Error Handling
| Error | Cause | Recovery |
|-------|-------|----------|
| NX not found | NX not installed/configured | Check config.py settings |
| Simulation timeout | Complex mesh/convergence | Increase timeout or simplify |
| License error | NX license unavailable | Wait for license or use queue |
| Database locked | Multiple processes | Stop conflicting processes |
| Out of memory | Large mesh | Reduce mesh density |
| OP2 parse error | Corrupted output | Re-run trial |
## Parallel Execution (Advanced)
For large studies, can run parallel workers:
```python
# Warning: Requires careful NX session management
# Each worker needs isolated model directory
python run_training_fea.py --study {study_name} --workers 2
```
## Output Format
After starting optimization:
```
OPTIMIZATION STARTED
====================
Study: {study_name}
Trials: 30
Mode: Multi-objective (NSGA-II)
Started: 2025-11-25 15:30:00
Process ID: 12345
Log File: studies/{study_name}/2_results/optimization.log
Monitoring:
Dashboard: http://localhost:3003
Database: studies/{study_name}/2_results/study.db
Commands:
Check progress: "how's the optimization going?"
Stop: Ctrl+C in terminal or kill process 12345
Resume: python run_optimization.py --resume
```
## Integration with Other Skills
- After completion → `/generate-report`
- On error → `/troubleshoot`
- For more trials → `/configure-surrogate` (enable NN)
## Example Conversation
```
USER: Run the uav_arm optimization
CLAUDE: I'll start the UAV arm optimization. Let me run pre-flight checks...
PRE-FLIGHT CHECK: uav_arm_optimization
======================================
✓ Configuration valid (Protocol 11, 30 trials)
✓ Model files present
✓ NX 2412 available
Ready to start. This will take approximately 15 minutes.
Starting now...
OPTIMIZATION STARTED
====================
Process running in background.
Monitor at: http://localhost:3003
I'll let you know when it completes. You can ask "how's it going?" anytime.
[... 15 minutes later ...]
OPTIMIZATION COMPLETE
=====================
30/30 trials completed successfully.
Found 8 Pareto-optimal designs.
Best lightweight: 231g @ 118Hz
Best stiff: 298g @ 156Hz
Would you like me to generate a detailed report?
```