18 | module BayesianOptimization.Acquisition
20 | import Control.Monad.Reader
21 | import Control.Monad.Identity
22 | import public Data.Nat
28 | %prefix_record_projections off
32 | record DataModel modelType {auto probabilisticModel : ProbabilisticModel f t marginal modelType} where
33 | constructor MkDataModel
39 | dataset : Dataset f t
41 | %prefix_record_projections on
50 | Acquisition : (0 batchSize : Nat) -> {auto 0 _ : GT batchSize 0} -> (0 features : Shape) -> Type
51 | Acquisition batchSize features = Tensor (batchSize :: features) F64 -> Tag $
Tensor [] F64
59 | expectedImprovement :
60 | ProbabilisticModel features [1] Gaussian m =>
62 | (best : Tensor [] F64) ->
63 | Acquisition 1 features
64 | expectedImprovement model best at = do
66 | marginal <- tag =<< marginalise model at
67 | let best' = broadcast {to = [_, 1]} best
68 | pdf <- tag =<< pdf marginal best'
69 | cdf <- tag =<< cdf marginal best'
70 | let mean = squeeze !(mean {event = [1]} {dim = 1} marginal)
71 | variance = squeeze !(variance {event = [1]} marginal)
72 | pure $
(best - mean) * cdf + variance * pdf
77 | expectedImprovementByModel :
78 | ProbabilisticModel features [1] Gaussian modelType =>
79 | ReaderT (DataModel modelType) Tag $
Acquisition 1 features
80 | expectedImprovementByModel = MkReaderT $
\env => do
81 | marginal <- marginalise env.model env.dataset.features
82 | best <- tag $
squeeze !(reduce @{Min} [0] !(mean {event = [1]} marginal))
83 | pure $
expectedImprovement env.model best
88 | probabilityOfFeasibility :
89 | (limit : Tensor [] F64) ->
90 | ClosedFormDistribution [1] dist =>
91 | ProbabilisticModel features [1] dist modelType =>
92 | ReaderT (DataModel modelType) Tag $
Acquisition 1 features
93 | probabilityOfFeasibility limit =
94 | asks $
\env, at => do cdf !(marginalise env.model at) (broadcast {to = [_, 1]} limit)
101 | negativeLowerConfidenceBound :
103 | {auto 0 betaNonNegative : beta >= 0 = True} ->
104 | ProbabilisticModel features [1] Gaussian modelType =>
105 | ReaderT (DataModel modelType) Tag $
Acquisition 1 features
106 | negativeLowerConfidenceBound beta = asks $
\env, at => do
107 | marginal <- tag =<< marginalise env.model at
109 | !(mean {event = [1]} marginal) - fromDouble beta * !(variance {event = [1]} marginal)
118 | expectedConstrainedImprovement :
119 | (limit : Tensor [] F64) ->
120 | ProbabilisticModel features [1] Gaussian modelType =>
121 | ReaderT (DataModel modelType) Tag (Acquisition 1 features -> Acquisition 1 features)