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

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 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:

# 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

  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