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:
462
studies/M1_Mirror/m1_mirror_turbo_V2/atomizer_spec.json
Normal file
462
studies/M1_Mirror/m1_mirror_turbo_V2/atomizer_spec.json
Normal file
@@ -0,0 +1,462 @@
|
||||
{
|
||||
"meta": {
|
||||
"version": "2.0",
|
||||
"created": "2026-01-17T15:35:12.037953Z",
|
||||
"modified": "2026-01-17T15:35:12.037953Z",
|
||||
"created_by": "migration",
|
||||
"modified_by": "migration",
|
||||
"study_name": "m1_mirror_turbo_v2",
|
||||
"description": "Turbo V2: Higher weight on 40-20 WFE (6.0 vs 5.0), mass objective disabled (weight 0). Uses pre-trained surrogate from V1 (45 FEA samples).",
|
||||
"tags": [
|
||||
"Surrogate",
|
||||
"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": 58.8,
|
||||
"units": "mm",
|
||||
"enabled": true,
|
||||
"description": "Inner whiffle tree contact radius (V1 best value)",
|
||||
"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": 82.8,
|
||||
"units": "mm",
|
||||
"enabled": true,
|
||||
"description": "Outer whiffle arm length (V1 best value)",
|
||||
"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": 66.1,
|
||||
"units": "mm",
|
||||
"enabled": true,
|
||||
"description": "Whiffle triangle geometry (V1 best value)",
|
||||
"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.41,
|
||||
"units": "degrees",
|
||||
"enabled": true,
|
||||
"description": "Back face taper angle (V1 best value)",
|
||||
"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": 30.0,
|
||||
"units": "degrees",
|
||||
"enabled": true,
|
||||
"description": "Angle of inner lateral support constraint (V1 best value)",
|
||||
"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.7,
|
||||
"units": "degrees",
|
||||
"enabled": true,
|
||||
"description": "Angle of outer lateral support constraint (V1 best value)",
|
||||
"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.7,
|
||||
"units": "degrees",
|
||||
"enabled": true,
|
||||
"description": "Pivot position for outer lateral (V1 best value)",
|
||||
"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": 7.7,
|
||||
"units": "degrees",
|
||||
"enabled": true,
|
||||
"description": "Pivot position for inner lateral (V1 best value)",
|
||||
"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.5,
|
||||
"units": "degrees",
|
||||
"enabled": true,
|
||||
"description": "Pivot position for middle lateral (V1 best value)",
|
||||
"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": 9.1,
|
||||
"units": "degrees",
|
||||
"enabled": true,
|
||||
"description": "Closeness factor for lateral supports (V1 best value)",
|
||||
"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": 6.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": 0.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": "CMA-ES",
|
||||
"config": {
|
||||
"sigma0": 0.3
|
||||
}
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user