feat(config): Add AtomizerSpec v2.0 schema and migrate all studies

Added JSON Schema:
- optimization_engine/schemas/atomizer_spec_v2.json

Migrated 28 studies to AtomizerSpec v2.0 format:
- Drone_Gimbal studies (1)
- M1_Mirror studies (21)
- M2_Mirror studies (2)
- SheetMetal_Bracket studies (4)

Each atomizer_spec.json is the unified configuration containing:
- Design variables with bounds and expressions
- Extractors (standard and custom)
- Objectives and constraints
- Optimization algorithm settings
- Canvas layout information
This commit is contained in:
2026-01-20 13:11:23 -05:00
parent f067497e08
commit cb6b130908
31 changed files with 12281 additions and 0 deletions

View File

@@ -0,0 +1,461 @@
{
"meta": {
"version": "2.0",
"created": "2026-01-17T15:35:12.035839Z",
"modified": "2026-01-17T15:35:12.035839Z",
"created_by": "migration",
"modified_by": "migration",
"study_name": "m1_mirror_surrogate_turbo",
"description": "GNN surrogate turbo optimization trained on ~1000 FEA trials from V6-V9 (re-extracted) + V11-V12. Iterative refinement with 5 FEA validations per turbo cycle.",
"tags": [
"mirror",
"zernike",
"opd"
]
},
"model": {
"sim": {
"path": "ASSY_M1_assyfem1_sim1.sim",
"solver": "nastran"
},
"nx_settings": {
"nx_install_path": "C:\\Program Files\\Siemens\\DesigncenterNX2512",
"simulation_timeout_s": 600
}
},
"design_variables": [
{
"id": "dv_001",
"name": "whiffle_min",
"expression_name": "whiffle_min",
"type": "continuous",
"bounds": {
"min": 30.0,
"max": 72.0
},
"baseline": 61.9189,
"units": "mm",
"enabled": true,
"description": "Inner whiffle tree contact radius",
"canvas_position": {
"x": 50,
"y": 100
}
},
{
"id": "dv_002",
"name": "whiffle_outer_to_vertical",
"expression_name": "whiffle_outer_to_vertical",
"type": "continuous",
"bounds": {
"min": 70.0,
"max": 85.0
},
"baseline": 81.7479,
"units": "mm",
"enabled": true,
"description": "Outer whiffle arm length",
"canvas_position": {
"x": 50,
"y": 180
}
},
{
"id": "dv_003",
"name": "whiffle_triangle_closeness",
"expression_name": "whiffle_triangle_closeness",
"type": "continuous",
"bounds": {
"min": 65.0,
"max": 120.0
},
"baseline": 65.5418,
"units": "mm",
"enabled": true,
"description": "Whiffle triangle geometry",
"canvas_position": {
"x": 50,
"y": 260
}
},
{
"id": "dv_004",
"name": "blank_backface_angle",
"expression_name": "blank_backface_angle",
"type": "continuous",
"bounds": {
"min": 4.2,
"max": 4.5
},
"baseline": 4.4158,
"units": "degrees",
"enabled": true,
"description": "Back face taper angle (affects mass)",
"canvas_position": {
"x": 50,
"y": 340
}
},
{
"id": "dv_005",
"name": "lateral_inner_angle",
"expression_name": "lateral_inner_angle",
"type": "continuous",
"bounds": {
"min": 25.0,
"max": 30.0
},
"baseline": 29.9005,
"units": "degrees",
"enabled": true,
"description": "Angle of inner lateral support constraint",
"canvas_position": {
"x": 50,
"y": 420
}
},
{
"id": "dv_006",
"name": "lateral_outer_angle",
"expression_name": "lateral_outer_angle",
"type": "continuous",
"bounds": {
"min": 11.0,
"max": 17.0
},
"baseline": 11.759,
"units": "degrees",
"enabled": true,
"description": "Angle of outer lateral support constraint",
"canvas_position": {
"x": 50,
"y": 500
}
},
{
"id": "dv_007",
"name": "lateral_outer_pivot",
"expression_name": "lateral_outer_pivot",
"type": "continuous",
"bounds": {
"min": 7.0,
"max": 12.0
},
"baseline": 11.1336,
"units": "degrees",
"enabled": true,
"description": "Pivot position for outer lateral",
"canvas_position": {
"x": 50,
"y": 580
}
},
{
"id": "dv_008",
"name": "lateral_inner_pivot",
"expression_name": "lateral_inner_pivot",
"type": "continuous",
"bounds": {
"min": 5.0,
"max": 12.0
},
"baseline": 6.5186,
"units": "degrees",
"enabled": true,
"description": "Pivot position for inner lateral",
"canvas_position": {
"x": 50,
"y": 660
}
},
{
"id": "dv_009",
"name": "lateral_middle_pivot",
"expression_name": "lateral_middle_pivot",
"type": "continuous",
"bounds": {
"min": 15.0,
"max": 27.0
},
"baseline": 22.3907,
"units": "degrees",
"enabled": true,
"description": "Pivot position for middle lateral",
"canvas_position": {
"x": 50,
"y": 740
}
},
{
"id": "dv_010",
"name": "lateral_closeness",
"expression_name": "lateral_closeness",
"type": "continuous",
"bounds": {
"min": 7.0,
"max": 12.0
},
"baseline": 8.685,
"units": "degrees",
"enabled": true,
"description": "Closeness factor for lateral supports",
"canvas_position": {
"x": 50,
"y": 820
}
}
],
"extractors": [
{
"id": "ext_001",
"name": "Zernike WFE Extractor",
"type": "zernike_opd",
"builtin": true,
"config": {
"inner_radius_mm": 0,
"outer_radius_mm": 500.0,
"n_modes": 50,
"filter_low_orders": 4,
"displacement_unit": "mm",
"reference_subcase": 2
},
"outputs": [
{
"name": "rel_filtered_rms_40_vs_20",
"metric": "filtered_rms_nm"
},
{
"name": "rel_filtered_rms_60_vs_20",
"metric": "filtered_rms_nm"
},
{
"name": "mfg_90_optician_workload",
"metric": "filtered_rms_nm"
},
{
"name": "mass_kg",
"metric": "filtered_rms_nm"
}
],
"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": "Filtered RMS WFE at 40 deg relative to 20 deg reference (ZernikeOPD)",
"direction": "minimize",
"weight": 5.0,
"source": {
"extractor_id": "ext_001",
"output_name": "rel_filtered_rms_40_vs_20"
},
"target": 4.0,
"units": "nm",
"canvas_position": {
"x": 1020,
"y": 100
}
},
{
"id": "obj_002",
"name": "Filtered RMS WFE at 60 deg relative to 20 deg reference (ZernikeOPD)",
"direction": "minimize",
"weight": 5.0,
"source": {
"extractor_id": "ext_001",
"output_name": "rel_filtered_rms_60_vs_20"
},
"target": 10.0,
"units": "nm",
"canvas_position": {
"x": 1020,
"y": 200
}
},
{
"id": "obj_003",
"name": "Manufacturing deformation at 90 deg polishing (J1-J3 filtered RMS, ZernikeOPD)",
"direction": "minimize",
"weight": 3.0,
"source": {
"extractor_id": "ext_001",
"output_name": "mfg_90_optician_workload"
},
"target": 20.0,
"units": "nm",
"canvas_position": {
"x": 1020,
"y": 300
}
},
{
"id": "obj_004",
"name": "Total mass of M1_Blank part",
"direction": "minimize",
"weight": 1.0,
"source": {
"extractor_id": "ext_001",
"output_name": "mass_kg"
},
"target": null,
"units": "kg",
"canvas_position": {
"x": 1020,
"y": 400
}
}
],
"constraints": [
{
"id": "con_001",
"name": "Maximum blank mass constraint: must be <= 105 kg",
"type": "hard",
"operator": "<=",
"threshold": 105.0,
"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": "TPE",
"config": {
"n_startup_trials": 10
}
},
"budget": {
"max_trials": 100
},
"canvas_position": {
"x": 1300,
"y": 150
}
},
"canvas": {
"edges": [
{
"source": "dv_001",
"target": "model"
},
{
"source": "dv_002",
"target": "model"
},
{
"source": "dv_003",
"target": "model"
},
{
"source": "dv_004",
"target": "model"
},
{
"source": "dv_005",
"target": "model"
},
{
"source": "dv_006",
"target": "model"
},
{
"source": "dv_007",
"target": "model"
},
{
"source": "dv_008",
"target": "model"
},
{
"source": "dv_009",
"target": "model"
},
{
"source": "dv_010",
"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_001",
"target": "obj_003"
},
{
"source": "ext_001",
"target": "obj_004"
},
{
"source": "ext_002",
"target": "con_001"
},
{
"source": "obj_001",
"target": "optimization"
},
{
"source": "obj_002",
"target": "optimization"
},
{
"source": "obj_003",
"target": "optimization"
},
{
"source": "obj_004",
"target": "optimization"
},
{
"source": "con_001",
"target": "optimization"
}
],
"layout_version": "2.0"
}
}