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:
800
optimization_engine/schemas/atomizer_spec_v2.json
Normal file
800
optimization_engine/schemas/atomizer_spec_v2.json
Normal file
@@ -0,0 +1,800 @@
|
|||||||
|
{
|
||||||
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||||
|
"$id": "https://atomizer.io/schemas/atomizer_spec_v2.json",
|
||||||
|
"title": "AtomizerSpec v2.0",
|
||||||
|
"description": "Unified configuration schema for Atomizer optimization studies. This is the single source of truth used by Canvas, Backend, Claude, and the Optimization Engine.",
|
||||||
|
"type": "object",
|
||||||
|
"required": ["meta", "model", "design_variables", "extractors", "objectives", "optimization"],
|
||||||
|
|
||||||
|
"properties": {
|
||||||
|
"meta": {
|
||||||
|
"$ref": "#/definitions/meta"
|
||||||
|
},
|
||||||
|
"model": {
|
||||||
|
"$ref": "#/definitions/model"
|
||||||
|
},
|
||||||
|
"design_variables": {
|
||||||
|
"type": "array",
|
||||||
|
"description": "Design variables (NX expressions) to optimize",
|
||||||
|
"minItems": 1,
|
||||||
|
"maxItems": 50,
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/design_variable"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"extractors": {
|
||||||
|
"type": "array",
|
||||||
|
"description": "Physics extractors that compute outputs from FEA results",
|
||||||
|
"minItems": 1,
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/extractor"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"objectives": {
|
||||||
|
"type": "array",
|
||||||
|
"description": "Optimization objectives (minimize/maximize)",
|
||||||
|
"minItems": 1,
|
||||||
|
"maxItems": 5,
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/objective"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"constraints": {
|
||||||
|
"type": "array",
|
||||||
|
"description": "Hard and soft constraints",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/constraint"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"optimization": {
|
||||||
|
"$ref": "#/definitions/optimization"
|
||||||
|
},
|
||||||
|
"workflow": {
|
||||||
|
"$ref": "#/definitions/workflow"
|
||||||
|
},
|
||||||
|
"reporting": {
|
||||||
|
"$ref": "#/definitions/reporting"
|
||||||
|
},
|
||||||
|
"canvas": {
|
||||||
|
"$ref": "#/definitions/canvas"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"definitions": {
|
||||||
|
"meta": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Metadata about the spec",
|
||||||
|
"required": ["version", "study_name"],
|
||||||
|
"properties": {
|
||||||
|
"version": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Schema version",
|
||||||
|
"pattern": "^2\\.\\d+$",
|
||||||
|
"examples": ["2.0", "2.1"]
|
||||||
|
},
|
||||||
|
"created": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time",
|
||||||
|
"description": "When the spec was created"
|
||||||
|
},
|
||||||
|
"modified": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time",
|
||||||
|
"description": "When the spec was last modified"
|
||||||
|
},
|
||||||
|
"created_by": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Who/what created the spec",
|
||||||
|
"enum": ["canvas", "claude", "api", "migration", "manual"]
|
||||||
|
},
|
||||||
|
"modified_by": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Who/what last modified the spec"
|
||||||
|
},
|
||||||
|
"study_name": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Unique study identifier (snake_case)",
|
||||||
|
"pattern": "^[a-z0-9_]+$",
|
||||||
|
"minLength": 3,
|
||||||
|
"maxLength": 100
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Human-readable description of the study",
|
||||||
|
"maxLength": 1000
|
||||||
|
},
|
||||||
|
"tags": {
|
||||||
|
"type": "array",
|
||||||
|
"description": "Tags for categorization",
|
||||||
|
"items": {
|
||||||
|
"type": "string",
|
||||||
|
"maxLength": 50
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"engineering_context": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Real-world engineering scenario"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"model": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "NX model files and configuration",
|
||||||
|
"required": ["sim"],
|
||||||
|
"properties": {
|
||||||
|
"nx_part": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "NX geometry part file",
|
||||||
|
"properties": {
|
||||||
|
"path": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Path to .prt file"
|
||||||
|
},
|
||||||
|
"hash": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "File hash for change detection"
|
||||||
|
},
|
||||||
|
"idealized_part": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Idealized part filename (_i.prt)"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fem": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "FEM mesh file",
|
||||||
|
"properties": {
|
||||||
|
"path": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Path to .fem file"
|
||||||
|
},
|
||||||
|
"element_count": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "Number of elements"
|
||||||
|
},
|
||||||
|
"node_count": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "Number of nodes"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sim": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Simulation file",
|
||||||
|
"required": ["path", "solver"],
|
||||||
|
"properties": {
|
||||||
|
"path": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Path to .sim file"
|
||||||
|
},
|
||||||
|
"solver": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Solver type",
|
||||||
|
"enum": ["nastran", "NX_Nastran", "abaqus"]
|
||||||
|
},
|
||||||
|
"solution_type": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Solution type (e.g., SOL101)",
|
||||||
|
"pattern": "^SOL\\d+$"
|
||||||
|
},
|
||||||
|
"subcases": {
|
||||||
|
"type": "array",
|
||||||
|
"description": "Defined subcases",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["static", "modal", "thermal", "buckling"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nx_settings": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "NX runtime settings",
|
||||||
|
"properties": {
|
||||||
|
"nx_install_path": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"simulation_timeout_s": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 60,
|
||||||
|
"maximum": 7200
|
||||||
|
},
|
||||||
|
"auto_start_nx": {
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"design_variable": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "A design variable to optimize",
|
||||||
|
"required": ["id", "name", "expression_name", "type", "bounds"],
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Unique identifier",
|
||||||
|
"pattern": "^dv_\\d{3}$"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Human-readable name"
|
||||||
|
},
|
||||||
|
"expression_name": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "NX expression name (must match model)",
|
||||||
|
"pattern": "^[a-zA-Z_][a-zA-Z0-9_]*$"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Variable type",
|
||||||
|
"enum": ["continuous", "integer", "categorical"]
|
||||||
|
},
|
||||||
|
"bounds": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Value bounds",
|
||||||
|
"required": ["min", "max"],
|
||||||
|
"properties": {
|
||||||
|
"min": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"max": {
|
||||||
|
"type": "number"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"baseline": {
|
||||||
|
"type": "number",
|
||||||
|
"description": "Current/initial value"
|
||||||
|
},
|
||||||
|
"units": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Physical units (mm, deg, etc.)"
|
||||||
|
},
|
||||||
|
"step": {
|
||||||
|
"type": "number",
|
||||||
|
"description": "Step size for integer/discrete"
|
||||||
|
},
|
||||||
|
"enabled": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Whether to include in optimization",
|
||||||
|
"default": true
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"canvas_position": {
|
||||||
|
"$ref": "#/definitions/position"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"extractor": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Physics extractor that computes outputs from FEA",
|
||||||
|
"required": ["id", "name", "type", "outputs"],
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Unique identifier",
|
||||||
|
"pattern": "^ext_\\d{3}$"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Human-readable name"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Extractor type",
|
||||||
|
"enum": [
|
||||||
|
"displacement",
|
||||||
|
"frequency",
|
||||||
|
"stress",
|
||||||
|
"mass",
|
||||||
|
"mass_expression",
|
||||||
|
"zernike_opd",
|
||||||
|
"zernike_csv",
|
||||||
|
"temperature",
|
||||||
|
"custom_function"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"builtin": {
|
||||||
|
"type": "boolean",
|
||||||
|
"description": "Whether this is a built-in extractor",
|
||||||
|
"default": true
|
||||||
|
},
|
||||||
|
"config": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Type-specific configuration",
|
||||||
|
"properties": {
|
||||||
|
"inner_radius_mm": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"outer_radius_mm": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"n_modes": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"filter_low_orders": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"displacement_unit": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"reference_subcase": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"expression_name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"mode_number": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"element_type": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"result_type": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metric": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"function": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Custom function definition (for custom_function type)",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Function name"
|
||||||
|
},
|
||||||
|
"module": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Python module path"
|
||||||
|
},
|
||||||
|
"signature": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Function signature"
|
||||||
|
},
|
||||||
|
"source_code": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Python source code"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"outputs": {
|
||||||
|
"type": "array",
|
||||||
|
"description": "Output values this extractor produces",
|
||||||
|
"minItems": 1,
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["name"],
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Output name (used by objectives/constraints)"
|
||||||
|
},
|
||||||
|
"metric": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Specific metric (max, total, rms, etc.)"
|
||||||
|
},
|
||||||
|
"subcase": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "Subcase ID for this output"
|
||||||
|
},
|
||||||
|
"units": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"canvas_position": {
|
||||||
|
"$ref": "#/definitions/position"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"objective": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Optimization objective",
|
||||||
|
"required": ["id", "name", "direction", "source"],
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Unique identifier",
|
||||||
|
"pattern": "^obj_\\d{3}$"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Human-readable name"
|
||||||
|
},
|
||||||
|
"direction": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Optimization direction",
|
||||||
|
"enum": ["minimize", "maximize"]
|
||||||
|
},
|
||||||
|
"weight": {
|
||||||
|
"type": "number",
|
||||||
|
"description": "Weight for weighted sum (multi-objective)",
|
||||||
|
"minimum": 0,
|
||||||
|
"default": 1.0
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Where the value comes from",
|
||||||
|
"required": ["extractor_id", "output_name"],
|
||||||
|
"properties": {
|
||||||
|
"extractor_id": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Reference to extractor"
|
||||||
|
},
|
||||||
|
"output_name": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Which output from the extractor"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"target": {
|
||||||
|
"type": "number",
|
||||||
|
"description": "Target value (for goal programming)"
|
||||||
|
},
|
||||||
|
"units": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"canvas_position": {
|
||||||
|
"$ref": "#/definitions/position"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"constraint": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Hard or soft constraint",
|
||||||
|
"required": ["id", "name", "type", "operator", "threshold", "source"],
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Unique identifier",
|
||||||
|
"pattern": "^con_\\d{3}$"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Constraint type",
|
||||||
|
"enum": ["hard", "soft"]
|
||||||
|
},
|
||||||
|
"operator": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Comparison operator",
|
||||||
|
"enum": ["<=", ">=", "<", ">", "=="]
|
||||||
|
},
|
||||||
|
"threshold": {
|
||||||
|
"type": "number",
|
||||||
|
"description": "Constraint threshold value"
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Where the value comes from",
|
||||||
|
"required": ["extractor_id", "output_name"],
|
||||||
|
"properties": {
|
||||||
|
"extractor_id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"output_name": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"penalty_config": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Penalty method configuration",
|
||||||
|
"properties": {
|
||||||
|
"method": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["linear", "quadratic", "exponential"]
|
||||||
|
},
|
||||||
|
"weight": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"margin": {
|
||||||
|
"type": "number",
|
||||||
|
"description": "Soft margin before penalty kicks in"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"canvas_position": {
|
||||||
|
"$ref": "#/definitions/position"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"optimization": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Optimization algorithm configuration",
|
||||||
|
"required": ["algorithm", "budget"],
|
||||||
|
"properties": {
|
||||||
|
"algorithm": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["type"],
|
||||||
|
"properties": {
|
||||||
|
"type": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "Algorithm type",
|
||||||
|
"enum": ["TPE", "CMA-ES", "NSGA-II", "RandomSearch", "SAT_v3", "GP-BO"]
|
||||||
|
},
|
||||||
|
"config": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Algorithm-specific settings",
|
||||||
|
"properties": {
|
||||||
|
"population_size": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"n_generations": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"mutation_prob": {
|
||||||
|
"type": ["number", "null"]
|
||||||
|
},
|
||||||
|
"crossover_prob": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"seed": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"n_startup_trials": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"sigma0": {
|
||||||
|
"type": "number"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"budget": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Computational budget",
|
||||||
|
"properties": {
|
||||||
|
"max_trials": {
|
||||||
|
"type": "integer",
|
||||||
|
"minimum": 1,
|
||||||
|
"maximum": 10000
|
||||||
|
},
|
||||||
|
"max_time_hours": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"convergence_patience": {
|
||||||
|
"type": "integer",
|
||||||
|
"description": "Stop if no improvement for N trials"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"surrogate": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Neural surrogate configuration",
|
||||||
|
"properties": {
|
||||||
|
"enabled": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "string",
|
||||||
|
"enum": ["MLP", "GNN", "ensemble"]
|
||||||
|
},
|
||||||
|
"config": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"n_models": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"architecture": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"train_every_n_trials": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"min_training_samples": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"acquisition_candidates": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"fea_validations_per_round": {
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"canvas_position": {
|
||||||
|
"$ref": "#/definitions/position"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"workflow": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Multi-stage optimization workflow",
|
||||||
|
"properties": {
|
||||||
|
"stages": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"algorithm": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"trials": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"purpose": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"transitions": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"from": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"to": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"condition": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"reporting": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Reporting configuration",
|
||||||
|
"properties": {
|
||||||
|
"auto_report": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"report_triggers": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"insights": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"type": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"for_trials": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"config": {
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"canvas": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Canvas UI state (persisted for reconstruction)",
|
||||||
|
"properties": {
|
||||||
|
"layout_version": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"viewport": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"x": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"y": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"zoom": {
|
||||||
|
"type": "number"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"edges": {
|
||||||
|
"type": "array",
|
||||||
|
"description": "Connections between nodes",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"required": ["source", "target"],
|
||||||
|
"properties": {
|
||||||
|
"source": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"target": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"sourceHandle": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"targetHandle": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"groups": {
|
||||||
|
"type": "array",
|
||||||
|
"description": "Node groupings for organization",
|
||||||
|
"items": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"node_ids": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
"position": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "Canvas position",
|
||||||
|
"properties": {
|
||||||
|
"x": {
|
||||||
|
"type": "number"
|
||||||
|
},
|
||||||
|
"y": {
|
||||||
|
"type": "number"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,287 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.010333Z",
|
||||||
|
"modified": "2026-01-17T15:35:12.010333Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "migration",
|
||||||
|
"study_name": "drone_gimbal_arm_optimization",
|
||||||
|
"description": "Drone Camera Gimbal Support Arm - Multi-Objective Lightweight Design",
|
||||||
|
"tags": []
|
||||||
|
},
|
||||||
|
"model": {
|
||||||
|
"sim": {
|
||||||
|
"path": "1_setup\\model\\Beam_sim1.sim",
|
||||||
|
"solver": "nastran"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"design_variables": [
|
||||||
|
{
|
||||||
|
"id": "dv_001",
|
||||||
|
"name": "param_1",
|
||||||
|
"expression_name": "beam_half_core_thickness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 5,
|
||||||
|
"max": 10
|
||||||
|
},
|
||||||
|
"baseline": null,
|
||||||
|
"units": "",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Half thickness of beam core (mm) - affects weight and stiffness",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_002",
|
||||||
|
"name": "param_2",
|
||||||
|
"expression_name": "beam_face_thickness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 1,
|
||||||
|
"max": 3
|
||||||
|
},
|
||||||
|
"baseline": null,
|
||||||
|
"units": "",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Thickness of beam face sheets (mm) - bending resistance",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 180
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_003",
|
||||||
|
"name": "param_3",
|
||||||
|
"expression_name": "holes_diameter",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 10,
|
||||||
|
"max": 50
|
||||||
|
},
|
||||||
|
"baseline": null,
|
||||||
|
"units": "",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Diameter of lightening holes (mm) - weight reduction",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 260
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_004",
|
||||||
|
"name": "param_4",
|
||||||
|
"expression_name": "hole_count",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 8,
|
||||||
|
"max": 14
|
||||||
|
},
|
||||||
|
"baseline": null,
|
||||||
|
"units": "",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Number of lightening holes - balance weight vs strength",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 340
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"extractors": [
|
||||||
|
{
|
||||||
|
"id": "ext_001",
|
||||||
|
"name": "Mass Extractor",
|
||||||
|
"type": "mass",
|
||||||
|
"builtin": true,
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "mass",
|
||||||
|
"metric": "total"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 740,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"objectives": [
|
||||||
|
{
|
||||||
|
"id": "obj_001",
|
||||||
|
"name": "Total mass (grams) - minimize for longer flight time",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mass"
|
||||||
|
},
|
||||||
|
"target": 4000,
|
||||||
|
"units": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "obj_002",
|
||||||
|
"name": "First natural frequency (Hz) - avoid rotor resonance",
|
||||||
|
"direction": "maximize",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "fundamental_frequency"
|
||||||
|
},
|
||||||
|
"target": 150,
|
||||||
|
"units": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 200
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"constraints": [
|
||||||
|
{
|
||||||
|
"id": "con_001",
|
||||||
|
"name": "Maximum tip displacement under 850g camera load < 1.5mm for image stabilization",
|
||||||
|
"type": "hard",
|
||||||
|
"operator": "<",
|
||||||
|
"threshold": 1.5,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mass"
|
||||||
|
},
|
||||||
|
"penalty_config": {
|
||||||
|
"method": "quadratic",
|
||||||
|
"weight": 1000.0
|
||||||
|
},
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 400
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "con_002",
|
||||||
|
"name": "Maximum von Mises stress < 120 MPa (Al 6061-T6, SF=2.3)",
|
||||||
|
"type": "hard",
|
||||||
|
"operator": "<",
|
||||||
|
"threshold": 120,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mass"
|
||||||
|
},
|
||||||
|
"penalty_config": {
|
||||||
|
"method": "quadratic",
|
||||||
|
"weight": 1000.0
|
||||||
|
},
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 500
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "con_003",
|
||||||
|
"name": "Natural frequency > 150 Hz to avoid rotor frequencies (80-120 Hz safety margin)",
|
||||||
|
"type": "hard",
|
||||||
|
"operator": ">",
|
||||||
|
"threshold": 150,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mass"
|
||||||
|
},
|
||||||
|
"penalty_config": {
|
||||||
|
"method": "quadratic",
|
||||||
|
"weight": 1000.0
|
||||||
|
},
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 600
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"optimization": {
|
||||||
|
"algorithm": {
|
||||||
|
"type": "TPE",
|
||||||
|
"config": {
|
||||||
|
"n_startup_trials": 10
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"budget": {
|
||||||
|
"max_trials": 30
|
||||||
|
},
|
||||||
|
"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": "model",
|
||||||
|
"target": "solver"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "solver",
|
||||||
|
"target": "ext_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_002"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "con_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "con_002"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "con_003"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_001",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_002",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "con_001",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "con_002",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "con_003",
|
||||||
|
"target": "optimization"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"layout_version": "2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
406
studies/M1_Mirror/m1_mirror_adaptive_V11/atomizer_spec.json
Normal file
406
studies/M1_Mirror/m1_mirror_adaptive_V11/atomizer_spec.json
Normal file
@@ -0,0 +1,406 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.012625Z",
|
||||||
|
"modified": "2026-01-17T15:35:12.012625Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "migration",
|
||||||
|
"study_name": "m1_mirror_adaptive_v11",
|
||||||
|
"description": "V11 - Adaptive surrogate optimization with real FEA validation. Cross-links V10 training data. NN/FEA trial differentiation for dashboard.",
|
||||||
|
"tags": [
|
||||||
|
"mirror",
|
||||||
|
"zernike"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"model": {
|
||||||
|
"sim": {
|
||||||
|
"path": "ASSY_M1_assyfem1_sim1.sim",
|
||||||
|
"solver": "nastran"
|
||||||
|
},
|
||||||
|
"nx_settings": {
|
||||||
|
"nx_install_path": "C:\\Program Files\\Siemens\\NX2506",
|
||||||
|
"simulation_timeout_s": 600
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"design_variables": [
|
||||||
|
{
|
||||||
|
"id": "dv_001",
|
||||||
|
"name": "lateral_inner_angle",
|
||||||
|
"expression_name": "lateral_inner_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 25.0,
|
||||||
|
"max": 28.5
|
||||||
|
},
|
||||||
|
"baseline": 26.79,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_002",
|
||||||
|
"name": "lateral_outer_angle",
|
||||||
|
"expression_name": "lateral_outer_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 13.0,
|
||||||
|
"max": 17.0
|
||||||
|
},
|
||||||
|
"baseline": 14.64,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 180
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_003",
|
||||||
|
"name": "lateral_outer_pivot",
|
||||||
|
"expression_name": "lateral_outer_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 9.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 10.4,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 260
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_004",
|
||||||
|
"name": "lateral_inner_pivot",
|
||||||
|
"expression_name": "lateral_inner_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 9.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 10.07,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 340
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_005",
|
||||||
|
"name": "lateral_middle_pivot",
|
||||||
|
"expression_name": "lateral_middle_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 18.0,
|
||||||
|
"max": 23.0
|
||||||
|
},
|
||||||
|
"baseline": 20.73,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 420
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_006",
|
||||||
|
"name": "lateral_closeness",
|
||||||
|
"expression_name": "lateral_closeness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 9.5,
|
||||||
|
"max": 12.5
|
||||||
|
},
|
||||||
|
"baseline": 11.02,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 500
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_007",
|
||||||
|
"name": "whiffle_min",
|
||||||
|
"expression_name": "whiffle_min",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 35.0,
|
||||||
|
"max": 55.0
|
||||||
|
},
|
||||||
|
"baseline": 40.55,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 580
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_008",
|
||||||
|
"name": "whiffle_outer_to_vertical",
|
||||||
|
"expression_name": "whiffle_outer_to_vertical",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 68.0,
|
||||||
|
"max": 80.0
|
||||||
|
},
|
||||||
|
"baseline": 75.67,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 660
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_009",
|
||||||
|
"name": "whiffle_triangle_closeness",
|
||||||
|
"expression_name": "whiffle_triangle_closeness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 50.0,
|
||||||
|
"max": 65.0
|
||||||
|
},
|
||||||
|
"baseline": 60.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 740
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_010",
|
||||||
|
"name": "blank_backface_angle",
|
||||||
|
"expression_name": "blank_backface_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 4,
|
||||||
|
"max": 5.0
|
||||||
|
},
|
||||||
|
"baseline": 4.23,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 820
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_011",
|
||||||
|
"name": "inner_circular_rib_dia",
|
||||||
|
"expression_name": "inner_circular_rib_dia",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 480.0,
|
||||||
|
"max": 620.0
|
||||||
|
},
|
||||||
|
"baseline": 534.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 900
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 740,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"objectives": [
|
||||||
|
{
|
||||||
|
"id": "obj_001",
|
||||||
|
"name": "Filtered RMS WFE at 40 deg relative to 20 deg reference (operational tracking)",
|
||||||
|
"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 (operational tracking)",
|
||||||
|
"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)",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mfg_90_optician_workload"
|
||||||
|
},
|
||||||
|
"target": 20.0,
|
||||||
|
"units": "nm",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 300
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"constraints": [],
|
||||||
|
"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": "dv_011",
|
||||||
|
"target": "model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "model",
|
||||||
|
"target": "solver"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "solver",
|
||||||
|
"target": "ext_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_002"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_003"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_001",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_002",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_003",
|
||||||
|
"target": "optimization"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"layout_version": "2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
454
studies/M1_Mirror/m1_mirror_adaptive_V12/atomizer_spec.json
Normal file
454
studies/M1_Mirror/m1_mirror_adaptive_V12/atomizer_spec.json
Normal file
@@ -0,0 +1,454 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.013676Z",
|
||||||
|
"modified": "2026-01-17T15:35:12.013676Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "migration",
|
||||||
|
"study_name": "m1_mirror_adaptive_v12",
|
||||||
|
"description": "V12 - Adaptive optimization with tuned hyperparameters, ensemble surrogate, and mass constraint (<99kg).",
|
||||||
|
"tags": [
|
||||||
|
"mirror",
|
||||||
|
"zernike"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"model": {
|
||||||
|
"sim": {
|
||||||
|
"path": "ASSY_M1_assyfem1_sim1.sim",
|
||||||
|
"solver": "nastran"
|
||||||
|
},
|
||||||
|
"nx_settings": {
|
||||||
|
"nx_install_path": "C:\\Program Files\\Siemens\\NX2506",
|
||||||
|
"simulation_timeout_s": 900
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"design_variables": [
|
||||||
|
{
|
||||||
|
"id": "dv_001",
|
||||||
|
"name": "lateral_inner_angle",
|
||||||
|
"expression_name": "lateral_inner_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 25.0,
|
||||||
|
"max": 28.5
|
||||||
|
},
|
||||||
|
"baseline": 26.79,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_002",
|
||||||
|
"name": "lateral_outer_angle",
|
||||||
|
"expression_name": "lateral_outer_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 13.0,
|
||||||
|
"max": 17.0
|
||||||
|
},
|
||||||
|
"baseline": 14.64,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 180
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_003",
|
||||||
|
"name": "lateral_outer_pivot",
|
||||||
|
"expression_name": "lateral_outer_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 9.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 10.4,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 260
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_004",
|
||||||
|
"name": "lateral_inner_pivot",
|
||||||
|
"expression_name": "lateral_inner_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 9.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 10.07,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 340
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_005",
|
||||||
|
"name": "lateral_middle_pivot",
|
||||||
|
"expression_name": "lateral_middle_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 18.0,
|
||||||
|
"max": 23.0
|
||||||
|
},
|
||||||
|
"baseline": 20.73,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 420
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_006",
|
||||||
|
"name": "lateral_closeness",
|
||||||
|
"expression_name": "lateral_closeness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 9.5,
|
||||||
|
"max": 12.5
|
||||||
|
},
|
||||||
|
"baseline": 11.02,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 500
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_007",
|
||||||
|
"name": "whiffle_min",
|
||||||
|
"expression_name": "whiffle_min",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 35.0,
|
||||||
|
"max": 55.0
|
||||||
|
},
|
||||||
|
"baseline": 40.55,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 580
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_008",
|
||||||
|
"name": "whiffle_outer_to_vertical",
|
||||||
|
"expression_name": "whiffle_outer_to_vertical",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 68.0,
|
||||||
|
"max": 80.0
|
||||||
|
},
|
||||||
|
"baseline": 75.67,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 660
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_009",
|
||||||
|
"name": "whiffle_triangle_closeness",
|
||||||
|
"expression_name": "whiffle_triangle_closeness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 50.0,
|
||||||
|
"max": 65.0
|
||||||
|
},
|
||||||
|
"baseline": 60.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 740
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_010",
|
||||||
|
"name": "blank_backface_angle",
|
||||||
|
"expression_name": "blank_backface_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 4,
|
||||||
|
"max": 5.0
|
||||||
|
},
|
||||||
|
"baseline": 4.23,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 820
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_011",
|
||||||
|
"name": "inner_circular_rib_dia",
|
||||||
|
"expression_name": "inner_circular_rib_dia",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 480.0,
|
||||||
|
"max": 620.0
|
||||||
|
},
|
||||||
|
"baseline": 534.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 900
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"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 (operational tracking)",
|
||||||
|
"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 (operational tracking)",
|
||||||
|
"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)",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mfg_90_optician_workload"
|
||||||
|
},
|
||||||
|
"target": 20.0,
|
||||||
|
"units": "nm",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 300
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"constraints": [
|
||||||
|
{
|
||||||
|
"id": "con_001",
|
||||||
|
"name": "Mirror assembly mass must be under 99kg",
|
||||||
|
"type": "hard",
|
||||||
|
"operator": "<=",
|
||||||
|
"threshold": 0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_002",
|
||||||
|
"output_name": "mass_kg"
|
||||||
|
},
|
||||||
|
"penalty_config": {
|
||||||
|
"method": "quadratic",
|
||||||
|
"weight": 100.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": "dv_011",
|
||||||
|
"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_002",
|
||||||
|
"target": "con_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_001",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_002",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_003",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "con_001",
|
||||||
|
"target": "optimization"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"layout_version": "2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
406
studies/M1_Mirror/m1_mirror_adaptive_V13/atomizer_spec.json
Normal file
406
studies/M1_Mirror/m1_mirror_adaptive_V13/atomizer_spec.json
Normal file
@@ -0,0 +1,406 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.015282Z",
|
||||||
|
"modified": "2026-01-17T15:35:12.015282Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "migration",
|
||||||
|
"study_name": "m1_mirror_adaptive_v13",
|
||||||
|
"description": "V13 - Pure NSGA-II multi-objective optimization with FEA only. No surrogate. Seeds from V11+V12 FEA data.",
|
||||||
|
"tags": [
|
||||||
|
"mirror",
|
||||||
|
"zernike"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"model": {
|
||||||
|
"sim": {
|
||||||
|
"path": "ASSY_M1_assyfem1_sim1.sim",
|
||||||
|
"solver": "nastran"
|
||||||
|
},
|
||||||
|
"nx_settings": {
|
||||||
|
"nx_install_path": "C:\\Program Files\\Siemens\\NX2506",
|
||||||
|
"simulation_timeout_s": 600
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"design_variables": [
|
||||||
|
{
|
||||||
|
"id": "dv_001",
|
||||||
|
"name": "lateral_inner_angle",
|
||||||
|
"expression_name": "lateral_inner_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 25.0,
|
||||||
|
"max": 28.5
|
||||||
|
},
|
||||||
|
"baseline": 26.79,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_002",
|
||||||
|
"name": "lateral_outer_angle",
|
||||||
|
"expression_name": "lateral_outer_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 13.0,
|
||||||
|
"max": 17.0
|
||||||
|
},
|
||||||
|
"baseline": 14.64,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 180
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_003",
|
||||||
|
"name": "lateral_outer_pivot",
|
||||||
|
"expression_name": "lateral_outer_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 9.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 10.4,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 260
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_004",
|
||||||
|
"name": "lateral_inner_pivot",
|
||||||
|
"expression_name": "lateral_inner_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 9.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 10.07,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 340
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_005",
|
||||||
|
"name": "lateral_middle_pivot",
|
||||||
|
"expression_name": "lateral_middle_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 18.0,
|
||||||
|
"max": 23.0
|
||||||
|
},
|
||||||
|
"baseline": 20.73,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 420
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_006",
|
||||||
|
"name": "lateral_closeness",
|
||||||
|
"expression_name": "lateral_closeness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 9.5,
|
||||||
|
"max": 12.5
|
||||||
|
},
|
||||||
|
"baseline": 11.02,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 500
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_007",
|
||||||
|
"name": "whiffle_min",
|
||||||
|
"expression_name": "whiffle_min",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 35.0,
|
||||||
|
"max": 55.0
|
||||||
|
},
|
||||||
|
"baseline": 40.55,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 580
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_008",
|
||||||
|
"name": "whiffle_outer_to_vertical",
|
||||||
|
"expression_name": "whiffle_outer_to_vertical",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 68.0,
|
||||||
|
"max": 80.0
|
||||||
|
},
|
||||||
|
"baseline": 75.67,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 660
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_009",
|
||||||
|
"name": "whiffle_triangle_closeness",
|
||||||
|
"expression_name": "whiffle_triangle_closeness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 50.0,
|
||||||
|
"max": 65.0
|
||||||
|
},
|
||||||
|
"baseline": 60.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 740
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_010",
|
||||||
|
"name": "blank_backface_angle",
|
||||||
|
"expression_name": "blank_backface_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 4,
|
||||||
|
"max": 5.0
|
||||||
|
},
|
||||||
|
"baseline": 4.23,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 820
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_011",
|
||||||
|
"name": "inner_circular_rib_dia",
|
||||||
|
"expression_name": "inner_circular_rib_dia",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 480.0,
|
||||||
|
"max": 620.0
|
||||||
|
},
|
||||||
|
"baseline": 534.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 900
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 740,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"objectives": [
|
||||||
|
{
|
||||||
|
"id": "obj_001",
|
||||||
|
"name": "Filtered RMS WFE at 40 deg relative to 20 deg reference (operational tracking)",
|
||||||
|
"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 (operational tracking)",
|
||||||
|
"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)",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mfg_90_optician_workload"
|
||||||
|
},
|
||||||
|
"target": 20.0,
|
||||||
|
"units": "nm",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 300
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"constraints": [],
|
||||||
|
"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": "dv_011",
|
||||||
|
"target": "model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "model",
|
||||||
|
"target": "solver"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "solver",
|
||||||
|
"target": "ext_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_002"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_003"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_001",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_002",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_003",
|
||||||
|
"target": "optimization"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"layout_version": "2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
406
studies/M1_Mirror/m1_mirror_adaptive_V14/atomizer_spec.json
Normal file
406
studies/M1_Mirror/m1_mirror_adaptive_V14/atomizer_spec.json
Normal file
@@ -0,0 +1,406 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.016335Z",
|
||||||
|
"modified": "2026-01-17T15:35:12.016335Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "migration",
|
||||||
|
"study_name": "m1_mirror_adaptive_v14",
|
||||||
|
"description": "V14 continuation - TPE with expanded bounds based on V14 analysis. 4 params were at bounds: lateral_middle_pivot (99.4%), whiffle_min (96.3%), lateral_outer_angle (4.7%), lateral_inner_pivot (8.1%).",
|
||||||
|
"tags": [
|
||||||
|
"mirror",
|
||||||
|
"zernike"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"model": {
|
||||||
|
"sim": {
|
||||||
|
"path": "ASSY_M1_assyfem1_sim1.sim",
|
||||||
|
"solver": "nastran"
|
||||||
|
},
|
||||||
|
"nx_settings": {
|
||||||
|
"nx_install_path": "C:\\Program Files\\Siemens\\NX2506",
|
||||||
|
"simulation_timeout_s": 600
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"design_variables": [
|
||||||
|
{
|
||||||
|
"id": "dv_001",
|
||||||
|
"name": "lateral_inner_angle",
|
||||||
|
"expression_name": "lateral_inner_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 25.0,
|
||||||
|
"max": 30.0
|
||||||
|
},
|
||||||
|
"baseline": 26.79,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_002",
|
||||||
|
"name": "lateral_outer_angle",
|
||||||
|
"expression_name": "lateral_outer_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 11.0,
|
||||||
|
"max": 17.0
|
||||||
|
},
|
||||||
|
"baseline": 14.64,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 180
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_003",
|
||||||
|
"name": "lateral_outer_pivot",
|
||||||
|
"expression_name": "lateral_outer_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 9.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 10.4,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 260
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_004",
|
||||||
|
"name": "lateral_inner_pivot",
|
||||||
|
"expression_name": "lateral_inner_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 5.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 10.07,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 340
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_005",
|
||||||
|
"name": "lateral_middle_pivot",
|
||||||
|
"expression_name": "lateral_middle_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 15.0,
|
||||||
|
"max": 27.0
|
||||||
|
},
|
||||||
|
"baseline": 20.73,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 420
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_006",
|
||||||
|
"name": "lateral_closeness",
|
||||||
|
"expression_name": "lateral_closeness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 9.5,
|
||||||
|
"max": 12.5
|
||||||
|
},
|
||||||
|
"baseline": 11.02,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 500
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_007",
|
||||||
|
"name": "whiffle_min",
|
||||||
|
"expression_name": "whiffle_min",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 30.0,
|
||||||
|
"max": 72.0
|
||||||
|
},
|
||||||
|
"baseline": 40.55,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 580
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_008",
|
||||||
|
"name": "whiffle_outer_to_vertical",
|
||||||
|
"expression_name": "whiffle_outer_to_vertical",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 60.0,
|
||||||
|
"max": 80.0
|
||||||
|
},
|
||||||
|
"baseline": 75.67,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 660
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_009",
|
||||||
|
"name": "whiffle_triangle_closeness",
|
||||||
|
"expression_name": "whiffle_triangle_closeness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 50.0,
|
||||||
|
"max": 80.0
|
||||||
|
},
|
||||||
|
"baseline": 60.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 740
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_010",
|
||||||
|
"name": "blank_backface_angle",
|
||||||
|
"expression_name": "blank_backface_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 4.1,
|
||||||
|
"max": 4.5
|
||||||
|
},
|
||||||
|
"baseline": 4.15,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 820
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_011",
|
||||||
|
"name": "inner_circular_rib_dia",
|
||||||
|
"expression_name": "inner_circular_rib_dia",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 480.0,
|
||||||
|
"max": 620.0
|
||||||
|
},
|
||||||
|
"baseline": 534.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 900
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 740,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"objectives": [
|
||||||
|
{
|
||||||
|
"id": "obj_001",
|
||||||
|
"name": "Filtered RMS WFE at 40 deg relative to 20 deg reference (operational tracking)",
|
||||||
|
"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 (operational tracking)",
|
||||||
|
"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)",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mfg_90_optician_workload"
|
||||||
|
},
|
||||||
|
"target": 20.0,
|
||||||
|
"units": "nm",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 300
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"constraints": [],
|
||||||
|
"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": "dv_011",
|
||||||
|
"target": "model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "model",
|
||||||
|
"target": "solver"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "solver",
|
||||||
|
"target": "ext_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_002"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_003"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_001",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_002",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_003",
|
||||||
|
"target": "optimization"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"layout_version": "2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
407
studies/M1_Mirror/m1_mirror_adaptive_V15/atomizer_spec.json
Normal file
407
studies/M1_Mirror/m1_mirror_adaptive_V15/atomizer_spec.json
Normal file
@@ -0,0 +1,407 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.017994Z",
|
||||||
|
"modified": "2026-01-17T15:35:12.017994Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "migration",
|
||||||
|
"study_name": "m1_mirror_adaptive_v15",
|
||||||
|
"description": "V15 NSGA-II multi-objective optimization. Seeds from 785 V14 trials. Explores Pareto trade-offs between 40deg tracking, 60deg tracking, and manufacturing workload.",
|
||||||
|
"tags": [
|
||||||
|
"mirror",
|
||||||
|
"zernike"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"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": "lateral_inner_angle",
|
||||||
|
"expression_name": "lateral_inner_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 25.0,
|
||||||
|
"max": 30.0
|
||||||
|
},
|
||||||
|
"baseline": 26.79,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_002",
|
||||||
|
"name": "lateral_outer_angle",
|
||||||
|
"expression_name": "lateral_outer_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 11.0,
|
||||||
|
"max": 17.0
|
||||||
|
},
|
||||||
|
"baseline": 14.64,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 180
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_003",
|
||||||
|
"name": "lateral_outer_pivot",
|
||||||
|
"expression_name": "lateral_outer_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 9.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 10.4,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 260
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_004",
|
||||||
|
"name": "lateral_inner_pivot",
|
||||||
|
"expression_name": "lateral_inner_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 5.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 10.07,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 340
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_005",
|
||||||
|
"name": "lateral_middle_pivot",
|
||||||
|
"expression_name": "lateral_middle_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 15.0,
|
||||||
|
"max": 27.0
|
||||||
|
},
|
||||||
|
"baseline": 20.73,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 420
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_006",
|
||||||
|
"name": "lateral_closeness",
|
||||||
|
"expression_name": "lateral_closeness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 9.5,
|
||||||
|
"max": 12.5
|
||||||
|
},
|
||||||
|
"baseline": 11.02,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 500
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_007",
|
||||||
|
"name": "whiffle_min",
|
||||||
|
"expression_name": "whiffle_min",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 30.0,
|
||||||
|
"max": 72.0
|
||||||
|
},
|
||||||
|
"baseline": 40.55,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 580
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_008",
|
||||||
|
"name": "whiffle_outer_to_vertical",
|
||||||
|
"expression_name": "whiffle_outer_to_vertical",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 60.0,
|
||||||
|
"max": 80.0
|
||||||
|
},
|
||||||
|
"baseline": 75.67,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 660
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_009",
|
||||||
|
"name": "whiffle_triangle_closeness",
|
||||||
|
"expression_name": "whiffle_triangle_closeness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 50.0,
|
||||||
|
"max": 80.0
|
||||||
|
},
|
||||||
|
"baseline": 60.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 740
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_010",
|
||||||
|
"name": "blank_backface_angle",
|
||||||
|
"expression_name": "blank_backface_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 4.1,
|
||||||
|
"max": 4.5
|
||||||
|
},
|
||||||
|
"baseline": 4.15,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 820
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_011",
|
||||||
|
"name": "inner_circular_rib_dia",
|
||||||
|
"expression_name": "inner_circular_rib_dia",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 480.0,
|
||||||
|
"max": 620.0
|
||||||
|
},
|
||||||
|
"baseline": 534.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 900
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 740,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"objectives": [
|
||||||
|
{
|
||||||
|
"id": "obj_001",
|
||||||
|
"name": "Filtered RMS WFE at 40 deg relative to 20 deg reference (operational tracking)",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 1.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 (operational tracking)",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 1.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)",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mfg_90_optician_workload"
|
||||||
|
},
|
||||||
|
"target": 20.0,
|
||||||
|
"units": "nm",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 300
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"constraints": [],
|
||||||
|
"optimization": {
|
||||||
|
"algorithm": {
|
||||||
|
"type": "NSGA-II",
|
||||||
|
"config": {
|
||||||
|
"population_size": 50,
|
||||||
|
"seed": 42
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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": "dv_011",
|
||||||
|
"target": "model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "model",
|
||||||
|
"target": "solver"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "solver",
|
||||||
|
"target": "ext_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_002"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_003"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_001",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_002",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_003",
|
||||||
|
"target": "optimization"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"layout_version": "2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
435
studies/M1_Mirror/m1_mirror_cost_reduction/atomizer_spec.json
Normal file
435
studies/M1_Mirror/m1_mirror_cost_reduction/atomizer_spec.json
Normal file
@@ -0,0 +1,435 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.019028Z",
|
||||||
|
"modified": "2026-01-17T15:35:12.019028Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "migration",
|
||||||
|
"study_name": "m1_mirror_cost_reduction",
|
||||||
|
"description": "TPE optimization for M1 mirror cost reduction. Starting from best V11-V15 design (Trial #725, WS=121.72). New geometry with modified behavior.",
|
||||||
|
"tags": [
|
||||||
|
"mirror",
|
||||||
|
"zernike"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"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": "lateral_inner_angle",
|
||||||
|
"expression_name": "lateral_inner_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 25.0,
|
||||||
|
"max": 30.0
|
||||||
|
},
|
||||||
|
"baseline": 27.7,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_002",
|
||||||
|
"name": "lateral_outer_angle",
|
||||||
|
"expression_name": "lateral_outer_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 11.0,
|
||||||
|
"max": 17.0
|
||||||
|
},
|
||||||
|
"baseline": 13.03,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 180
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_003",
|
||||||
|
"name": "lateral_outer_pivot",
|
||||||
|
"expression_name": "lateral_outer_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 9.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 11.24,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 260
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_004",
|
||||||
|
"name": "lateral_inner_pivot",
|
||||||
|
"expression_name": "lateral_inner_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 5.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 8.16,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 340
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_005",
|
||||||
|
"name": "lateral_middle_pivot",
|
||||||
|
"expression_name": "lateral_middle_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 15.0,
|
||||||
|
"max": 27.0
|
||||||
|
},
|
||||||
|
"baseline": 22.88,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 420
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_006",
|
||||||
|
"name": "lateral_closeness",
|
||||||
|
"expression_name": "lateral_closeness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 9.5,
|
||||||
|
"max": 12.5
|
||||||
|
},
|
||||||
|
"baseline": 9.84,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 500
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_007",
|
||||||
|
"name": "whiffle_min",
|
||||||
|
"expression_name": "whiffle_min",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 30.0,
|
||||||
|
"max": 72.0
|
||||||
|
},
|
||||||
|
"baseline": 58.63,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 580
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_008",
|
||||||
|
"name": "whiffle_outer_to_vertical",
|
||||||
|
"expression_name": "whiffle_outer_to_vertical",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 60.0,
|
||||||
|
"max": 80.0
|
||||||
|
},
|
||||||
|
"baseline": 77.96,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 660
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_009",
|
||||||
|
"name": "whiffle_triangle_closeness",
|
||||||
|
"expression_name": "whiffle_triangle_closeness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 65,
|
||||||
|
"max": 80.0
|
||||||
|
},
|
||||||
|
"baseline": 67.33,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 740
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_010",
|
||||||
|
"name": "blank_backface_angle",
|
||||||
|
"expression_name": "blank_backface_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 4.5,
|
||||||
|
"max": 5
|
||||||
|
},
|
||||||
|
"baseline": 4.5,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 820
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_011",
|
||||||
|
"name": "inner_circular_rib_dia",
|
||||||
|
"expression_name": "inner_circular_rib_dia",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 480.0,
|
||||||
|
"max": 620.0
|
||||||
|
},
|
||||||
|
"baseline": 537.86,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 900
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"objectives": [
|
||||||
|
{
|
||||||
|
"id": "obj_001",
|
||||||
|
"name": "Filtered RMS WFE at 40 deg relative to 20 deg reference (operational tracking)",
|
||||||
|
"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 (operational tracking)",
|
||||||
|
"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)",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 2.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 extracted via NX MeasureManager",
|
||||||
|
"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": [],
|
||||||
|
"optimization": {
|
||||||
|
"algorithm": {
|
||||||
|
"type": "TPE",
|
||||||
|
"config": {
|
||||||
|
"n_startup_trials": 15,
|
||||||
|
"seed": 42
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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": "dv_011",
|
||||||
|
"target": "model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "model",
|
||||||
|
"target": "solver"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "solver",
|
||||||
|
"target": "ext_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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": "obj_001",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_002",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_003",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_004",
|
||||||
|
"target": "optimization"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"layout_version": "2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,528 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.025507Z",
|
||||||
|
"modified": "2026-01-17T15:35:12.025507Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "migration",
|
||||||
|
"study_name": "m1_mirror_cost_reduction_v10",
|
||||||
|
"description": "CMA-ES lateral optimization with RIGOROUS ZernikeFigure extraction. Uses actual figure geometry to compute OPD with XY lateral displacement correction. Replaces V8 which used Z-only Zernike extraction. 6 active lateral variables.",
|
||||||
|
"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": false,
|
||||||
|
"description": "FIXED at V7 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": 81.7479,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "FIXED at V7 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": 65.5418,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "FIXED at V7 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.4158,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "FIXED at V7 best value",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 340
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_005",
|
||||||
|
"name": "Pocket_Radius",
|
||||||
|
"expression_name": "Pocket_Radius",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 9.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 10.05,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "FIXED at 10.05mm (pushed to model each iteration)",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 420
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_006",
|
||||||
|
"name": "lateral_inner_angle",
|
||||||
|
"expression_name": "lateral_inner_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 25.0,
|
||||||
|
"max": 30.0
|
||||||
|
},
|
||||||
|
"baseline": 27.7,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "ACTIVE for V10. Angle of inner lateral support constraint.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 500
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_007",
|
||||||
|
"name": "lateral_outer_angle",
|
||||||
|
"expression_name": "lateral_outer_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 11.0,
|
||||||
|
"max": 17.0
|
||||||
|
},
|
||||||
|
"baseline": 13.03,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "ACTIVE for V10. Angle of outer lateral support constraint.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 580
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_008",
|
||||||
|
"name": "lateral_outer_pivot",
|
||||||
|
"expression_name": "lateral_outer_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 7,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 10.0,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "ACTIVE for V10. Pivot position for outer lateral. Max constrained to 11.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 660
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_009",
|
||||||
|
"name": "lateral_inner_pivot",
|
||||||
|
"expression_name": "lateral_inner_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 5.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 8.16,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "ACTIVE for V10. Pivot position for inner lateral.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 740
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_010",
|
||||||
|
"name": "lateral_middle_pivot",
|
||||||
|
"expression_name": "lateral_middle_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 15.0,
|
||||||
|
"max": 27.0
|
||||||
|
},
|
||||||
|
"baseline": 22.88,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "ACTIVE for V10. Pivot position for middle lateral.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 820
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_011",
|
||||||
|
"name": "lateral_closeness",
|
||||||
|
"expression_name": "lateral_closeness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 7.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 9.84,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "ACTIVE for V10. Closeness factor for lateral supports.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 900
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_012",
|
||||||
|
"name": "inner_circular_rib_dia",
|
||||||
|
"expression_name": "inner_circular_rib_dia",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 480.0,
|
||||||
|
"max": 620.0
|
||||||
|
},
|
||||||
|
"baseline": 537.86,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "DISABLED. Fixed structural parameter.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 980
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_013",
|
||||||
|
"name": "center_thickness",
|
||||||
|
"expression_name": "center_thickness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 60.0,
|
||||||
|
"max": 85.0
|
||||||
|
},
|
||||||
|
"baseline": 85.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "DISABLED. Fixed at 85mm per sensitivity analysis.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 1060
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"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 extracted via NX MeasureManager",
|
||||||
|
"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": "CMA-ES",
|
||||||
|
"config": {
|
||||||
|
"sigma0": 0.3,
|
||||||
|
"seed": 42
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"budget": {
|
||||||
|
"max_trials": 200
|
||||||
|
},
|
||||||
|
"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": "dv_011",
|
||||||
|
"target": "model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "dv_012",
|
||||||
|
"target": "model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "dv_013",
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,528 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.027110Z",
|
||||||
|
"modified": "2026-01-17T15:35:12.027110Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "migration",
|
||||||
|
"study_name": "m1_mirror_cost_reduction_v11",
|
||||||
|
"description": "CMA-ES lateral optimization with CORRECT ZernikeOPD extraction using extract_relative() method. Uses actual figure geometry to compute OPD with XY lateral displacement correction. Clean restart from V10 (which had corrupted iterations).",
|
||||||
|
"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": false,
|
||||||
|
"description": "FIXED at V7 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": 81.7479,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "FIXED at V7 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": 65.5418,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "FIXED at V7 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.4158,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "FIXED at V7 best value",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 340
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_005",
|
||||||
|
"name": "Pocket_Radius",
|
||||||
|
"expression_name": "Pocket_Radius",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 9.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 10.05,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "FIXED at 10.05mm (pushed to model each iteration)",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 420
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_006",
|
||||||
|
"name": "lateral_inner_angle",
|
||||||
|
"expression_name": "lateral_inner_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 25.0,
|
||||||
|
"max": 30.0
|
||||||
|
},
|
||||||
|
"baseline": 27.7,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "ACTIVE for V11. Angle of inner lateral support constraint.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 500
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_007",
|
||||||
|
"name": "lateral_outer_angle",
|
||||||
|
"expression_name": "lateral_outer_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 11.0,
|
||||||
|
"max": 17.0
|
||||||
|
},
|
||||||
|
"baseline": 13.03,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "ACTIVE for V11. Angle of outer lateral support constraint.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 580
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_008",
|
||||||
|
"name": "lateral_outer_pivot",
|
||||||
|
"expression_name": "lateral_outer_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 7,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 10.0,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "ACTIVE for V11. Pivot position for outer lateral.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 660
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_009",
|
||||||
|
"name": "lateral_inner_pivot",
|
||||||
|
"expression_name": "lateral_inner_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 5.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 8.16,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "ACTIVE for V11. Pivot position for inner lateral.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 740
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_010",
|
||||||
|
"name": "lateral_middle_pivot",
|
||||||
|
"expression_name": "lateral_middle_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 15.0,
|
||||||
|
"max": 27.0
|
||||||
|
},
|
||||||
|
"baseline": 22.88,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "ACTIVE for V11. Pivot position for middle lateral.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 820
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_011",
|
||||||
|
"name": "lateral_closeness",
|
||||||
|
"expression_name": "lateral_closeness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 7.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 9.84,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "ACTIVE for V11. Closeness factor for lateral supports.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 900
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_012",
|
||||||
|
"name": "inner_circular_rib_dia",
|
||||||
|
"expression_name": "inner_circular_rib_dia",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 480.0,
|
||||||
|
"max": 620.0
|
||||||
|
},
|
||||||
|
"baseline": 537.86,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "DISABLED. Fixed structural parameter.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 980
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_013",
|
||||||
|
"name": "center_thickness",
|
||||||
|
"expression_name": "center_thickness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 60.0,
|
||||||
|
"max": 85.0
|
||||||
|
},
|
||||||
|
"baseline": 85.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "DISABLED. Fixed at 85mm per sensitivity analysis.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 1060
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"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 extracted via NX MeasureManager",
|
||||||
|
"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": "CMA-ES",
|
||||||
|
"config": {
|
||||||
|
"sigma0": 0.3,
|
||||||
|
"seed": 42
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"budget": {
|
||||||
|
"max_trials": 200
|
||||||
|
},
|
||||||
|
"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": "dv_011",
|
||||||
|
"target": "model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "dv_012",
|
||||||
|
"target": "model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "dv_013",
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,528 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.028161Z",
|
||||||
|
"modified": "2026-01-17T15:35:12.028161Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "migration",
|
||||||
|
"study_name": "m1_mirror_cost_reduction_v12",
|
||||||
|
"description": "CMA-ES combined Whiffle + Lateral optimization with ZernikeOPD extraction using extract_relative() method. All 10 design variables enabled for full fine-tuning. Starting from V11 best (trial 190, WS=284.19).",
|
||||||
|
"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": "ACTIVE for V12. Inner whiffle tree contact radius. V7 optimum.",
|
||||||
|
"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": "ACTIVE for V12. Outer whiffle arm length. V7 optimum.",
|
||||||
|
"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": "ACTIVE for V12. Whiffle triangle geometry. V7 optimum.",
|
||||||
|
"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": "ACTIVE for V12. Back face taper angle (affects mass). V7 optimum.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 340
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_005",
|
||||||
|
"name": "Pocket_Radius",
|
||||||
|
"expression_name": "Pocket_Radius",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 9.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 10.05,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "FIXED at 10.05mm (pushed to model each iteration)",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 420
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_006",
|
||||||
|
"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": "ACTIVE for V12. V11 best value. Angle of inner lateral support constraint.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 500
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_007",
|
||||||
|
"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": "ACTIVE for V12. V11 best value. Angle of outer lateral support constraint.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 580
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_008",
|
||||||
|
"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": "ACTIVE for V12. V11 best value. Pivot position for outer lateral.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 660
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_009",
|
||||||
|
"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": "ACTIVE for V12. V11 best value. Pivot position for inner lateral.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 740
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_010",
|
||||||
|
"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": "ACTIVE for V12. V11 best value. Pivot position for middle lateral.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 820
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_011",
|
||||||
|
"name": "lateral_closeness",
|
||||||
|
"expression_name": "lateral_closeness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 7.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 8.685,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "ACTIVE for V12. V11 best value. Closeness factor for lateral supports.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 900
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_012",
|
||||||
|
"name": "inner_circular_rib_dia",
|
||||||
|
"expression_name": "inner_circular_rib_dia",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 480.0,
|
||||||
|
"max": 620.0
|
||||||
|
},
|
||||||
|
"baseline": 537.86,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "DISABLED. Fixed structural parameter.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 980
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_013",
|
||||||
|
"name": "center_thickness",
|
||||||
|
"expression_name": "center_thickness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 60.0,
|
||||||
|
"max": 85.0
|
||||||
|
},
|
||||||
|
"baseline": 85.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "DISABLED. Fixed at 85mm per sensitivity analysis.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 1060
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"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 extracted via NX MeasureManager",
|
||||||
|
"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": "CMA-ES",
|
||||||
|
"config": {
|
||||||
|
"sigma0": 0.15,
|
||||||
|
"seed": 42
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"budget": {
|
||||||
|
"max_trials": 200
|
||||||
|
},
|
||||||
|
"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": "dv_011",
|
||||||
|
"target": "model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "dv_012",
|
||||||
|
"target": "model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "dv_013",
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,560 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.029754Z",
|
||||||
|
"modified": "2026-01-17T15:35:12.029754Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "migration",
|
||||||
|
"study_name": "m1_mirror_cost_reduction_v13",
|
||||||
|
"description": "SAT v3 with conical backface (4-5 deg), stricter 100kg mass constraint, same cost function as flat_back (6*wfe_40 + 5*wfe_60 + 3*mfg). Uses all V6-V12 training data (1200+ samples).",
|
||||||
|
"tags": [
|
||||||
|
"SAT-v3-conical",
|
||||||
|
"mirror",
|
||||||
|
"zernike",
|
||||||
|
"opd"
|
||||||
|
],
|
||||||
|
"engineering_context": "Cost reduction with conical backface design"
|
||||||
|
},
|
||||||
|
"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": 56.54,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Inner whiffle tree contact radius - V12 range",
|
||||||
|
"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.28,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Outer whiffle arm length - V12 range",
|
||||||
|
"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": 95.0
|
||||||
|
},
|
||||||
|
"baseline": 65.69,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "CAD constraint - tightened from 120 to 95 based on failure analysis",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 260
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_004",
|
||||||
|
"name": "lateral_inner_angle",
|
||||||
|
"expression_name": "lateral_inner_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 25.0,
|
||||||
|
"max": 32.0
|
||||||
|
},
|
||||||
|
"baseline": 29.14,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Inner lateral support angle - V12 range",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 340
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_005",
|
||||||
|
"name": "lateral_outer_angle",
|
||||||
|
"expression_name": "lateral_outer_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 9.0,
|
||||||
|
"max": 15.0
|
||||||
|
},
|
||||||
|
"baseline": 12.57,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Outer lateral support angle - V12 range",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 420
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_006",
|
||||||
|
"name": "lateral_outer_pivot",
|
||||||
|
"expression_name": "lateral_outer_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 7.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 11.3,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "CAD constraint",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 500
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_007",
|
||||||
|
"name": "lateral_inner_pivot",
|
||||||
|
"expression_name": "lateral_inner_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 5.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 9.48,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Inner lateral pivot position",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 580
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_008",
|
||||||
|
"name": "lateral_middle_pivot",
|
||||||
|
"expression_name": "lateral_middle_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 15.0,
|
||||||
|
"max": 24.0
|
||||||
|
},
|
||||||
|
"baseline": 20.09,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Middle lateral pivot position - tightened from 27 to 24",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 660
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_009",
|
||||||
|
"name": "lateral_closeness",
|
||||||
|
"expression_name": "lateral_closeness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 7.0,
|
||||||
|
"max": 11.0
|
||||||
|
},
|
||||||
|
"baseline": 9.03,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Lateral closeness factor - tightened from 12 to 11",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 740
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_010",
|
||||||
|
"name": "rib_thickness",
|
||||||
|
"expression_name": "rib_thickness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 6.0,
|
||||||
|
"max": 9.0
|
||||||
|
},
|
||||||
|
"baseline": 8.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Radial rib thickness - CAD constraint max 9mm (failures above 9.0)",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 820
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_011",
|
||||||
|
"name": "ribs_circular_thk",
|
||||||
|
"expression_name": "ribs_circular_thk",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 5.0,
|
||||||
|
"max": 10.0
|
||||||
|
},
|
||||||
|
"baseline": 7.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Circular rib thickness",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 900
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_012",
|
||||||
|
"name": "rib_thickness_lateral_truss",
|
||||||
|
"expression_name": "rib_thickness_lateral_truss",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 8.0,
|
||||||
|
"max": 14.0
|
||||||
|
},
|
||||||
|
"baseline": 11.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Lateral truss rib thickness",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 980
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_013",
|
||||||
|
"name": "center_thickness",
|
||||||
|
"expression_name": "center_thickness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 60.0,
|
||||||
|
"max": 85.0
|
||||||
|
},
|
||||||
|
"baseline": 85.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Center section thickness - from V12 at 85mm, can explore thinner",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 1060
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_014",
|
||||||
|
"name": "blank_backface_angle",
|
||||||
|
"expression_name": "blank_backface_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 4.0,
|
||||||
|
"max": 5.0
|
||||||
|
},
|
||||||
|
"baseline": 4.47,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Backface taper angle (conical, not flat) - V12 best was 4.47",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 1140
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"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": "wfe_40_20",
|
||||||
|
"metric": "filtered_rms_nm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "wfe_60_20",
|
||||||
|
"metric": "filtered_rms_nm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "mfg_90",
|
||||||
|
"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",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 6.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "wfe_40_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",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 5.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "wfe_60_20"
|
||||||
|
},
|
||||||
|
"target": 10.0,
|
||||||
|
"units": "nm",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 200
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "obj_003",
|
||||||
|
"name": "Manufacturing deformation at 90 deg polishing",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 3.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mfg_90"
|
||||||
|
},
|
||||||
|
"target": 20.0,
|
||||||
|
"units": "nm",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 300
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"constraints": [
|
||||||
|
{
|
||||||
|
"id": "con_001",
|
||||||
|
"name": "Maximum blank mass constraint - 100kg strict limit",
|
||||||
|
"type": "hard",
|
||||||
|
"operator": "<=",
|
||||||
|
"threshold": 100.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": "SAT_v3",
|
||||||
|
"config": {}
|
||||||
|
},
|
||||||
|
"budget": {
|
||||||
|
"max_trials": 300
|
||||||
|
},
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1300,
|
||||||
|
"y": 150
|
||||||
|
},
|
||||||
|
"surrogate": {
|
||||||
|
"enabled": true,
|
||||||
|
"type": "ensemble",
|
||||||
|
"config": {
|
||||||
|
"n_models": 5,
|
||||||
|
"architecture": [
|
||||||
|
128,
|
||||||
|
64,
|
||||||
|
32
|
||||||
|
],
|
||||||
|
"train_every_n_trials": 20,
|
||||||
|
"min_training_samples": 30
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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": "dv_011",
|
||||||
|
"target": "model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "dv_012",
|
||||||
|
"target": "model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "dv_013",
|
||||||
|
"target": "model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "dv_014",
|
||||||
|
"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_002",
|
||||||
|
"target": "con_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_001",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_002",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_003",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "con_001",
|
||||||
|
"target": "optimization"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"layout_version": "2.0"
|
||||||
|
},
|
||||||
|
"workflow": {
|
||||||
|
"stages": [
|
||||||
|
{
|
||||||
|
"id": "stage_exploration",
|
||||||
|
"name": "Design Space Exploration",
|
||||||
|
"algorithm": "RandomSearch",
|
||||||
|
"trials": 30,
|
||||||
|
"purpose": "Build initial training data for surrogate"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "stage_optimization",
|
||||||
|
"name": "Surrogate-Assisted Optimization",
|
||||||
|
"algorithm": "SAT_v3",
|
||||||
|
"trials": 270,
|
||||||
|
"purpose": "Neural-accelerated optimization"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"transitions": [
|
||||||
|
{
|
||||||
|
"from": "stage_exploration",
|
||||||
|
"to": "stage_optimization",
|
||||||
|
"condition": "trial_count >= 30"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
527
studies/M1_Mirror/m1_mirror_cost_reduction_V9/atomizer_spec.json
Normal file
527
studies/M1_Mirror/m1_mirror_cost_reduction_V9/atomizer_spec.json
Normal file
@@ -0,0 +1,527 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.031312Z",
|
||||||
|
"modified": "2026-01-17T15:35:12.031312Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "migration",
|
||||||
|
"study_name": "m1_mirror_cost_reduction_v9",
|
||||||
|
"description": "CMA-ES combined fine-tuning of all 10 parameters. Phase 3 of sequential optimization: V7 (whiffle) + V8 (lateral) results combined. Lower sigma for final polish around best known design.",
|
||||||
|
"tags": [
|
||||||
|
"mirror",
|
||||||
|
"zernike"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"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": "ACTIVE for V9. Value from V7 best (unchanged in V8).",
|
||||||
|
"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": "ACTIVE for V9. Value from V7 best (unchanged in V8).",
|
||||||
|
"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": "ACTIVE for V9. Value from V7 best (unchanged in V8).",
|
||||||
|
"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.42,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "ACTIVE for V9. Value from V7 best (unchanged in V8).",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 340
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_005",
|
||||||
|
"name": "Pocket_Radius",
|
||||||
|
"expression_name": "Pocket_Radius",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 9.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 10.05,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "FIXED at 10.05mm (pushed to model each iteration)",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 420
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_006",
|
||||||
|
"name": "lateral_inner_angle",
|
||||||
|
"expression_name": "lateral_inner_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 25.0,
|
||||||
|
"max": 32.0
|
||||||
|
},
|
||||||
|
"baseline": 29.827,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "ACTIVE for V9. Value from V8 best trial 189.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 500
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_007",
|
||||||
|
"name": "lateral_outer_angle",
|
||||||
|
"expression_name": "lateral_outer_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 9,
|
||||||
|
"max": 15.0
|
||||||
|
},
|
||||||
|
"baseline": 11.206,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "ACTIVE for V9. Value from V8 best trial 189.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 580
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_008",
|
||||||
|
"name": "lateral_outer_pivot",
|
||||||
|
"expression_name": "lateral_outer_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 9.0,
|
||||||
|
"max": 11.0
|
||||||
|
},
|
||||||
|
"baseline": 10.828,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "ACTIVE for V9. Value from V8 best trial 189. Max constrained to 11.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 660
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_009",
|
||||||
|
"name": "lateral_inner_pivot",
|
||||||
|
"expression_name": "lateral_inner_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 5.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 9.048,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "ACTIVE for V9. Value from V8 best trial 189.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 740
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_010",
|
||||||
|
"name": "lateral_middle_pivot",
|
||||||
|
"expression_name": "lateral_middle_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 18.0,
|
||||||
|
"max": 25.0
|
||||||
|
},
|
||||||
|
"baseline": 21.491,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "ACTIVE for V9. Value from V8 best trial 189.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 820
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_011",
|
||||||
|
"name": "lateral_closeness",
|
||||||
|
"expression_name": "lateral_closeness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 7.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 9.398,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "ACTIVE for V9. Value from V8 best trial 189.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 900
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_012",
|
||||||
|
"name": "inner_circular_rib_dia",
|
||||||
|
"expression_name": "inner_circular_rib_dia",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 480.0,
|
||||||
|
"max": 620.0
|
||||||
|
},
|
||||||
|
"baseline": 537.86,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "DISABLED. Fixed structural parameter.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 980
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_013",
|
||||||
|
"name": "center_thickness",
|
||||||
|
"expression_name": "center_thickness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 60.0,
|
||||||
|
"max": 85.0
|
||||||
|
},
|
||||||
|
"baseline": 85.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "DISABLED. Fixed at 85mm per sensitivity analysis.",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 1060
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"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 (operational tracking)",
|
||||||
|
"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 (operational tracking)",
|
||||||
|
"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)",
|
||||||
|
"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 extracted via NX MeasureManager",
|
||||||
|
"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": "CMA-ES",
|
||||||
|
"config": {
|
||||||
|
"sigma0": 0.15,
|
||||||
|
"seed": 42
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"budget": {
|
||||||
|
"max_trials": 200
|
||||||
|
},
|
||||||
|
"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": "dv_011",
|
||||||
|
"target": "model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "dv_012",
|
||||||
|
"target": "model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "dv_013",
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,582 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.020603Z",
|
||||||
|
"modified": "2026-01-17T15:35:12.020603Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "migration",
|
||||||
|
"study_name": "m1_mirror_cost_reduction_flat_back_v10",
|
||||||
|
"description": "SAT v3 with expanded bounds: center_thickness=60-75mm, thinner mirror face, expanded lateral angles. Uses all V5-V9 training data (800+ samples).",
|
||||||
|
"tags": [
|
||||||
|
"SAT-v3-300-thin",
|
||||||
|
"mirror",
|
||||||
|
"zernike",
|
||||||
|
"opd"
|
||||||
|
],
|
||||||
|
"engineering_context": "Cost reduction option C for Schott Quote revisions"
|
||||||
|
},
|
||||||
|
"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": 60.0,
|
||||||
|
"max": 80.0
|
||||||
|
},
|
||||||
|
"baseline": 72.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Expanded range - top designs at 72mm",
|
||||||
|
"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": 88.0
|
||||||
|
},
|
||||||
|
"baseline": 83.0,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Slightly expanded upper bound",
|
||||||
|
"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.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Keep V9 bounds - CAD constraint",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 260
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_004",
|
||||||
|
"name": "lateral_inner_angle",
|
||||||
|
"expression_name": "lateral_inner_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 28.0,
|
||||||
|
"max": 35.0
|
||||||
|
},
|
||||||
|
"baseline": 30.0,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Expanded upper - top designs at 30 deg",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 340
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_005",
|
||||||
|
"name": "lateral_outer_angle",
|
||||||
|
"expression_name": "lateral_outer_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 8.0,
|
||||||
|
"max": 14.0
|
||||||
|
},
|
||||||
|
"baseline": 11.0,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Lowered min - top designs at 11 deg",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 420
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_006",
|
||||||
|
"name": "lateral_outer_pivot",
|
||||||
|
"expression_name": "lateral_outer_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 7.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 11.9,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Keep V9 bounds - CAD constraint",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 500
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_007",
|
||||||
|
"name": "lateral_inner_pivot",
|
||||||
|
"expression_name": "lateral_inner_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 5.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 11.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Keep V9 bounds",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 580
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_008",
|
||||||
|
"name": "lateral_middle_pivot",
|
||||||
|
"expression_name": "lateral_middle_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 15.0,
|
||||||
|
"max": 27.0
|
||||||
|
},
|
||||||
|
"baseline": 22.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 660
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_009",
|
||||||
|
"name": "lateral_closeness",
|
||||||
|
"expression_name": "lateral_closeness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 7.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 11.5,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 740
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_010",
|
||||||
|
"name": "rib_thickness",
|
||||||
|
"expression_name": "rib_thickness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 8.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 10.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 820
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_011",
|
||||||
|
"name": "ribs_circular_thk",
|
||||||
|
"expression_name": "ribs_circular_thk",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 5.0,
|
||||||
|
"max": 10.0
|
||||||
|
},
|
||||||
|
"baseline": 7.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Reduced min to 5mm - top designs at 7-8mm",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 900
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_012",
|
||||||
|
"name": "rib_thickness_lateral_truss",
|
||||||
|
"expression_name": "rib_thickness_lateral_truss",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 8.0,
|
||||||
|
"max": 14.0
|
||||||
|
},
|
||||||
|
"baseline": 11.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 980
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_013",
|
||||||
|
"name": "mirror_face_thickness",
|
||||||
|
"expression_name": "mirror_face_thickness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 15.0,
|
||||||
|
"max": 20.0
|
||||||
|
},
|
||||||
|
"baseline": 15.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Keep V9 bounds - CAD constraint",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 1060
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_014",
|
||||||
|
"name": "center_thickness",
|
||||||
|
"expression_name": "center_thickness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 60.0,
|
||||||
|
"max": 75.0
|
||||||
|
},
|
||||||
|
"baseline": 67.5,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "REDUCED from 75-85 to 60-75 per user request",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 1140
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_015",
|
||||||
|
"name": "blank_backface_angle",
|
||||||
|
"expression_name": "blank_backface_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": -0.001,
|
||||||
|
"max": 0.001
|
||||||
|
},
|
||||||
|
"baseline": 0.0,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "FIXED at 0 for flat backface",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 1220
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"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": "wfe_40_20",
|
||||||
|
"metric": "filtered_rms_nm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "wfe_60_20",
|
||||||
|
"metric": "filtered_rms_nm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "mfg_90",
|
||||||
|
"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",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 6.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "wfe_40_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",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 5.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "wfe_60_20"
|
||||||
|
},
|
||||||
|
"target": 10.0,
|
||||||
|
"units": "nm",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 200
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "obj_003",
|
||||||
|
"name": "Manufacturing deformation at 90 deg polishing",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 3.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mfg_90"
|
||||||
|
},
|
||||||
|
"target": 20.0,
|
||||||
|
"units": "nm",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 300
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"constraints": [
|
||||||
|
{
|
||||||
|
"id": "con_001",
|
||||||
|
"name": "Maximum blank mass constraint",
|
||||||
|
"type": "hard",
|
||||||
|
"operator": "<=",
|
||||||
|
"threshold": 120.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": "SAT_v3",
|
||||||
|
"config": {}
|
||||||
|
},
|
||||||
|
"budget": {
|
||||||
|
"max_trials": 300
|
||||||
|
},
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1300,
|
||||||
|
"y": 150
|
||||||
|
},
|
||||||
|
"surrogate": {
|
||||||
|
"enabled": true,
|
||||||
|
"type": "ensemble",
|
||||||
|
"config": {
|
||||||
|
"n_models": 5,
|
||||||
|
"architecture": [
|
||||||
|
128,
|
||||||
|
64,
|
||||||
|
32
|
||||||
|
],
|
||||||
|
"train_every_n_trials": 20,
|
||||||
|
"min_training_samples": 30
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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": "dv_011",
|
||||||
|
"target": "model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "dv_012",
|
||||||
|
"target": "model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "dv_013",
|
||||||
|
"target": "model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "dv_014",
|
||||||
|
"target": "model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "dv_015",
|
||||||
|
"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_002",
|
||||||
|
"target": "con_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_001",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_002",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_003",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "con_001",
|
||||||
|
"target": "optimization"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"layout_version": "2.0"
|
||||||
|
},
|
||||||
|
"workflow": {
|
||||||
|
"stages": [
|
||||||
|
{
|
||||||
|
"id": "stage_exploration",
|
||||||
|
"name": "Design Space Exploration",
|
||||||
|
"algorithm": "RandomSearch",
|
||||||
|
"trials": 30,
|
||||||
|
"purpose": "Build initial training data for surrogate"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "stage_optimization",
|
||||||
|
"name": "Surrogate-Assisted Optimization",
|
||||||
|
"algorithm": "SAT_v3",
|
||||||
|
"trials": 270,
|
||||||
|
"purpose": "Neural-accelerated optimization"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"transitions": [
|
||||||
|
{
|
||||||
|
"from": "stage_exploration",
|
||||||
|
"to": "stage_optimization",
|
||||||
|
"condition": "trial_count >= 30"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,582 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.022867Z",
|
||||||
|
"modified": "2026-01-17T15:35:12.022867Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "migration",
|
||||||
|
"study_name": "m1_mirror_cost_reduction_flat_back_v9",
|
||||||
|
"description": "Self-Aware Turbo v3 with ALL campaign data (601 samples), adaptive exploration schedule, optimal mass region targeting (115-120 kg), and L-BFGS polish phase.",
|
||||||
|
"tags": [
|
||||||
|
"SAT-v3-200",
|
||||||
|
"mirror",
|
||||||
|
"zernike",
|
||||||
|
"opd"
|
||||||
|
],
|
||||||
|
"engineering_context": "Cost reduction option C for Schott Quote revisions"
|
||||||
|
},
|
||||||
|
"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": 51.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"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": 77.5,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"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": 92.5,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 260
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_004",
|
||||||
|
"name": "lateral_inner_angle",
|
||||||
|
"expression_name": "lateral_inner_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 25.0,
|
||||||
|
"max": 30.0
|
||||||
|
},
|
||||||
|
"baseline": 27.5,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 340
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_005",
|
||||||
|
"name": "lateral_outer_angle",
|
||||||
|
"expression_name": "lateral_outer_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 11.0,
|
||||||
|
"max": 17.0
|
||||||
|
},
|
||||||
|
"baseline": 14.0,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 420
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_006",
|
||||||
|
"name": "lateral_outer_pivot",
|
||||||
|
"expression_name": "lateral_outer_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 7.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 9.5,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 500
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_007",
|
||||||
|
"name": "lateral_inner_pivot",
|
||||||
|
"expression_name": "lateral_inner_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 5.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 8.5,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 580
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_008",
|
||||||
|
"name": "lateral_middle_pivot",
|
||||||
|
"expression_name": "lateral_middle_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 15.0,
|
||||||
|
"max": 27.0
|
||||||
|
},
|
||||||
|
"baseline": 21.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 660
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_009",
|
||||||
|
"name": "lateral_closeness",
|
||||||
|
"expression_name": "lateral_closeness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 7.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 9.5,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 740
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_010",
|
||||||
|
"name": "rib_thickness",
|
||||||
|
"expression_name": "rib_thickness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 8.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 10.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 820
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_011",
|
||||||
|
"name": "ribs_circular_thk",
|
||||||
|
"expression_name": "ribs_circular_thk",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 7.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 9.5,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 900
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_012",
|
||||||
|
"name": "rib_thickness_lateral_truss",
|
||||||
|
"expression_name": "rib_thickness_lateral_truss",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 8.0,
|
||||||
|
"max": 14.0
|
||||||
|
},
|
||||||
|
"baseline": 12.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 980
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_013",
|
||||||
|
"name": "mirror_face_thickness",
|
||||||
|
"expression_name": "mirror_face_thickness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 15.0,
|
||||||
|
"max": 20.0
|
||||||
|
},
|
||||||
|
"baseline": 17.5,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 1060
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_014",
|
||||||
|
"name": "center_thickness",
|
||||||
|
"expression_name": "center_thickness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 75.0,
|
||||||
|
"max": 85.0
|
||||||
|
},
|
||||||
|
"baseline": 80.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 1140
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_015",
|
||||||
|
"name": "blank_backface_angle",
|
||||||
|
"expression_name": "blank_backface_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": -0.001,
|
||||||
|
"max": 0.001
|
||||||
|
},
|
||||||
|
"baseline": 0.0,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "FIXED at 0 for flat backface",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 1220
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"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": "wfe_40_20",
|
||||||
|
"metric": "filtered_rms_nm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "wfe_60_20",
|
||||||
|
"metric": "filtered_rms_nm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "mfg_90",
|
||||||
|
"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",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 6.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "wfe_40_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",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 5.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "wfe_60_20"
|
||||||
|
},
|
||||||
|
"target": 10.0,
|
||||||
|
"units": "nm",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 200
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "obj_003",
|
||||||
|
"name": "Manufacturing deformation at 90 deg polishing",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 3.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mfg_90"
|
||||||
|
},
|
||||||
|
"target": 20.0,
|
||||||
|
"units": "nm",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 300
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"constraints": [
|
||||||
|
{
|
||||||
|
"id": "con_001",
|
||||||
|
"name": "Maximum blank mass constraint",
|
||||||
|
"type": "hard",
|
||||||
|
"operator": "<=",
|
||||||
|
"threshold": 120.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": "SAT_v3",
|
||||||
|
"config": {}
|
||||||
|
},
|
||||||
|
"budget": {
|
||||||
|
"max_trials": 200
|
||||||
|
},
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1300,
|
||||||
|
"y": 150
|
||||||
|
},
|
||||||
|
"surrogate": {
|
||||||
|
"enabled": true,
|
||||||
|
"type": "ensemble",
|
||||||
|
"config": {
|
||||||
|
"n_models": 5,
|
||||||
|
"architecture": [
|
||||||
|
128,
|
||||||
|
64,
|
||||||
|
32
|
||||||
|
],
|
||||||
|
"train_every_n_trials": 20,
|
||||||
|
"min_training_samples": 30
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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": "dv_011",
|
||||||
|
"target": "model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "dv_012",
|
||||||
|
"target": "model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "dv_013",
|
||||||
|
"target": "model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "dv_014",
|
||||||
|
"target": "model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "dv_015",
|
||||||
|
"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_002",
|
||||||
|
"target": "con_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_001",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_002",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_003",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "con_001",
|
||||||
|
"target": "optimization"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"layout_version": "2.0"
|
||||||
|
},
|
||||||
|
"workflow": {
|
||||||
|
"stages": [
|
||||||
|
{
|
||||||
|
"id": "stage_exploration",
|
||||||
|
"name": "Design Space Exploration",
|
||||||
|
"algorithm": "RandomSearch",
|
||||||
|
"trials": 30,
|
||||||
|
"purpose": "Build initial training data for surrogate"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "stage_optimization",
|
||||||
|
"name": "Surrogate-Assisted Optimization",
|
||||||
|
"algorithm": "SAT_v3",
|
||||||
|
"trials": 170,
|
||||||
|
"purpose": "Neural-accelerated optimization"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"transitions": [
|
||||||
|
{
|
||||||
|
"from": "stage_exploration",
|
||||||
|
"to": "stage_optimization",
|
||||||
|
"condition": "trial_count >= 30"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,400 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.024432Z",
|
||||||
|
"modified": "2026-01-17T16:33:51.000000Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "claude",
|
||||||
|
"study_name": "m1_mirror_cost_reduction_lateral",
|
||||||
|
"description": "Lateral support optimization with new U-joint expressions (lateral_inner_u, lateral_outer_u) for cost reduction model. Focus on WFE and MFG only - no mass objective.",
|
||||||
|
"tags": [
|
||||||
|
"CMA-ES-100",
|
||||||
|
"mirror",
|
||||||
|
"zernike",
|
||||||
|
"opd"
|
||||||
|
],
|
||||||
|
"engineering_context": "Optimize lateral support geometry using new U-joint parameterization on cost reduction model"
|
||||||
|
},
|
||||||
|
"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": "lateral_inner_u",
|
||||||
|
"expression_name": "lateral_inner_u",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 0.2,
|
||||||
|
"max": 0.95
|
||||||
|
},
|
||||||
|
"baseline": 0.3,
|
||||||
|
"units": "unitless",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "U-joint ratio for inner lateral support (replaces lateral_inner_pivot)",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_002",
|
||||||
|
"name": "lateral_outer_u",
|
||||||
|
"expression_name": "lateral_outer_u",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 0.2,
|
||||||
|
"max": 0.95
|
||||||
|
},
|
||||||
|
"baseline": 0.8,
|
||||||
|
"units": "unitless",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "U-joint ratio for outer lateral support (replaces lateral_outer_pivot)",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 180
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_003",
|
||||||
|
"name": "lateral_middle_pivot",
|
||||||
|
"expression_name": "lateral_middle_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 15.0,
|
||||||
|
"max": 27.0
|
||||||
|
},
|
||||||
|
"baseline": 21.07,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Middle pivot position on lateral support",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 260
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_004",
|
||||||
|
"name": "lateral_inner_angle",
|
||||||
|
"expression_name": "lateral_inner_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 25.0,
|
||||||
|
"max": 35.0
|
||||||
|
},
|
||||||
|
"baseline": 31.93,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Inner lateral support angle",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 340
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_005",
|
||||||
|
"name": "lateral_outer_angle",
|
||||||
|
"expression_name": "lateral_outer_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 8.0,
|
||||||
|
"max": 17.0
|
||||||
|
},
|
||||||
|
"baseline": 10.77,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Outer lateral support angle",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 420
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_006",
|
||||||
|
"name": "hole_dia1",
|
||||||
|
"expression_name": "hole_dia1",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 5.0,
|
||||||
|
"max": 25.0
|
||||||
|
},
|
||||||
|
"baseline": 15.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Diameter of hole pattern 1",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 500
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_007",
|
||||||
|
"name": "hole_dia2",
|
||||||
|
"expression_name": "hole_dia2",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 5.0,
|
||||||
|
"max": 25.0
|
||||||
|
},
|
||||||
|
"baseline": 15.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Diameter of hole pattern 2",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 580
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"extractors": [
|
||||||
|
{
|
||||||
|
"id": "ext_001",
|
||||||
|
"name": "Zernike WFE Extractor",
|
||||||
|
"type": "zernike_opd",
|
||||||
|
"builtin": true,
|
||||||
|
"config": {
|
||||||
|
"inner_radius_mm": 135.75,
|
||||||
|
"outer_radius_mm": 500.0,
|
||||||
|
"n_modes": 50,
|
||||||
|
"filter_low_orders": 4,
|
||||||
|
"displacement_unit": "mm",
|
||||||
|
"reference_subcase": 2
|
||||||
|
},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "wfe_40_20",
|
||||||
|
"metric": "filtered_rms_nm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "wfe_60_20",
|
||||||
|
"metric": "filtered_rms_nm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "mfg_90",
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "ext_003",
|
||||||
|
"name": "Volume Extractor",
|
||||||
|
"type": "custom",
|
||||||
|
"builtin": false,
|
||||||
|
"config": {
|
||||||
|
"density_kg_m3": 2530.0
|
||||||
|
},
|
||||||
|
"custom_function": {
|
||||||
|
"name": "extract_volume",
|
||||||
|
"code": "def extract_volume(trial_dir, config, context):\n \"\"\"\n Extract volume from mass using material density.\n Volume = Mass / Density\n \n For Zerodur glass-ceramic: density ~ 2530 kg/m³\n \"\"\"\n import json\n from pathlib import Path\n \n # Get mass from the mass extractor results\n results_file = Path(trial_dir) / 'results.json'\n if results_file.exists():\n with open(results_file) as f:\n results = json.load(f)\n mass_kg = results.get('mass_kg', 0)\n else:\n # If no results yet, try to get from context\n mass_kg = context.get('mass_kg', 0)\n \n density = config.get('density_kg_m3', 2530.0) # Zerodur default\n \n # Volume in m³\n volume_m3 = mass_kg / density if density > 0 else 0\n \n # Also calculate in liters for convenience (1 m³ = 1000 L)\n volume_liters = volume_m3 * 1000\n \n return {\n 'volume_m3': volume_m3,\n 'volume_liters': volume_liters\n }\n"
|
||||||
|
},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "volume_m3",
|
||||||
|
"metric": "total"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "volume_liters",
|
||||||
|
"metric": "total"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 740,
|
||||||
|
"y": 400
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"objectives": [
|
||||||
|
{
|
||||||
|
"id": "obj_001",
|
||||||
|
"name": "Filtered RMS WFE at 40 deg relative to 20 deg (annular)",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 6.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "wfe_40_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 (annular)",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 5.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "wfe_60_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, annular)",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 3.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mfg_90"
|
||||||
|
},
|
||||||
|
"target": 20.0,
|
||||||
|
"units": "nm",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 300
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"constraints": [
|
||||||
|
{
|
||||||
|
"id": "con_001",
|
||||||
|
"name": "Maximum blank mass constraint (still enforced even though mass not optimized)",
|
||||||
|
"type": "hard",
|
||||||
|
"operator": "<=",
|
||||||
|
"threshold": 120.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": "model",
|
||||||
|
"target": "solver"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "solver",
|
||||||
|
"target": "ext_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "solver",
|
||||||
|
"target": "ext_002"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "solver",
|
||||||
|
"target": "ext_003"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_002"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_003"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_002",
|
||||||
|
"target": "con_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_001",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_002",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_003",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "con_001",
|
||||||
|
"target": "optimization"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"layout_version": "2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
259
studies/M1_Mirror/m1_mirror_flat_back_final/atomizer_spec.json
Normal file
259
studies/M1_Mirror/m1_mirror_flat_back_final/atomizer_spec.json
Normal file
@@ -0,0 +1,259 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.032823Z",
|
||||||
|
"modified": "2026-01-17T15:35:12.032823Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "migration",
|
||||||
|
"study_name": "m1_mirror_flat_back_final",
|
||||||
|
"description": "Final whiffle refinement starting from V10 iter123 (best mass design). Only 2 variables: whiffle_min and whiffle_triangle_closeness. Uses CMA-ES for efficient 2D optimization.",
|
||||||
|
"tags": [
|
||||||
|
"CMA-ES-60",
|
||||||
|
"mirror",
|
||||||
|
"zernike",
|
||||||
|
"opd"
|
||||||
|
],
|
||||||
|
"engineering_context": "Final optimization of whiffle parameters for flat back design"
|
||||||
|
},
|
||||||
|
"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": 35.0,
|
||||||
|
"max": 85.0
|
||||||
|
},
|
||||||
|
"baseline": 70.77,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Minimum whiffle tree arm length - affects support stiffness distribution",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_002",
|
||||||
|
"name": "whiffle_triangle_closeness",
|
||||||
|
"expression_name": "whiffle_triangle_closeness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 55.0,
|
||||||
|
"max": 110.0
|
||||||
|
},
|
||||||
|
"baseline": 69.02,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Closeness of whiffle triangle vertices - affects load distribution geometry",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 180
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"extractors": [
|
||||||
|
{
|
||||||
|
"id": "ext_001",
|
||||||
|
"name": "Zernike WFE Extractor",
|
||||||
|
"type": "zernike_opd",
|
||||||
|
"builtin": true,
|
||||||
|
"config": {
|
||||||
|
"inner_radius_mm": 135.75,
|
||||||
|
"outer_radius_mm": 500.0,
|
||||||
|
"n_modes": 50,
|
||||||
|
"filter_low_orders": 4,
|
||||||
|
"displacement_unit": "mm",
|
||||||
|
"reference_subcase": 2
|
||||||
|
},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "wfe_40_20",
|
||||||
|
"metric": "filtered_rms_nm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "wfe_60_20",
|
||||||
|
"metric": "filtered_rms_nm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "mfg_90",
|
||||||
|
"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 (annular)",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 6.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "wfe_40_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 (annular)",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 5.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "wfe_60_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, annular)",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 3.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mfg_90"
|
||||||
|
},
|
||||||
|
"target": 20.0,
|
||||||
|
"units": "nm",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 300
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"constraints": [
|
||||||
|
{
|
||||||
|
"id": "con_001",
|
||||||
|
"name": "Maximum blank mass constraint",
|
||||||
|
"type": "hard",
|
||||||
|
"operator": "<=",
|
||||||
|
"threshold": 120.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": 60
|
||||||
|
},
|
||||||
|
"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_001",
|
||||||
|
"target": "obj_003"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_002",
|
||||||
|
"target": "con_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_001",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_002",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_003",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "con_001",
|
||||||
|
"target": "optimization"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"layout_version": "2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
325
studies/M1_Mirror/m1_mirror_flatback_lateral/atomizer_spec.json
Normal file
325
studies/M1_Mirror/m1_mirror_flatback_lateral/atomizer_spec.json
Normal file
@@ -0,0 +1,325 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.034330Z",
|
||||||
|
"modified": "2026-01-17T15:35:12.034330Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "migration",
|
||||||
|
"study_name": "m1_mirror_flatback_lateral",
|
||||||
|
"description": "Lateral support optimization with new U-joint expressions (lateral_inner_u, lateral_outer_u). Focus on WFE and MFG only - no mass objective.",
|
||||||
|
"tags": [
|
||||||
|
"CMA-ES-100",
|
||||||
|
"mirror",
|
||||||
|
"zernike",
|
||||||
|
"opd"
|
||||||
|
],
|
||||||
|
"engineering_context": "Optimize lateral support geometry using new U-joint parameterization"
|
||||||
|
},
|
||||||
|
"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": "lateral_inner_u",
|
||||||
|
"expression_name": "lateral_inner_u",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 0.2,
|
||||||
|
"max": 0.95
|
||||||
|
},
|
||||||
|
"baseline": 0.4,
|
||||||
|
"units": "unitless",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "U-joint ratio for inner lateral support (replaces lateral_inner_pivot)",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_002",
|
||||||
|
"name": "lateral_outer_u",
|
||||||
|
"expression_name": "lateral_outer_u",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 0.2,
|
||||||
|
"max": 0.95
|
||||||
|
},
|
||||||
|
"baseline": 0.4,
|
||||||
|
"units": "unitless",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "U-joint ratio for outer lateral support (replaces lateral_outer_pivot)",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 180
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_003",
|
||||||
|
"name": "lateral_middle_pivot",
|
||||||
|
"expression_name": "lateral_middle_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 15.0,
|
||||||
|
"max": 27.0
|
||||||
|
},
|
||||||
|
"baseline": 22.42,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Middle pivot position on lateral support",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 260
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_004",
|
||||||
|
"name": "lateral_inner_angle",
|
||||||
|
"expression_name": "lateral_inner_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 25.0,
|
||||||
|
"max": 35.0
|
||||||
|
},
|
||||||
|
"baseline": 31.96,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Inner lateral support angle",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 340
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_005",
|
||||||
|
"name": "lateral_outer_angle",
|
||||||
|
"expression_name": "lateral_outer_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 8.0,
|
||||||
|
"max": 17.0
|
||||||
|
},
|
||||||
|
"baseline": 9.08,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Outer lateral support angle",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 420
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"extractors": [
|
||||||
|
{
|
||||||
|
"id": "ext_001",
|
||||||
|
"name": "Zernike WFE Extractor",
|
||||||
|
"type": "zernike_opd",
|
||||||
|
"builtin": true,
|
||||||
|
"config": {
|
||||||
|
"inner_radius_mm": 135.75,
|
||||||
|
"outer_radius_mm": 500.0,
|
||||||
|
"n_modes": 50,
|
||||||
|
"filter_low_orders": 4,
|
||||||
|
"displacement_unit": "mm",
|
||||||
|
"reference_subcase": 2
|
||||||
|
},
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "wfe_40_20",
|
||||||
|
"metric": "filtered_rms_nm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "wfe_60_20",
|
||||||
|
"metric": "filtered_rms_nm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "mfg_90",
|
||||||
|
"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 (annular)",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 6.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "wfe_40_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 (annular)",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 5.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "wfe_60_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, annular)",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 3.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mfg_90"
|
||||||
|
},
|
||||||
|
"target": 20.0,
|
||||||
|
"units": "nm",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 300
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"constraints": [
|
||||||
|
{
|
||||||
|
"id": "con_001",
|
||||||
|
"name": "Maximum blank mass constraint (still enforced even though mass not optimized)",
|
||||||
|
"type": "hard",
|
||||||
|
"operator": "<=",
|
||||||
|
"threshold": 120.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": "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_002",
|
||||||
|
"target": "con_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_001",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_002",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_003",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "con_001",
|
||||||
|
"target": "optimization"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"layout_version": "2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
461
studies/M1_Mirror/m1_mirror_surrogate_turbo/atomizer_spec.json
Normal file
461
studies/M1_Mirror/m1_mirror_surrogate_turbo/atomizer_spec.json
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
462
studies/M1_Mirror/m1_mirror_turbo_V1/atomizer_spec.json
Normal file
462
studies/M1_Mirror/m1_mirror_turbo_V1/atomizer_spec.json
Normal file
@@ -0,0 +1,462 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.036882Z",
|
||||||
|
"modified": "2026-01-17T15:35:12.036882Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "migration",
|
||||||
|
"study_name": "m1_mirror_turbo_v1",
|
||||||
|
"description": "Self-improving turbo optimization: MLP surrogate explores design space, top candidates validated by FEA, surrogate retrains on new FEA data. Dashboard shows only FEA-validated iterations.",
|
||||||
|
"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": 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"
|
||||||
|
}
|
||||||
|
}
|
||||||
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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,435 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.038964Z",
|
||||||
|
"modified": "2026-01-17T15:35:12.038964Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "migration",
|
||||||
|
"study_name": "m1_mirror_zernike_optimization",
|
||||||
|
"description": "Telescope primary mirror support structure optimization using Zernike wavefront error metrics with neural acceleration",
|
||||||
|
"tags": [
|
||||||
|
"mirror",
|
||||||
|
"zernike"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"model": {
|
||||||
|
"sim": {
|
||||||
|
"path": "ASSY_M1_assyfem1_sim1.sim",
|
||||||
|
"solver": "nastran"
|
||||||
|
},
|
||||||
|
"nx_settings": {
|
||||||
|
"nx_install_path": "C:\\Program Files\\Siemens\\NX2506",
|
||||||
|
"simulation_timeout_s": 600
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"design_variables": [
|
||||||
|
{
|
||||||
|
"id": "dv_001",
|
||||||
|
"name": "lateral_inner_angle",
|
||||||
|
"expression_name": "lateral_inner_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 25.0,
|
||||||
|
"max": 28.5
|
||||||
|
},
|
||||||
|
"baseline": 26.79,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "Lateral support inner angle",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_002",
|
||||||
|
"name": "lateral_outer_angle",
|
||||||
|
"expression_name": "lateral_outer_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 13.0,
|
||||||
|
"max": 17.0
|
||||||
|
},
|
||||||
|
"baseline": 14.64,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "Lateral support outer angle",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 180
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_003",
|
||||||
|
"name": "lateral_outer_pivot",
|
||||||
|
"expression_name": "lateral_outer_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 9.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 10.4,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "Lateral outer pivot position",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 260
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_004",
|
||||||
|
"name": "lateral_inner_pivot",
|
||||||
|
"expression_name": "lateral_inner_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 9.0,
|
||||||
|
"max": 12.0
|
||||||
|
},
|
||||||
|
"baseline": 10.07,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "Lateral inner pivot position",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 340
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_005",
|
||||||
|
"name": "lateral_middle_pivot",
|
||||||
|
"expression_name": "lateral_middle_pivot",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 18.0,
|
||||||
|
"max": 23.0
|
||||||
|
},
|
||||||
|
"baseline": 20.73,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "Lateral middle pivot position",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 420
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_006",
|
||||||
|
"name": "lateral_closeness",
|
||||||
|
"expression_name": "lateral_closeness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 9.5,
|
||||||
|
"max": 12.5
|
||||||
|
},
|
||||||
|
"baseline": 11.02,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "Lateral support closeness parameter",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 500
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_007",
|
||||||
|
"name": "whiffle_min",
|
||||||
|
"expression_name": "whiffle_min",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 35.0,
|
||||||
|
"max": 55.0
|
||||||
|
},
|
||||||
|
"baseline": 40.55,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Whiffle tree minimum parameter",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 580
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_008",
|
||||||
|
"name": "whiffle_outer_to_vertical",
|
||||||
|
"expression_name": "whiffle_outer_to_vertical",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 68.0,
|
||||||
|
"max": 80.0
|
||||||
|
},
|
||||||
|
"baseline": 75.67,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Whiffle tree outer to vertical angle",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 660
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_009",
|
||||||
|
"name": "whiffle_triangle_closeness",
|
||||||
|
"expression_name": "whiffle_triangle_closeness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 50.0,
|
||||||
|
"max": 65.0
|
||||||
|
},
|
||||||
|
"baseline": 60.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "Whiffle tree triangle closeness",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 740
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_010",
|
||||||
|
"name": "blank_backface_angle",
|
||||||
|
"expression_name": "blank_backface_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 3.5,
|
||||||
|
"max": 5.0
|
||||||
|
},
|
||||||
|
"baseline": 4.23,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": false,
|
||||||
|
"description": "Mirror blank backface angle",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 820
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_011",
|
||||||
|
"name": "inner_circular_rib_dia",
|
||||||
|
"expression_name": "inner_circular_rib_dia",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 480.0,
|
||||||
|
"max": 620.0
|
||||||
|
},
|
||||||
|
"baseline": 534.0,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Inner circular rib diameter",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 900
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 740,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"objectives": [
|
||||||
|
{
|
||||||
|
"id": "obj_001",
|
||||||
|
"name": "Filtered RMS WFE at 40 deg relative to 20 deg reference",
|
||||||
|
"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",
|
||||||
|
"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": "Optician workload at 90 deg polishing orientation (filtered RMS with J1-J3)",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mfg_90_optician_workload"
|
||||||
|
},
|
||||||
|
"target": 20.0,
|
||||||
|
"units": "nm",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 300
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"constraints": [
|
||||||
|
{
|
||||||
|
"id": "con_001",
|
||||||
|
"name": "Maximum von Mises stress in mirror assembly",
|
||||||
|
"type": "hard",
|
||||||
|
"operator": "<=",
|
||||||
|
"threshold": 10.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "rel_filtered_rms_40_vs_20"
|
||||||
|
},
|
||||||
|
"penalty_config": {
|
||||||
|
"method": "quadratic",
|
||||||
|
"weight": 1000.0
|
||||||
|
},
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 400
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"optimization": {
|
||||||
|
"algorithm": {
|
||||||
|
"type": "TPE",
|
||||||
|
"config": {
|
||||||
|
"n_startup_trials": 15,
|
||||||
|
"seed": 42
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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": "dv_011",
|
||||||
|
"target": "model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "model",
|
||||||
|
"target": "solver"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "solver",
|
||||||
|
"target": "ext_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_002"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_003"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "con_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_001",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_002",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_003",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "con_001",
|
||||||
|
"target": "optimization"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"layout_version": "2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
213
studies/Simple_Bracket/bracket_pareto_3obj/atomizer_spec.json
Normal file
213
studies/Simple_Bracket/bracket_pareto_3obj/atomizer_spec.json
Normal file
@@ -0,0 +1,213 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.039975Z",
|
||||||
|
"modified": "2026-01-17T15:35:12.039975Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "migration",
|
||||||
|
"study_name": "bracket_pareto_3obj",
|
||||||
|
"description": "Three-objective Pareto optimization: minimize mass, minimize stress, maximize stiffness",
|
||||||
|
"tags": []
|
||||||
|
},
|
||||||
|
"model": {
|
||||||
|
"sim": {
|
||||||
|
"path": "1_setup\\model\\Bracket_sim1.sim",
|
||||||
|
"solver": "nastran"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"design_variables": [
|
||||||
|
{
|
||||||
|
"id": "dv_001",
|
||||||
|
"name": "param_1",
|
||||||
|
"expression_name": "support_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 20,
|
||||||
|
"max": 70
|
||||||
|
},
|
||||||
|
"baseline": null,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Angle of support arm relative to base",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_002",
|
||||||
|
"name": "param_2",
|
||||||
|
"expression_name": "tip_thickness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 30,
|
||||||
|
"max": 60
|
||||||
|
},
|
||||||
|
"baseline": null,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Thickness at bracket tip where load is applied",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 180
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"extractors": [
|
||||||
|
{
|
||||||
|
"id": "ext_001",
|
||||||
|
"name": "Mass Extractor",
|
||||||
|
"type": "mass",
|
||||||
|
"builtin": true,
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "mass",
|
||||||
|
"metric": "total"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 740,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"objectives": [
|
||||||
|
{
|
||||||
|
"id": "obj_001",
|
||||||
|
"name": "Total bracket mass (kg)",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mass"
|
||||||
|
},
|
||||||
|
"target": null,
|
||||||
|
"units": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "obj_002",
|
||||||
|
"name": "Maximum von Mises stress (MPa)",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "stress"
|
||||||
|
},
|
||||||
|
"target": null,
|
||||||
|
"units": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 200
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "obj_003",
|
||||||
|
"name": "Structural stiffness = Force/Displacement (N/mm)",
|
||||||
|
"direction": "maximize",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "stiffness"
|
||||||
|
},
|
||||||
|
"target": null,
|
||||||
|
"units": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 300
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"constraints": [
|
||||||
|
{
|
||||||
|
"id": "con_001",
|
||||||
|
"name": "Keep stress below 300 MPa for safety margin",
|
||||||
|
"type": "hard",
|
||||||
|
"operator": "<",
|
||||||
|
"threshold": 300,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mass"
|
||||||
|
},
|
||||||
|
"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": "model",
|
||||||
|
"target": "solver"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "solver",
|
||||||
|
"target": "ext_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_002"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_003"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "con_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_001",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_002",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_003",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "con_001",
|
||||||
|
"target": "optimization"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"layout_version": "2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,225 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.041483Z",
|
||||||
|
"modified": "2026-01-17T15:35:12.041483Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "migration",
|
||||||
|
"study_name": "bracket_stiffness_optimization",
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,225 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.043512Z",
|
||||||
|
"modified": "2026-01-17T15:35:12.043512Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "migration",
|
||||||
|
"study_name": "bracket_stiffness_optimization_v2",
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,225 @@
|
|||||||
|
{
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,209 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.042505Z",
|
||||||
|
"modified": "2026-01-17T15:35:12.042505Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "migration",
|
||||||
|
"study_name": "bracket_stiffness_optimization_atomizerfield",
|
||||||
|
"description": "Bracket Stiffness Optimization with AtomizerField Neural Acceleration - Multi-objective optimization of bracket geometry for maximum stiffness and minimum mass",
|
||||||
|
"tags": []
|
||||||
|
},
|
||||||
|
"model": {
|
||||||
|
"sim": {
|
||||||
|
"path": "1_setup\\model\\Bracket_sim1.sim",
|
||||||
|
"solver": "nastran"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"design_variables": [
|
||||||
|
{
|
||||||
|
"id": "dv_001",
|
||||||
|
"name": "param_1",
|
||||||
|
"expression_name": "support_angle",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 20,
|
||||||
|
"max": 70
|
||||||
|
},
|
||||||
|
"baseline": null,
|
||||||
|
"units": "degrees",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Angle of the support arm (degrees)",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_002",
|
||||||
|
"name": "param_2",
|
||||||
|
"expression_name": "tip_thickness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 30,
|
||||||
|
"max": 60
|
||||||
|
},
|
||||||
|
"baseline": null,
|
||||||
|
"units": "mm",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Thickness at the bracket tip (mm)",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 180
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"extractors": [
|
||||||
|
{
|
||||||
|
"id": "ext_001",
|
||||||
|
"name": "Displacement Extractor",
|
||||||
|
"type": "displacement",
|
||||||
|
"builtin": true,
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "stiffness",
|
||||||
|
"metric": "total"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"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 (inverse of max 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 bracket mass (kg)",
|
||||||
|
"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 mass constraint (kg)",
|
||||||
|
"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": "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": "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"
|
||||||
|
}
|
||||||
|
}
|
||||||
287
studies/UAV_Arm/uav_arm_atomizerfield_test/atomizer_spec.json
Normal file
287
studies/UAV_Arm/uav_arm_atomizerfield_test/atomizer_spec.json
Normal file
@@ -0,0 +1,287 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.045018Z",
|
||||||
|
"modified": "2026-01-17T15:35:12.045018Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "migration",
|
||||||
|
"study_name": "uav_arm_atomizerfield_test",
|
||||||
|
"description": "UAV Camera Support Arm - AtomizerField Neural Surrogate Integration Test",
|
||||||
|
"tags": []
|
||||||
|
},
|
||||||
|
"model": {
|
||||||
|
"sim": {
|
||||||
|
"path": "1_setup\\model\\Beam_sim1.sim",
|
||||||
|
"solver": "nastran"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"design_variables": [
|
||||||
|
{
|
||||||
|
"id": "dv_001",
|
||||||
|
"name": "param_1",
|
||||||
|
"expression_name": "beam_half_core_thickness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 5,
|
||||||
|
"max": 10
|
||||||
|
},
|
||||||
|
"baseline": null,
|
||||||
|
"units": "",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Half thickness of beam core (mm) - affects weight and stiffness",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_002",
|
||||||
|
"name": "param_2",
|
||||||
|
"expression_name": "beam_face_thickness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 1,
|
||||||
|
"max": 3
|
||||||
|
},
|
||||||
|
"baseline": null,
|
||||||
|
"units": "",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Thickness of beam face sheets (mm) - bending resistance",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 180
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_003",
|
||||||
|
"name": "param_3",
|
||||||
|
"expression_name": "holes_diameter",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 10,
|
||||||
|
"max": 50
|
||||||
|
},
|
||||||
|
"baseline": null,
|
||||||
|
"units": "",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Diameter of lightening holes (mm) - weight reduction",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 260
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_004",
|
||||||
|
"name": "param_4",
|
||||||
|
"expression_name": "hole_count",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 8,
|
||||||
|
"max": 14
|
||||||
|
},
|
||||||
|
"baseline": null,
|
||||||
|
"units": "",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Number of lightening holes - balance weight vs strength",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 340
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"extractors": [
|
||||||
|
{
|
||||||
|
"id": "ext_001",
|
||||||
|
"name": "Mass Extractor",
|
||||||
|
"type": "mass",
|
||||||
|
"builtin": true,
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "mass",
|
||||||
|
"metric": "total"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 740,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"objectives": [
|
||||||
|
{
|
||||||
|
"id": "obj_001",
|
||||||
|
"name": "Total mass (grams) - minimize for longer flight time",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mass"
|
||||||
|
},
|
||||||
|
"target": 4000,
|
||||||
|
"units": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "obj_002",
|
||||||
|
"name": "First natural frequency (Hz) - avoid rotor resonance",
|
||||||
|
"direction": "maximize",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "fundamental_frequency"
|
||||||
|
},
|
||||||
|
"target": 150,
|
||||||
|
"units": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 200
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"constraints": [
|
||||||
|
{
|
||||||
|
"id": "con_001",
|
||||||
|
"name": "Maximum tip displacement under 850g camera load < 1.5mm for image stabilization",
|
||||||
|
"type": "hard",
|
||||||
|
"operator": "<",
|
||||||
|
"threshold": 1.5,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mass"
|
||||||
|
},
|
||||||
|
"penalty_config": {
|
||||||
|
"method": "quadratic",
|
||||||
|
"weight": 1000.0
|
||||||
|
},
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 400
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "con_002",
|
||||||
|
"name": "Maximum von Mises stress < 120 MPa (Al 6061-T6, SF=2.3)",
|
||||||
|
"type": "hard",
|
||||||
|
"operator": "<",
|
||||||
|
"threshold": 120,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mass"
|
||||||
|
},
|
||||||
|
"penalty_config": {
|
||||||
|
"method": "quadratic",
|
||||||
|
"weight": 1000.0
|
||||||
|
},
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 500
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "con_003",
|
||||||
|
"name": "Natural frequency > 150 Hz to avoid rotor frequencies (80-120 Hz safety margin)",
|
||||||
|
"type": "hard",
|
||||||
|
"operator": ">",
|
||||||
|
"threshold": 150,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mass"
|
||||||
|
},
|
||||||
|
"penalty_config": {
|
||||||
|
"method": "quadratic",
|
||||||
|
"weight": 1000.0
|
||||||
|
},
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 600
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"optimization": {
|
||||||
|
"algorithm": {
|
||||||
|
"type": "TPE",
|
||||||
|
"config": {
|
||||||
|
"n_startup_trials": 10
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"budget": {
|
||||||
|
"max_trials": 200
|
||||||
|
},
|
||||||
|
"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": "model",
|
||||||
|
"target": "solver"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "solver",
|
||||||
|
"target": "ext_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_002"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "con_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "con_002"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "con_003"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_001",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_002",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "con_001",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "con_002",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "con_003",
|
||||||
|
"target": "optimization"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"layout_version": "2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
287
studies/UAV_Arm/uav_arm_optimization/atomizer_spec.json
Normal file
287
studies/UAV_Arm/uav_arm_optimization/atomizer_spec.json
Normal file
@@ -0,0 +1,287 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.046025Z",
|
||||||
|
"modified": "2026-01-17T15:35:12.046025Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "migration",
|
||||||
|
"study_name": "uav_arm_optimization",
|
||||||
|
"description": "UAV Camera Support Arm - Multi-Objective Lightweight Design",
|
||||||
|
"tags": []
|
||||||
|
},
|
||||||
|
"model": {
|
||||||
|
"sim": {
|
||||||
|
"path": "1_setup\\model\\Beam_sim1.sim",
|
||||||
|
"solver": "nastran"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"design_variables": [
|
||||||
|
{
|
||||||
|
"id": "dv_001",
|
||||||
|
"name": "param_1",
|
||||||
|
"expression_name": "beam_half_core_thickness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 5,
|
||||||
|
"max": 10
|
||||||
|
},
|
||||||
|
"baseline": null,
|
||||||
|
"units": "",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Half thickness of beam core (mm) - affects weight and stiffness",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_002",
|
||||||
|
"name": "param_2",
|
||||||
|
"expression_name": "beam_face_thickness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 1,
|
||||||
|
"max": 3
|
||||||
|
},
|
||||||
|
"baseline": null,
|
||||||
|
"units": "",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Thickness of beam face sheets (mm) - bending resistance",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 180
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_003",
|
||||||
|
"name": "param_3",
|
||||||
|
"expression_name": "holes_diameter",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 10,
|
||||||
|
"max": 50
|
||||||
|
},
|
||||||
|
"baseline": null,
|
||||||
|
"units": "",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Diameter of lightening holes (mm) - weight reduction",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 260
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_004",
|
||||||
|
"name": "param_4",
|
||||||
|
"expression_name": "hole_count",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 8,
|
||||||
|
"max": 14
|
||||||
|
},
|
||||||
|
"baseline": null,
|
||||||
|
"units": "",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Number of lightening holes - balance weight vs strength",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 340
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"extractors": [
|
||||||
|
{
|
||||||
|
"id": "ext_001",
|
||||||
|
"name": "Mass Extractor",
|
||||||
|
"type": "mass",
|
||||||
|
"builtin": true,
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "mass",
|
||||||
|
"metric": "total"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 740,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"objectives": [
|
||||||
|
{
|
||||||
|
"id": "obj_001",
|
||||||
|
"name": "Total mass (grams) - minimize for longer flight time",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mass"
|
||||||
|
},
|
||||||
|
"target": 4000,
|
||||||
|
"units": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "obj_002",
|
||||||
|
"name": "First natural frequency (Hz) - avoid rotor resonance",
|
||||||
|
"direction": "maximize",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "fundamental_frequency"
|
||||||
|
},
|
||||||
|
"target": 150,
|
||||||
|
"units": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 200
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"constraints": [
|
||||||
|
{
|
||||||
|
"id": "con_001",
|
||||||
|
"name": "Maximum tip displacement under 850g camera load < 1.5mm for image stabilization",
|
||||||
|
"type": "hard",
|
||||||
|
"operator": "<",
|
||||||
|
"threshold": 1.5,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mass"
|
||||||
|
},
|
||||||
|
"penalty_config": {
|
||||||
|
"method": "quadratic",
|
||||||
|
"weight": 1000.0
|
||||||
|
},
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 400
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "con_002",
|
||||||
|
"name": "Maximum von Mises stress < 120 MPa (Al 6061-T6, SF=2.3)",
|
||||||
|
"type": "hard",
|
||||||
|
"operator": "<",
|
||||||
|
"threshold": 120,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mass"
|
||||||
|
},
|
||||||
|
"penalty_config": {
|
||||||
|
"method": "quadratic",
|
||||||
|
"weight": 1000.0
|
||||||
|
},
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 500
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "con_003",
|
||||||
|
"name": "Natural frequency > 150 Hz to avoid rotor frequencies (80-120 Hz safety margin)",
|
||||||
|
"type": "hard",
|
||||||
|
"operator": ">",
|
||||||
|
"threshold": 150,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mass"
|
||||||
|
},
|
||||||
|
"penalty_config": {
|
||||||
|
"method": "quadratic",
|
||||||
|
"weight": 1000.0
|
||||||
|
},
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 600
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"optimization": {
|
||||||
|
"algorithm": {
|
||||||
|
"type": "TPE",
|
||||||
|
"config": {
|
||||||
|
"n_startup_trials": 10
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"budget": {
|
||||||
|
"max_trials": 30
|
||||||
|
},
|
||||||
|
"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": "model",
|
||||||
|
"target": "solver"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "solver",
|
||||||
|
"target": "ext_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_002"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "con_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "con_002"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "con_003"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_001",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_002",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "con_001",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "con_002",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "con_003",
|
||||||
|
"target": "optimization"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"layout_version": "2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
287
studies/UAV_Arm/uav_arm_optimization_V2/atomizer_spec.json
Normal file
287
studies/UAV_Arm/uav_arm_optimization_V2/atomizer_spec.json
Normal file
@@ -0,0 +1,287 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"created": "2026-01-17T15:35:12.047031Z",
|
||||||
|
"modified": "2026-01-17T15:35:12.047031Z",
|
||||||
|
"created_by": "migration",
|
||||||
|
"modified_by": "migration",
|
||||||
|
"study_name": "uav_arm_optimization_v2",
|
||||||
|
"description": "UAV Camera Support Arm V2 - Testing Solution Monitor Control",
|
||||||
|
"tags": []
|
||||||
|
},
|
||||||
|
"model": {
|
||||||
|
"sim": {
|
||||||
|
"path": "1_setup\\model\\Beam_sim1.sim",
|
||||||
|
"solver": "nastran"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"design_variables": [
|
||||||
|
{
|
||||||
|
"id": "dv_001",
|
||||||
|
"name": "param_1",
|
||||||
|
"expression_name": "beam_half_core_thickness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 5,
|
||||||
|
"max": 10
|
||||||
|
},
|
||||||
|
"baseline": null,
|
||||||
|
"units": "",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Half thickness of beam core (mm) - affects weight and stiffness",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_002",
|
||||||
|
"name": "param_2",
|
||||||
|
"expression_name": "beam_face_thickness",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 1,
|
||||||
|
"max": 3
|
||||||
|
},
|
||||||
|
"baseline": null,
|
||||||
|
"units": "",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Thickness of beam face sheets (mm) - bending resistance",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 180
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_003",
|
||||||
|
"name": "param_3",
|
||||||
|
"expression_name": "holes_diameter",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 10,
|
||||||
|
"max": 50
|
||||||
|
},
|
||||||
|
"baseline": null,
|
||||||
|
"units": "",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Diameter of lightening holes (mm) - weight reduction",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 260
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "dv_004",
|
||||||
|
"name": "param_4",
|
||||||
|
"expression_name": "hole_count",
|
||||||
|
"type": "continuous",
|
||||||
|
"bounds": {
|
||||||
|
"min": 8,
|
||||||
|
"max": 14
|
||||||
|
},
|
||||||
|
"baseline": null,
|
||||||
|
"units": "",
|
||||||
|
"enabled": true,
|
||||||
|
"description": "Number of lightening holes - balance weight vs strength",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 50,
|
||||||
|
"y": 340
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"extractors": [
|
||||||
|
{
|
||||||
|
"id": "ext_001",
|
||||||
|
"name": "Mass Extractor",
|
||||||
|
"type": "mass",
|
||||||
|
"builtin": true,
|
||||||
|
"outputs": [
|
||||||
|
{
|
||||||
|
"name": "mass",
|
||||||
|
"metric": "total"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 740,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"objectives": [
|
||||||
|
{
|
||||||
|
"id": "obj_001",
|
||||||
|
"name": "Total mass (grams) - minimize for longer flight time",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mass"
|
||||||
|
},
|
||||||
|
"target": 4000,
|
||||||
|
"units": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 100
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "obj_002",
|
||||||
|
"name": "First natural frequency (Hz) - avoid rotor resonance",
|
||||||
|
"direction": "maximize",
|
||||||
|
"weight": 1.0,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "fundamental_frequency"
|
||||||
|
},
|
||||||
|
"target": 150,
|
||||||
|
"units": "",
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 200
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"constraints": [
|
||||||
|
{
|
||||||
|
"id": "con_001",
|
||||||
|
"name": "Maximum tip displacement under 850g camera load < 1.5mm for image stabilization",
|
||||||
|
"type": "hard",
|
||||||
|
"operator": "<",
|
||||||
|
"threshold": 1.5,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mass"
|
||||||
|
},
|
||||||
|
"penalty_config": {
|
||||||
|
"method": "quadratic",
|
||||||
|
"weight": 1000.0
|
||||||
|
},
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 400
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "con_002",
|
||||||
|
"name": "Maximum von Mises stress < 120 MPa (Al 6061-T6, SF=2.3)",
|
||||||
|
"type": "hard",
|
||||||
|
"operator": "<",
|
||||||
|
"threshold": 120,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mass"
|
||||||
|
},
|
||||||
|
"penalty_config": {
|
||||||
|
"method": "quadratic",
|
||||||
|
"weight": 1000.0
|
||||||
|
},
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 500
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "con_003",
|
||||||
|
"name": "Natural frequency > 150 Hz to avoid rotor frequencies (80-120 Hz safety margin)",
|
||||||
|
"type": "hard",
|
||||||
|
"operator": ">",
|
||||||
|
"threshold": 150,
|
||||||
|
"source": {
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"output_name": "mass"
|
||||||
|
},
|
||||||
|
"penalty_config": {
|
||||||
|
"method": "quadratic",
|
||||||
|
"weight": 1000.0
|
||||||
|
},
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 1020,
|
||||||
|
"y": 600
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"optimization": {
|
||||||
|
"algorithm": {
|
||||||
|
"type": "TPE",
|
||||||
|
"config": {
|
||||||
|
"n_startup_trials": 10
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"budget": {
|
||||||
|
"max_trials": 10
|
||||||
|
},
|
||||||
|
"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": "model",
|
||||||
|
"target": "solver"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "solver",
|
||||||
|
"target": "ext_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_002"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "con_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "con_002"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "con_003"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_001",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "obj_002",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "con_001",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "con_002",
|
||||||
|
"target": "optimization"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"source": "con_003",
|
||||||
|
"target": "optimization"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"layout_version": "2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
83
studies/support_mass_v1/atomizer_spec.json
Normal file
83
studies/support_mass_v1/atomizer_spec.json
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
{
|
||||||
|
"meta": {
|
||||||
|
"version": "2.0",
|
||||||
|
"study_name": "support_mass_v1",
|
||||||
|
"description": "Minimize mass of structural support",
|
||||||
|
"created_by": "claude",
|
||||||
|
"created_at": "2026-01-18",
|
||||||
|
"modified_by": "claude",
|
||||||
|
"modified_at": "2026-01-18"
|
||||||
|
},
|
||||||
|
"model": {
|
||||||
|
"sim": {
|
||||||
|
"path": "",
|
||||||
|
"solver": "nastran",
|
||||||
|
"description": "Structural support model - to be configured in Canvas"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"design_variables": [],
|
||||||
|
"extractors": [
|
||||||
|
{
|
||||||
|
"id": "ext_001",
|
||||||
|
"name": "mass",
|
||||||
|
"type": "mass_bdf",
|
||||||
|
"description": "Total structural mass from BDF",
|
||||||
|
"config": {
|
||||||
|
"unit": "kg"
|
||||||
|
},
|
||||||
|
"enabled": true,
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 400,
|
||||||
|
"y": 200
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"objectives": [
|
||||||
|
{
|
||||||
|
"id": "obj_001",
|
||||||
|
"name": "minimize_mass",
|
||||||
|
"direction": "minimize",
|
||||||
|
"weight": 1.0,
|
||||||
|
"extractor_id": "ext_001",
|
||||||
|
"enabled": true,
|
||||||
|
"canvas_position": {
|
||||||
|
"x": 600,
|
||||||
|
"y": 200
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"constraints": [],
|
||||||
|
"optimization": {
|
||||||
|
"algorithm": {
|
||||||
|
"type": "TPE",
|
||||||
|
"config": {
|
||||||
|
"n_startup_trials": 10,
|
||||||
|
"multivariate": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"budget": {
|
||||||
|
"max_trials": 100,
|
||||||
|
"timeout_hours": null
|
||||||
|
},
|
||||||
|
"convergence": {
|
||||||
|
"enable_early_stopping": true,
|
||||||
|
"patience": 15,
|
||||||
|
"min_improvement": 0.001
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"canvas": {
|
||||||
|
"edges": [
|
||||||
|
{
|
||||||
|
"id": "edge_001",
|
||||||
|
"source": "model",
|
||||||
|
"target": "ext_001"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "edge_002",
|
||||||
|
"source": "ext_001",
|
||||||
|
"target": "obj_001"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"layout_version": "2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user