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>
5.6 KiB
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 optimizationBracket_fem1.fem- Automatically updated when geometry changesBracket_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.jsonupdates 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:
# 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:
{
"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
cd studies/bracket_displacement_maximizing
python run_substudy.py my_substudy_name
4. Monitor Progress
Watch the live history file update in real-time:
# 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:
{
"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
-
Coarse Exploration (20 trials, wide bounds)
- Fast exploration of entire design space
- Identify promising regions
-
Fine Tuning (50 trials, narrow bounds)
- Continue from best coarse design
- Refine solution in narrow bounds
Workflow 2: Algorithm Comparison
- TPE Optimization (substudy with TPE algorithm)
- NSGAII Optimization (substudy with genetic algorithm)
- Compare results across different algorithms
Workflow 3: Incremental Study Extension
- Run initial 20-trial substudy
- Analyze results
- Create continuation substudy for 30 more trials
- Keep building on previous work
Files Generated per Substudy
After running a substudy, you'll find:
optimization_history.json- Complete trial historyoptimization_history_incremental.json- Live-updating historybest_design.json- Best parameters and performancereport.md- Human-readable markdown reportoptuna_study.db- Optuna database (in output_dir)
Tips
- Name substudies descriptively:
coarse_20trials,fine_50trials_narrow_bounds - Use continuation wisely: Continue from coarse to fine, not vice versa
- Monitor live history: Use it to catch issues early
- Keep model files clean: The shared model in
model/is modified during optimization - 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 |