Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-28 07:12:52

0001 """Optimization configuration models."""
0002 
0003 from typing import Dict, Optional, List, Any
0004 from pydantic import BaseModel, Field
0005 from .optimization_registry import get_algorithm_config_model
0006 
0007 
0008 class OptimizerConfig(BaseModel):
0009     """Configuration for the optimizer algorithm."""
0010     name: str  # e.g., "MOBO", "Genetic", "RandomSearch"
0011     type: str  # e.g., "Bayesian", "evolutionary", "grid"
0012     
0013     # Algorithm-specific parameters
0014     parameters: Dict[str, Any] = Field(default_factory=dict)
0015 
0016 
0017 class OptimizationConfiguration(BaseModel):
0018     """Complete optimization configuration."""
0019     name: str
0020     description: Optional[str] = ""
0021     
0022     # Optimization parameters
0023     optimizer: OptimizerConfig
0024     
0025     # Objective definitions
0026     objectives: List[str] = Field(default_factory=list)  # e.g., ["minimize:f1", "maximize:f2"]
0027     
0028     # Constraint definitions
0029     constraints: List[str] = Field(default_factory=list)  # e.g., ["x1 < 10", "x2 > 0"]
0030     
0031     # Search space configuration
0032     n_iterations: int = 100
0033     n_initial_samples: int = 10
0034     parallel_evaluations: int = 1
0035 
0036     def parse_algorithm_params(self) -> Optional[BaseModel]:
0037         """
0038         If an algorithm-specific config model is registered under `optimizer.name`,
0039         parse and return a validated model instance for `optimizer.parameters`.
0040         Returns None if no model is registered.
0041         """
0042         Model = get_algorithm_config_model(self.optimizer.name)
0043         if Model:
0044             return Model(**(self.optimizer.parameters or {}))
0045         return None