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>
This commit is contained in:
@@ -88,6 +88,24 @@ class NXParameterUpdater:
|
||||
|
||||
return expressions
|
||||
|
||||
def get_all_expressions(self) -> Dict[str, Dict[str, any]]:
|
||||
"""
|
||||
Get all expressions as a dictionary.
|
||||
|
||||
Returns:
|
||||
Dict mapping expression name to info dict with 'value', 'units', 'type'
|
||||
"""
|
||||
expressions_list = self.find_expressions()
|
||||
return {
|
||||
expr['name']: {
|
||||
'value': expr['value'],
|
||||
'units': expr['units'],
|
||||
'type': expr['type'],
|
||||
'formula': None # Binary .prt files don't have formulas accessible
|
||||
}
|
||||
for expr in expressions_list
|
||||
}
|
||||
|
||||
def update_expression(self, name: str, new_value: float) -> bool:
|
||||
"""
|
||||
Update a single expression value.
|
||||
|
||||
Reference in New Issue
Block a user