|
35 | 35 | phi, |
36 | 36 | ) |
37 | 37 | from botorch.utils.safe_math import log1mexp, logmeanexp |
38 | | -from botorch.utils.transforms import convert_to_target_pre_hook, t_batch_mode_transform |
| 38 | +from botorch.utils.transforms import ( |
| 39 | + average_over_ensemble_models, |
| 40 | + convert_to_target_pre_hook, |
| 41 | + t_batch_mode_transform, |
| 42 | +) |
39 | 43 | from gpytorch.likelihoods.gaussian_likelihood import FixedNoiseGaussianLikelihood |
40 | 44 | from torch import Tensor |
41 | 45 | from torch.nn.functional import pad |
@@ -154,6 +158,7 @@ def __init__( |
154 | 158 | self.maximize = maximize |
155 | 159 |
|
156 | 160 | @t_batch_mode_transform(expected_q=1) |
| 161 | + @average_over_ensemble_models |
157 | 162 | def forward(self, X: Tensor) -> Tensor: |
158 | 163 | r"""Evaluate the Log Probability of Improvement on the candidate set X. |
159 | 164 |
|
@@ -208,6 +213,7 @@ def __init__( |
208 | 213 | self.maximize = maximize |
209 | 214 |
|
210 | 215 | @t_batch_mode_transform(expected_q=1) |
| 216 | + @average_over_ensemble_models |
211 | 217 | def forward(self, X: Tensor) -> Tensor: |
212 | 218 | r"""Evaluate the Probability of Improvement on the candidate set X. |
213 | 219 |
|
@@ -258,6 +264,7 @@ def __init__( |
258 | 264 | self.register_buffer("best_f", best_f) |
259 | 265 |
|
260 | 266 | @t_batch_mode_transform() |
| 267 | + @average_over_ensemble_models |
261 | 268 | def forward(self, X: Tensor) -> Tensor: |
262 | 269 | """Evaluate approximate qPI on the candidate set X. |
263 | 270 |
|
@@ -334,6 +341,7 @@ def __init__( |
334 | 341 | self.maximize = maximize |
335 | 342 |
|
336 | 343 | @t_batch_mode_transform(expected_q=1) |
| 344 | + @average_over_ensemble_models |
337 | 345 | def forward(self, X: Tensor) -> Tensor: |
338 | 346 | r"""Evaluate Expected Improvement on the candidate set X. |
339 | 347 |
|
@@ -397,6 +405,7 @@ def __init__( |
397 | 405 | self.maximize = maximize |
398 | 406 |
|
399 | 407 | @t_batch_mode_transform(expected_q=1) |
| 408 | + @average_over_ensemble_models |
400 | 409 | def forward(self, X: Tensor) -> Tensor: |
401 | 410 | r"""Evaluate logarithm of Expected Improvement on the candidate set X. |
402 | 411 |
|
@@ -578,6 +587,7 @@ def __init__( |
578 | 587 | self.register_forward_pre_hook(convert_to_target_pre_hook) |
579 | 588 |
|
580 | 589 | @t_batch_mode_transform(expected_q=1) |
| 590 | + @average_over_ensemble_models |
581 | 591 | def forward(self, X: Tensor) -> Tensor: |
582 | 592 | r"""Evaluate Constrained Log Expected Improvement on the candidate set X. |
583 | 593 |
|
@@ -647,6 +657,7 @@ def __init__( |
647 | 657 | self.register_forward_pre_hook(convert_to_target_pre_hook) |
648 | 658 |
|
649 | 659 | @t_batch_mode_transform(expected_q=1) |
| 660 | + @average_over_ensemble_models |
650 | 661 | def forward(self, X: Tensor) -> Tensor: |
651 | 662 | r"""Evaluate Constrained Log Probability of Feasibility on the candidate set X. |
652 | 663 |
|
@@ -722,6 +733,7 @@ def __init__( |
722 | 733 | self.register_forward_pre_hook(convert_to_target_pre_hook) |
723 | 734 |
|
724 | 735 | @t_batch_mode_transform(expected_q=1) |
| 736 | + @average_over_ensemble_models |
725 | 737 | def forward(self, X: Tensor) -> Tensor: |
726 | 738 | r"""Evaluate Constrained Expected Improvement on the candidate set X. |
727 | 739 |
|
@@ -810,6 +822,7 @@ def __init__( |
810 | 822 | self.best_f, self.maximize = best_f, maximize |
811 | 823 |
|
812 | 824 | @t_batch_mode_transform(expected_q=1) |
| 825 | + @average_over_ensemble_models |
813 | 826 | def forward(self, X: Tensor) -> Tensor: |
814 | 827 | r"""Evaluate logarithm of the mean Expected Improvement on the candidate set X. |
815 | 828 |
|
@@ -894,6 +907,7 @@ def __init__( |
894 | 907 | super().__init__(model=fantasy_model, best_f=best_f, maximize=maximize) |
895 | 908 |
|
896 | 909 | @t_batch_mode_transform(expected_q=1) |
| 910 | + @average_over_ensemble_models |
897 | 911 | def forward(self, X: Tensor) -> Tensor: |
898 | 912 | r"""Evaluate Expected Improvement on the candidate set X. |
899 | 913 |
|
@@ -951,6 +965,7 @@ def __init__( |
951 | 965 | self.maximize = maximize |
952 | 966 |
|
953 | 967 | @t_batch_mode_transform(expected_q=1) |
| 968 | + @average_over_ensemble_models |
954 | 969 | def forward(self, X: Tensor) -> Tensor: |
955 | 970 | r"""Evaluate the Upper Confidence Bound on the candidate set X. |
956 | 971 |
|
@@ -1000,6 +1015,7 @@ def __init__( |
1000 | 1015 | self.maximize = maximize |
1001 | 1016 |
|
1002 | 1017 | @t_batch_mode_transform(expected_q=1) |
| 1018 | + @average_over_ensemble_models |
1003 | 1019 | def forward(self, X: Tensor) -> Tensor: |
1004 | 1020 | r"""Evaluate the posterior mean on the candidate set X. |
1005 | 1021 |
|
@@ -1041,6 +1057,7 @@ def __init__( |
1041 | 1057 | self.register_buffer("weights", weights) |
1042 | 1058 |
|
1043 | 1059 | @t_batch_mode_transform() |
| 1060 | + @average_over_ensemble_models |
1044 | 1061 | def forward(self, X: Tensor) -> Tensor: |
1045 | 1062 | r"""Evaluate the scalarized posterior mean on the candidate set X. |
1046 | 1063 |
|
@@ -1108,6 +1125,7 @@ def __init__( |
1108 | 1125 | self.maximize = maximize |
1109 | 1126 |
|
1110 | 1127 | @t_batch_mode_transform(expected_q=1) |
| 1128 | + @average_over_ensemble_models |
1111 | 1129 | def forward(self, X: Tensor) -> Tensor: |
1112 | 1130 | r"""Evaluate the posterior standard deviation on the candidate set X. |
1113 | 1131 |
|
|
0 commit comments