feat: Add MLP surrogate with Turbo Mode for 100x faster optimization
Neural Acceleration (MLP Surrogate): - Add run_nn_optimization.py with hybrid FEA/NN workflow - MLP architecture: 4-layer (64->128->128->64) with BatchNorm/Dropout - Three workflow modes: - --all: Sequential export->train->optimize->validate - --hybrid-loop: Iterative Train->NN->Validate->Retrain cycle - --turbo: Aggressive single-best validation (RECOMMENDED) - Turbo mode: 5000 NN trials + 50 FEA validations in ~12 minutes - Separate nn_study.db to avoid overloading dashboard Performance Results (bracket_pareto_3obj study): - NN prediction errors: mass 1-5%, stress 1-4%, stiffness 5-15% - Found minimum mass designs at boundary (angle~30deg, thick~30mm) - 100x speedup vs pure FEA exploration Protocol Operating System: - Add .claude/skills/ with Bootstrap, Cheatsheet, Context Loader - Add docs/protocols/ with operations (OP_01-06) and system (SYS_10-14) - Update SYS_14_NEURAL_ACCELERATION.md with MLP Turbo Mode docs NX Automation: - Add optimization_engine/hooks/ for NX CAD/CAE automation - Add study_wizard.py for guided study creation - Fix FEM mesh update: load idealized part before UpdateFemodel() New Study: - bracket_pareto_3obj: 3-objective Pareto (mass, stress, stiffness) - 167 FEA trials + 5000 NN trials completed - Demonstrates full hybrid workflow 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
BIN
studies/bracket_pareto_3obj/1_setup/model/Bracket.prt
Normal file
BIN
studies/bracket_pareto_3obj/1_setup/model/Bracket.prt
Normal file
Binary file not shown.
BIN
studies/bracket_pareto_3obj/1_setup/model/Bracket_fem1.fem
Normal file
BIN
studies/bracket_pareto_3obj/1_setup/model/Bracket_fem1.fem
Normal file
Binary file not shown.
BIN
studies/bracket_pareto_3obj/1_setup/model/Bracket_fem1_i.prt
Normal file
BIN
studies/bracket_pareto_3obj/1_setup/model/Bracket_fem1_i.prt
Normal file
Binary file not shown.
BIN
studies/bracket_pareto_3obj/1_setup/model/Bracket_sim1.sim
Normal file
BIN
studies/bracket_pareto_3obj/1_setup/model/Bracket_sim1.sim
Normal file
Binary file not shown.
146
studies/bracket_pareto_3obj/1_setup/optimization_config.json
Normal file
146
studies/bracket_pareto_3obj/1_setup/optimization_config.json
Normal file
@@ -0,0 +1,146 @@
|
||||
{
|
||||
"study_name": "bracket_pareto_3obj",
|
||||
"description": "Three-objective Pareto optimization: minimize mass, minimize stress, maximize stiffness",
|
||||
"engineering_context": "Generated by StudyWizard on 2025-12-06 14:43",
|
||||
"template_info": {
|
||||
"category": "structural",
|
||||
"analysis_type": "static",
|
||||
"typical_applications": [],
|
||||
"neural_enabled": false
|
||||
},
|
||||
"optimization_settings": {
|
||||
"protocol": "protocol_11_multi",
|
||||
"n_trials": 100,
|
||||
"sampler": "NSGAIISampler",
|
||||
"pruner": null,
|
||||
"timeout_per_trial": 400
|
||||
},
|
||||
"design_variables": [
|
||||
{
|
||||
"parameter": "support_angle",
|
||||
"bounds": [
|
||||
20,
|
||||
70
|
||||
],
|
||||
"description": "Angle of support arm relative to base",
|
||||
"units": "degrees"
|
||||
},
|
||||
{
|
||||
"parameter": "tip_thickness",
|
||||
"bounds": [
|
||||
30,
|
||||
60
|
||||
],
|
||||
"description": "Thickness at bracket tip where load is applied",
|
||||
"units": "mm"
|
||||
}
|
||||
],
|
||||
"objectives": [
|
||||
{
|
||||
"name": "mass",
|
||||
"goal": "minimize",
|
||||
"weight": 1.0,
|
||||
"description": "Total bracket mass (kg)",
|
||||
"extraction": {
|
||||
"action": "extract_mass_from_bdf",
|
||||
"domain": "result_extraction",
|
||||
"params": {}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "stress",
|
||||
"goal": "minimize",
|
||||
"weight": 1.0,
|
||||
"description": "Maximum von Mises stress (MPa)",
|
||||
"extraction": {
|
||||
"action": "extract_solid_stress",
|
||||
"domain": "result_extraction",
|
||||
"params": {
|
||||
"metric": "max_von_mises"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "stiffness",
|
||||
"goal": "maximize",
|
||||
"weight": 1.0,
|
||||
"description": "Structural stiffness = Force/Displacement (N/mm)",
|
||||
"extraction": {
|
||||
"action": "extract_displacement",
|
||||
"domain": "result_extraction",
|
||||
"params": {
|
||||
"invert_for_stiffness": true
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"constraints": [
|
||||
{
|
||||
"name": "stress_limit",
|
||||
"type": "less_than",
|
||||
"threshold": 300,
|
||||
"description": "Keep stress below 300 MPa for safety margin",
|
||||
"extraction": {
|
||||
"action": "extract_solid_stress",
|
||||
"domain": "result_extraction",
|
||||
"params": {}
|
||||
}
|
||||
}
|
||||
],
|
||||
"simulation": {
|
||||
"model_file": "Bracket.prt",
|
||||
"sim_file": "Bracket_sim1.sim",
|
||||
"fem_file": "Bracket_fem1.fem",
|
||||
"solver": "nastran",
|
||||
"analysis_types": [
|
||||
"static"
|
||||
],
|
||||
"solution_name": "Solution 1",
|
||||
"dat_file": "bracket_sim1-solution_1.dat",
|
||||
"op2_file": "bracket_sim1-solution_1.op2"
|
||||
},
|
||||
"result_extraction": {
|
||||
"mass": {
|
||||
"method": "extract_mass_from_bdf",
|
||||
"extractor_module": "optimization_engine.extractors.bdf_mass_extractor",
|
||||
"function": "extract_mass_from_bdf",
|
||||
"output_unit": "kg"
|
||||
},
|
||||
"stress": {
|
||||
"method": "extract_solid_stress",
|
||||
"extractor_module": "optimization_engine.extractors.extract_von_mises_stress",
|
||||
"function": "extract_solid_stress",
|
||||
"output_unit": "MPa"
|
||||
},
|
||||
"stiffness": {
|
||||
"method": "extract_displacement",
|
||||
"extractor_module": "optimization_engine.extractors.extract_displacement",
|
||||
"function": "extract_displacement",
|
||||
"output_unit": "mm"
|
||||
},
|
||||
"stress_limit": {
|
||||
"method": "extract_solid_stress",
|
||||
"extractor_module": "optimization_engine.extractors.extract_von_mises_stress",
|
||||
"function": "extract_solid_stress",
|
||||
"output_unit": "MPa"
|
||||
}
|
||||
},
|
||||
"reporting": {
|
||||
"generate_plots": true,
|
||||
"save_incremental": true,
|
||||
"llm_summary": true,
|
||||
"generate_pareto_front": true
|
||||
},
|
||||
"neural_acceleration": {
|
||||
"enabled": true,
|
||||
"min_training_points": 50,
|
||||
"auto_train": true,
|
||||
"epochs": 300,
|
||||
"validation_split": 0.2,
|
||||
"nn_trials": 1000,
|
||||
"validate_top_n": 10,
|
||||
"model_file": "surrogate_best.pt",
|
||||
"separate_nn_database": true,
|
||||
"description": "NN results stored in nn_study.db to avoid overloading dashboard"
|
||||
}
|
||||
}
|
||||
5
studies/bracket_pareto_3obj/1_setup/workflow_config.json
Normal file
5
studies/bracket_pareto_3obj/1_setup/workflow_config.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"workflow_id": "bracket_pareto_3obj_workflow",
|
||||
"description": "Workflow for bracket_pareto_3obj",
|
||||
"steps": []
|
||||
}
|
||||
Reference in New Issue
Block a user