{ "meta": { "version": "2.0", "created": "2026-01-17T15:35:12.044509Z", "modified": "2026-01-17T15:35:12.044509Z", "created_by": "migration", "modified_by": "migration", "study_name": "bracket_stiffness_optimization_v3", "description": "Maximize bracket stiffness while minimizing mass (constraint: mass ≤ 0.2 kg)", "tags": [] }, "model": { "sim": { "path": "1_setup/model/Bracket_sim1.sim", "solver": "NX_Nastran", "solution_type": "SOL101" }, "nx_part": { "path": "1_setup/model/Bracket.prt" }, "fem": { "path": "1_setup/model/Bracket_fem1.fem" } }, "design_variables": [ { "id": "dv_001", "name": "support_angle", "expression_name": "support_angle", "type": "continuous", "bounds": { "min": 20.0, "max": 70.0 }, "baseline": 60.0, "units": "degrees", "enabled": true, "description": "Angle of support arm relative to base", "canvas_position": { "x": 50, "y": 100 } }, { "id": "dv_002", "name": "tip_thickness", "expression_name": "tip_thickness", "type": "continuous", "bounds": { "min": 30.0, "max": 60.0 }, "baseline": 30.0, "units": "mm", "enabled": true, "description": "Thickness of bracket tip where load is applied", "canvas_position": { "x": 50, "y": 180 } } ], "extractors": [ { "id": "ext_001", "name": "BracketStiffnessExtractor Extractor", "type": "displacement", "builtin": true, "config": { "result_type": "z", "metric": "max_abs" }, "outputs": [ { "name": "stiffness", "metric": "max_abs" }, { "name": "mass", "metric": "max_abs" } ], "canvas_position": { "x": 740, "y": 100 } }, { "id": "ext_002", "name": "Mass Extractor", "type": "mass", "builtin": true, "outputs": [ { "name": "mass_kg", "metric": "total" } ], "canvas_position": { "x": 740, "y": 250 } } ], "objectives": [ { "id": "obj_001", "name": "Structural stiffness (N/mm) calculated as Force/Displacement", "direction": "maximize", "weight": 1.0, "source": { "extractor_id": "ext_001", "output_name": "stiffness" }, "target": null, "units": "", "canvas_position": { "x": 1020, "y": 100 } }, { "id": "obj_002", "name": "Total mass (kg) - secondary objective with hard constraint", "direction": "minimize", "weight": 0.1, "source": { "extractor_id": "ext_001", "output_name": "mass" }, "target": null, "units": "", "canvas_position": { "x": 1020, "y": 200 } } ], "constraints": [ { "id": "con_001", "name": "Maximum allowable mass: 200 grams", "type": "hard", "operator": "<", "threshold": 0.2, "source": { "extractor_id": "ext_002", "output_name": "mass_kg" }, "penalty_config": { "method": "quadratic", "weight": 1000.0 }, "canvas_position": { "x": 1020, "y": 400 } } ], "optimization": { "algorithm": { "type": "NSGA-II", "config": { "population_size": 50, "seed": 42 } }, "budget": { "max_trials": 50 }, "canvas_position": { "x": 1300, "y": 150 } }, "canvas": { "edges": [ { "source": "dv_001", "target": "model" }, { "source": "dv_002", "target": "model" }, { "source": "model", "target": "solver" }, { "source": "solver", "target": "ext_001" }, { "source": "solver", "target": "ext_002" }, { "source": "ext_001", "target": "obj_001" }, { "source": "ext_001", "target": "obj_002" }, { "source": "ext_002", "target": "con_001" }, { "source": "obj_001", "target": "optimization" }, { "source": "obj_002", "target": "optimization" }, { "source": "con_001", "target": "optimization" } ], "layout_version": "2.0" } }