Files
Atomizer/studies/bracket_displacement_maximizing/config/study_config.json
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

82 lines
1.9 KiB
JSON

{
"study_name": "bracket_displacement_maximizing",
"study_description": "Maximize displacement of bracket under load while maintaining safety factor >= 4.0",
"created_date": "2025-11-16",
"model": {
"part_file": "model/Bracket.prt",
"fem_file": "model/Bracket_fem1.fem",
"sim_file": "model/Bracket_sim1.sim",
"element_types": ["CHEXA", "CPENTA"],
"nodes": 585,
"elements": 316
},
"optimization": {
"objective": "Maximize displacement (minimize negative displacement)",
"direction": "minimize",
"algorithm": "TPE",
"n_trials": 20,
"design_variables": [
{
"name": "tip_thickness",
"type": "continuous",
"min": 15.0,
"max": 25.0,
"units": "mm",
"baseline": 17.0
},
{
"name": "support_angle",
"type": "continuous",
"min": 20.0,
"max": 40.0,
"units": "degrees",
"baseline": 38.0
}
],
"constraints": [
{
"name": "safety_factor",
"type": ">=",
"value": 4.0,
"description": "Minimum safety factor constraint"
}
]
},
"material": {
"name": "Aluminum 6061-T6",
"yield_strength": 276.0,
"yield_strength_units": "MPa",
"allowable_stress": 69.0,
"allowable_stress_units": "MPa"
},
"workflow": {
"phase": "3.3",
"wizard_validation": true,
"auto_element_detection": true,
"extractors": [
{
"action": "extract_displacement",
"result_type": "displacement"
},
{
"action": "extract_solid_stress",
"result_type": "stress",
"element_type": "auto-detected"
}
],
"inline_calculations": [
{
"action": "calculate_safety_factor",
"formula": "276.0 / max_von_mises"
},
{
"action": "negate_displacement",
"formula": "-max_displacement"
}
],
"hooks": [
"safety_factor_constraint"
]
}
}