"""Global configuration for the Physics-Informed Bayesian Optimization platform.""" from dataclasses import dataclass, field from enum import Enum from typing import Optional class OptimizerBackend(Enum): BOTORCH = "botorch" AX = "ax" BOFIRE = "bofire" class AcquisitionType(Enum): EXPECTED_IMPROVEMENT = "EI" UPPER_CONFIDENCE_BOUND = "UCB" PROBABILITY_OF_IMPROVEMENT = "PI" KNOWLEDGE_GRADIENT = "KG" NOISY_EXPECTED_IMPROVEMENT = "NEI" PHYSICS_INFORMED_EI = "PI_EI" # Custom: penalizes physically implausible regions @dataclass class OptimizationConfig: """Configuration for a Bayesian optimization run.""" # Backend selection backend: OptimizerBackend = OptimizerBackend.BOTORCH # Acquisition function acquisition_type: AcquisitionType = AcquisitionType.EXPECTED_IMPROVEMENT # Optimization settings n_initial_samples: int = 10 batch_size: int = 1 max_iterations: int = 50 seed: int = 42 # GP settings use_physics_mean: bool = True learn_noise: bool = True noise_variance: float = 0.01 # Physics model settings physics_model_weight: float = 1.0 # Weight of physics prior (0=pure GP, 1=full physics) physics_constraint_penalty: float = 10.0 # Multi-fidelity settings use_multi_fidelity: bool = False fidelity_weights: Optional[dict] = None # Hardware device: str = "cpu" dtype: str = "float64" @dataclass class SearchSpaceConfig: """Configuration for the search/parameter space.""" normalize_inputs: bool = True standardize_outputs: bool = True input_transform: Optional[str] = None output_transform: Optional[str] = None