Files
Atomizer/studies/UAV_Arm/uav_arm_optimization_V2/atomizer_spec.json
Anto01 cb6b130908 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
2026-01-20 13:11:23 -05:00

287 lines
5.9 KiB
JSON

{
"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"
}
}