Files
Atomizer/optimization_engine/schemas/README.md

214 lines
5.6 KiB
Markdown
Raw Normal View History

feat: Add configuration validation system for MVP stability (Phase 1.2) Implements JSON Schema validation for optimization configurations to ensure consistency across all studies and prevent configuration errors. Added: - optimization_engine/schemas/optimization_config_schema.json - Comprehensive schema for Protocol 10 & 11 configurations - Validates objectives, constraints, design variables, simulation settings - Enforces standard field names (goal, bounds, parameter, threshold) - optimization_engine/config_manager.py - ConfigManager class with schema validation - CLI tool: python config_manager.py <config.json> - Type-safe accessor methods for config elements - Custom validations: bounds check, multi-objective consistency, location check - optimization_engine/schemas/README.md - Complete documentation of standard configuration format - Validation examples and common error fixes - Migration guidance for legacy configs - docs/07_DEVELOPMENT/Phase_1_2_Implementation_Plan.md - Detailed implementation plan for remaining Phase 1.2 tasks - Migration tool design, integration guide, testing plan Testing: - Validated drone_gimbal_arm_optimization config successfully - ConfigManager works with drone_gimbal format (new standard) - Identifies legacy format issues in bracket studies Standards Established: - Configuration location: studies/{name}/1_setup/ - Objective direction: "goal" not "type" - Design var bounds: "bounds": [min, max] not "min"/"max" - Design var name: "parameter" not "name" - Constraint threshold: "threshold" not "value" Next Steps (Phase 1.2.1+): - Config migration tool for legacy studies - Integration with run_optimization.py - Update create-study Claude skill with schema reference - Migrate bracket studies to new format Relates to: Phase 1.2 MVP Development Plan 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-24 09:21:55 -05:00
# 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`.