# Atomizer Configuration Schemas This directory contains JSON Schema files for validating Atomizer optimization study configurations. ## Files - **optimization_config_schema.json** - Schema for `optimization_config.json` files - Validates study configuration including objectives, constraints, design variables - Ensures consistency across all studies - Based on Protocol 10 (single-objective) and Protocol 11 (multi-objective) standards ## Usage ### Validate a Configuration Use the ConfigManager CLI tool: ```bash python optimization_engine/config_manager.py studies/your_study/1_setup/optimization_config.json ``` ### In Python Code ```python from pathlib import Path from optimization_engine.config_manager import ConfigManager config_path = Path("studies/my_study/1_setup/optimization_config.json") manager = ConfigManager(config_path) manager.load_config() if manager.validate(): print("Configuration is valid") design_vars = manager.get_design_variables() objectives = manager.get_objectives() else: print(manager.get_validation_report()) ``` ## Schema Standards ### Standard Configuration Format Based on the drone_gimbal_arm_optimization study, the standard format is: ```json { "study_name": "study_name_lowercase_with_underscores", "description": "Brief description of optimization problem", "engineering_context": "Real-world scenario and requirements", "optimization_settings": { "protocol": "protocol_11_multi_objective", // or protocol_10_single_objective "n_trials": 30, "sampler": "NSGAIISampler", // or TPESampler, CmaEsSampler "pruner": null, "timeout_per_trial": 600 }, "design_variables": [ { "parameter": "nx_expression_name", "bounds": [min, max], "description": "What this parameter controls" } ], "objectives": [ { "name": "objective_name", "goal": "minimize", // or "maximize" "weight": 1.0, "description": "What this measures", "target": 100.0, // optional "extraction": { "action": "extract_mass", // or extract_stress, extract_displacement, etc. "domain": "result_extraction", "params": { "result_type": "mass", "metric": "total" } } } ], "constraints": [ { "name": "constraint_name", "type": "less_than", // or "greater_than" "threshold": 100.0, "description": "Engineering justification", "extraction": { "action": "extract_displacement", "domain": "result_extraction", "params": { "result_type": "displacement", "metric": "max" } } } ], "simulation": { "model_file": "Model.prt", "sim_file": "Model_sim1.sim", "fem_file": "Model_fem1.fem", "solver": "nastran", "analysis_types": ["static", "modal"] }, "reporting": { "generate_plots": true, "save_incremental": true, "llm_summary": false } } ``` ## Field Name Standards **IMPORTANT**: Use these field names (not legacy alternatives): | Field | Standard Name | Legacy (DON'T USE) | |-------|--------------|-------------------| | Objective direction | `"goal"` | `"type"` | | Design var bounds | `"bounds": [min, max]` | `"min": X, "max": Y"` | | Design var name | `"parameter"` | `"name"` | | Constraint limit | `"threshold"` | `"value"` | ## File Location Standard Configuration files **MUST** be in the `1_setup/` directory: ``` studies/your_study/ ├── 1_setup/ │ ├── optimization_config.json ← HERE │ └── workflow_config.json ├── 2_results/ └── run_optimization.py ``` ## Validation Rules The schema enforces: 1. **Study Name**: Lowercase with underscores, 3-100 characters 2. **Design Variable Bounds**: min < max 3. **Multi-Objective Consistency**: - 2-3 objectives → protocol_11_multi_objective + NSGAIISampler - 1 objective → protocol_10_single_objective + TPESampler/CmaEsSampler 4. **Extraction Specs**: All objectives and constraints must have extraction blocks 5. **File Extensions**: .prt, .sim, .fem 6. **Analysis Types**: static, modal, thermal, or buckling ## Common Validation Errors ### Error: "min must be < max" ```json // BAD {"parameter": "thickness", "bounds": [10, 5]} // GOOD {"parameter": "thickness", "bounds": [5, 10]} ``` ### Error: "Multi-objective should use NSGAIISampler" ```json // BAD { "objectives": [{...}, {...}], // 2 objectives "optimization_settings": {"sampler": "TPESampler"} // Wrong sampler! } // GOOD { "objectives": [{...}, {...}], "optimization_settings": {"sampler": "NSGAIISampler"} } ``` ### Error: "Config should be in 1_setup/" Move your configuration file from study root to `1_setup/` directory. ## Dependencies The ConfigManager requires: ```bash pip install jsonschema>=4.17.0 ``` ## Migration from Legacy Format If you have old configuration files with: - `"type"` instead of `"goal"` in objectives - `"min"/"max"` instead of `"bounds"` in design variables - `"name"` instead of `"parameter"` in design variables - `"value"` instead of `"threshold"` in constraints See the migration tool (coming in Phase 1.2.1): ```bash python optimization_engine/config_migrator.py studies/old_study/optimization_config.json ``` ## References - [Phase 1.2 Implementation Plan](../../docs/07_DEVELOPMENT/Phase_1_2_Implementation_Plan.md) - [create-study Claude Skill](../../.claude/skills/create-study.md) - [drone_gimbal_arm Example](../../studies/drone_gimbal_arm_optimization/1_setup/optimization_config.json) ## Questions? For MVP development questions, refer to [DEVELOPMENT.md](../../DEVELOPMENT.md) or the MVP plan in `docs/07_DEVELOPMENT/Today_Todo.md`.