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