225 lines
4.5 KiB
JSON
225 lines
4.5 KiB
JSON
|
|
{
|
||
|
|
"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"
|
||
|
|
}
|
||
|
|
}
|