Files
Atomizer/studies/bracket_displacement_maximizing/SUBSTUDIES_README.md
Anto01 2f3afc3813 feat: Add substudy system with live history tracking and workflow fixes
Major Features:
- Hierarchical substudy system (like NX Solutions/Subcases)
  * Shared model files across all substudies
  * Independent configuration per substudy
  * Continuation support from previous substudies
  * Real-time incremental history updates
- Live history tracking with optimization_history_incremental.json
- Complete bracket_displacement_maximizing study with substudy examples

Core Fixes:
- Fixed expression update workflow to pass design_vars through simulation_runner
  * Restored working NX journal expression update mechanism
  * OP2 timestamp verification instead of file deletion
  * Resolved issue where all trials returned identical objective values
- Fixed LLMOptimizationRunner to pass design variables to simulation runner
- Enhanced NXSolver with timestamp-based file regeneration verification

New Components:
- optimization_engine/llm_optimization_runner.py - LLM-driven optimization runner
- optimization_engine/optimization_setup_wizard.py - Phase 3.3 setup wizard
- studies/bracket_displacement_maximizing/ - Complete substudy example
  * run_substudy.py - Substudy runner with continuation
  * run_optimization.py - Standalone optimization runner
  * config/substudy_template.json - Template for new substudies
  * substudies/coarse_exploration/ - 20-trial coarse search
  * substudies/fine_tuning/ - 50-trial refinement (continuation example)
  * SUBSTUDIES_README.md - Complete substudy documentation

Technical Improvements:
- Incremental history saving after each trial (optimization_history_incremental.json)
- Expression update workflow: .prt update → NX journal receives values → geometry update → FEM update → solve
- Trial indexing fix in substudy result saving
- Updated README with substudy system documentation

Testing:
- Successfully ran 20-trial coarse_exploration substudy
- Verified different objective values across trials (workflow fix validated)
- Confirmed live history updates in real-time
- Tested shared model file usage across substudies

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-16 21:29:54 -05:00

206 lines
5.6 KiB
Markdown

# Substudy System
The substudy system allows you to organize multiple optimization runs that share the same model files but have different configurations, like NX Solutions with subcases.
## Directory Structure
```
bracket_displacement_maximizing/
├── model/ # Shared model files
│ ├── Bracket.prt # Part file (shared)
│ ├── Bracket_fem1.fem # FEM file (shared)
│ └── Bracket_sim1.sim # Simulation file (shared)
├── config/
│ └── substudy_template.json # Template for new substudies
├── substudies/ # Independent substudy results
│ ├── coarse_exploration/ # Example: fast exploration
│ │ ├── config.json
│ │ ├── optimization_history.json
│ │ ├── optimization_history_incremental.json # Live updates!
│ │ ├── best_design.json
│ │ └── report.md
│ └── fine_tuning/ # Example: refined optimization
│ ├── config.json
│ └── ...
├── run_substudy.py # Substudy runner
└── run_optimization.py # Original standalone runner
```
## Key Concepts
### Shared Model Files
All substudies use the **same** model files from `model/` directory:
- `Bracket.prt` - Updated with design variables during optimization
- `Bracket_fem1.fem` - Automatically updated when geometry changes
- `Bracket_sim1.sim` - Simulation definition
This is like NX where different Subcases share the same model.
### Independent Substudy Configurations
Each substudy has its own:
- Parameter bounds (coarse vs. fine)
- Number of trials
- Algorithm settings
- Results directory
### Continuation Support
Substudies can continue from previous runs:
- Start from best design of previous substudy
- Refine search in narrower bounds
- Build on previous work incrementally
### Live History Tracking
Each substudy automatically saves incremental history:
- `optimization_history_incremental.json` updates after each trial
- Monitor progress in real-time
- No need to query Optuna database
## Usage
### 1. Create a New Substudy
Copy the template and customize:
```bash
# Create new substudy directory
mkdir substudies/my_substudy_name
# Copy template
cp config/substudy_template.json substudies/my_substudy_name/config.json
# Edit config.json with your parameters
```
### 2. Configure the Substudy
Edit `substudies/my_substudy_name/config.json`:
```json
{
"substudy_name": "my_substudy_name",
"description": "What this substudy investigates",
"parent_study": "bracket_displacement_maximizing",
"optimization": {
"algorithm": "TPE",
"direction": "minimize",
"n_trials": 20,
"design_variables": [
{
"parameter": "tip_thickness",
"min": 15.0,
"max": 25.0,
"units": "mm"
},
{
"parameter": "support_angle",
"min": 20.0,
"max": 40.0,
"units": "degrees"
}
]
},
"continuation": {
"enabled": false
}
}
```
**IMPORTANT**: Use `"parameter"` not `"name"` for design variables!
### 3. Run the Substudy
```bash
cd studies/bracket_displacement_maximizing
python run_substudy.py my_substudy_name
```
### 4. Monitor Progress
Watch the live history file update in real-time:
```bash
# In another terminal
watch -n 5 cat substudies/my_substudy_name/optimization_history_incremental.json
```
### 5. Continuing from Previous Substudy
To refine results from a previous substudy:
```json
{
"substudy_name": "refined_search",
"optimization": {
"design_variables": [
{
"parameter": "tip_thickness",
"min": 18.0, // Narrower bounds
"max": 22.0,
"units": "mm"
}
]
},
"continuation": {
"enabled": true,
"from_substudy": "my_substudy_name",
"inherit_best_params": true // Start from best design
}
}
```
## Example Workflows
### Workflow 1: Coarse-to-Fine Optimization
1. **Coarse Exploration** (20 trials, wide bounds)
- Fast exploration of entire design space
- Identify promising regions
2. **Fine Tuning** (50 trials, narrow bounds)
- Continue from best coarse design
- Refine solution in narrow bounds
### Workflow 2: Algorithm Comparison
1. **TPE Optimization** (substudy with TPE algorithm)
2. **NSGAII Optimization** (substudy with genetic algorithm)
3. Compare results across different algorithms
### Workflow 3: Incremental Study Extension
1. Run initial 20-trial substudy
2. Analyze results
3. Create continuation substudy for 30 more trials
4. Keep building on previous work
## Files Generated per Substudy
After running a substudy, you'll find:
- `optimization_history.json` - Complete trial history
- `optimization_history_incremental.json` - Live-updating history
- `best_design.json` - Best parameters and performance
- `report.md` - Human-readable markdown report
- `optuna_study.db` - Optuna database (in output_dir)
## Tips
1. **Name substudies descriptively**: `coarse_20trials`, `fine_50trials_narrow_bounds`
2. **Use continuation wisely**: Continue from coarse to fine, not vice versa
3. **Monitor live history**: Use it to catch issues early
4. **Keep model files clean**: The shared model in `model/` is modified during optimization
5. **Back up good results**: Copy substudy directories before running new ones
## Comparison with NX
| NX Concept | Substudy Equivalent |
|------------|-------------------|
| Solution | Study (bracket_displacement_maximizing) |
| Subcase | Substudy (coarse_exploration) |
| Shared model | model/ directory |
| Subcase parameters | config.json |
| Subcase results | substudy directory |