File size: 1,752 Bytes
706ff1c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | """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
|