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>
Bracket Stress Minimization Study
Overview
This study optimizes a structural bracket to minimize maximum von Mises stress while maintaining displacement constraints.
Objective
Minimize maximum von Mises stress in the bracket under applied loading conditions.
Design Variables
-
tip_thickness: 15.0 - 25.0 mm
- Controls the thickness of the bracket tip
- Directly affects stress distribution and structural rigidity
-
support_angle: 20.0 - 40.0 degrees
- Controls the angle of the support structure
- Affects load path and stress concentration
Constraints
- Maximum displacement ≤ 1.0 mm
- Ensures the bracket maintains acceptable deformation under load
- Prevents excessive deflection that could affect functionality
Model Information
All FEA files are located in model/:
- Part: Bracket.prt
- Simulation: Bracket_sim1.sim
- FEM: Bracket_fem1.fem
Optimization Settings
- Sampler: TPE (Tree-structured Parzen Estimator)
- Total trials: 50
- Startup trials: 20 (random sampling for initial exploration)
- TPE candidates: 24
- Multivariate: Enabled
Running the Optimization
From the project root:
python run_5trial_test.py # Quick 5-trial test
Or for the full optimization:
from pathlib import Path
from optimization_engine.runner import OptimizationRunner
config_path = Path("studies/bracket_stress_minimization/optimization_config_stress_displacement.json")
runner = OptimizationRunner(
config_path=config_path,
model_updater=bracket_model_updater,
simulation_runner=bracket_simulation_runner,
result_extractors={...}
)
study = runner.run(study_name="bracket_study", n_trials=50)
Results
Results are stored in optimization_results/:
- trial_logs/: Detailed logs for each trial iteration
- history.json: Complete trial-by-trial results
- history.csv: Results in CSV format for analysis
- optimization_summary.json: Best parameters and final results
- study_*.db: Optuna database for resuming optimizations
Notes
- Uses NX Simcenter 2412 for FEA simulation
- Journal-based solver execution for automation
- Results extracted from OP2 files using pyNastran
- Stress values in MPa, displacement in mm
Analysis
Post-optimization analysis plots and reports will be stored in analysis/.