@@ -799,7 +799,7 @@ <h1>Source code for botorch.acquisition.monte_carlo</h1><div class="highlight"><
799
799
< span class ="sd "> non-negative. `qSimpleRegret` acquisition values can be negative, so we instead use</ span >
800
800
< span class ="sd "> a `ConstrainedMCObjective` which applies constraints to the objectives (e.g. before</ span >
801
801
< span class ="sd "> computing the acquisition function) and shifts negative objective values using</ span >
802
- < span class ="sd "> by an infeasible cost to ensure non-negativity (before applying constraints and</ span >
802
+ < span class ="sd "> an infeasible cost to ensure non-negativity (before applying constraints and</ span >
803
803
< span class ="sd "> shifting them back).</ span >
804
804
805
805
< span class ="sd "> Example:</ span >
@@ -868,11 +868,11 @@ <h1>Source code for botorch.acquisition.monte_carlo</h1><div class="highlight"><
868
868
< span class ="sd "> `SampleReducingMCAcquisitionFunction` computes the acquisition values on the sample</ span >
869
869
< span class ="sd "> level and then weights the sample-level acquisition values by a soft feasibility</ span >
870
870
< span class ="sd "> indicator. Hence, it expects non-log acquisition function values to be</ span >
871
- < span class ="sd "> non-negative. `qSimpleRegret ` acquisition values can be negative, so we instead use </ span >
872
- < span class ="sd "> a `ConstrainedMCObjective` which applies constraints to the objectives (e.g. before </ span >
873
- < span class ="sd "> computing the acquisition function) and shifts negative objective values using </ span >
874
- < span class ="sd "> by an infeasible cost to ensure non-negativity (before applying constraints and </ span >
875
- < span class ="sd "> shifting them back).</ span >
871
+ < span class ="sd "> non-negative. `qUpperConfidenceBound ` acquisition values can be negative, so we</ span >
872
+ < span class ="sd "> instead use a `ConstrainedMCObjective` which applies constraints to the objectives</ span >
873
+ < span class ="sd "> (e.g. before computing the acquisition function) and shifts negative objective</ span >
874
+ < span class ="sd "> values using an infeasible cost to ensure non-negativity (before applying</ span >
875
+ < span class ="sd "> constraints and shifting them back).</ span >
876
876
877
877
< span class ="sd "> Example:</ span >
878
878
< span class ="sd "> >>> model = SingleTaskGP(train_X, train_Y)</ span >
@@ -946,6 +946,76 @@ <h1>Source code for botorch.acquisition.monte_carlo</h1><div class="highlight"><
946
946
< span class ="w "> </ span > < span class ="sd "> """Multiply beta prime by -1 to get the lower confidence bound."""</ span >
947
947
< span class ="k "> return</ span > < span class ="o "> -</ span > < span class ="nb "> super</ span > < span class ="p "> ()</ span > < span class ="o "> .</ span > < span class ="n "> _get_beta_prime</ span > < span class ="p "> (</ span > < span class ="n "> beta</ span > < span class ="o "> =</ span > < span class ="n "> beta</ span > < span class ="p "> )</ span > </ div >
948
948
949
+
950
+
951
+ < div class ="viewcode-block " id ="qPosteriorStandardDeviation ">
952
+ < a class ="viewcode-back " href ="../../../acquisition.html#botorch.acquisition.monte_carlo.qPosteriorStandardDeviation "> [docs]</ a >
953
+ < span class ="k "> class</ span > < span class ="w "> </ span > < span class ="nc "> qPosteriorStandardDeviation</ span > < span class ="p "> (</ span > < span class ="n "> SampleReducingMCAcquisitionFunction</ span > < span class ="p "> ):</ span >
954
+ < span class ="w "> </ span > < span class ="sa "> r</ span > < span class ="sd "> """MC-based batch Posterior Standard Deviation.</ span >
955
+
956
+ < span class ="sd "> An acquisition function for pure exploration.</ span >
957
+
958
+ < span class ="sd "> Example:</ span >
959
+ < span class ="sd "> >>> model = SingleTaskGP(train_X, train_Y)</ span >
960
+ < span class ="sd "> >>> sampler = SobolQMCNormalSampler(1024)</ span >
961
+ < span class ="sd "> >>> qPSTD = qPosteriorStandardDeviation(model, sampler)</ span >
962
+ < span class ="sd "> >>> std = qPSTD(test_X)</ span >
963
+ < span class ="sd "> """</ span >
964
+
965
+ < span class ="k "> def</ span > < span class ="w "> </ span > < span class ="fm "> __init__</ span > < span class ="p "> (</ span >
966
+ < span class ="bp "> self</ span > < span class ="p "> ,</ span >
967
+ < span class ="n "> model</ span > < span class ="p "> :</ span > < span class ="n "> Model</ span > < span class ="p "> ,</ span >
968
+ < span class ="n "> sampler</ span > < span class ="p "> :</ span > < span class ="n "> MCSampler</ span > < span class ="o "> |</ span > < span class ="kc "> None</ span > < span class ="o "> =</ span > < span class ="kc "> None</ span > < span class ="p "> ,</ span >
969
+ < span class ="n "> objective</ span > < span class ="p "> :</ span > < span class ="n "> MCAcquisitionObjective</ span > < span class ="o "> |</ span > < span class ="kc "> None</ span > < span class ="o "> =</ span > < span class ="kc "> None</ span > < span class ="p "> ,</ span >
970
+ < span class ="n "> posterior_transform</ span > < span class ="p "> :</ span > < span class ="n "> PosteriorTransform</ span > < span class ="o "> |</ span > < span class ="kc "> None</ span > < span class ="o "> =</ span > < span class ="kc "> None</ span > < span class ="p "> ,</ span >
971
+ < span class ="n "> X_pending</ span > < span class ="p "> :</ span > < span class ="n "> Tensor</ span > < span class ="o "> |</ span > < span class ="kc "> None</ span > < span class ="o "> =</ span > < span class ="kc "> None</ span > < span class ="p "> ,</ span >
972
+ < span class ="n "> constraints</ span > < span class ="p "> :</ span > < span class ="nb "> list</ span > < span class ="p "> [</ span > < span class ="n "> Callable</ span > < span class ="p "> [[</ span > < span class ="n "> Tensor</ span > < span class ="p "> ],</ span > < span class ="n "> Tensor</ span > < span class ="p "> ]]</ span > < span class ="o "> |</ span > < span class ="kc "> None</ span > < span class ="o "> =</ span > < span class ="kc "> None</ span > < span class ="p "> ,</ span >
973
+ < span class ="n "> eta</ span > < span class ="p "> :</ span > < span class ="n "> Tensor</ span > < span class ="o "> |</ span > < span class ="nb "> float</ span > < span class ="o "> =</ span > < span class ="mf "> 1e-3</ span > < span class ="p "> ,</ span >
974
+ < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="kc "> None</ span > < span class ="p "> :</ span >
975
+ < span class ="w "> </ span > < span class ="sa "> r</ span > < span class ="sd "> """q-Posterior Standard Deviation.</ span >
976
+
977
+ < span class ="sd "> Args:</ span >
978
+ < span class ="sd "> model: A fitted model.</ span >
979
+ < span class ="sd "> sampler: The sampler used to draw base samples. See `MCAcquisitionFunction`</ span >
980
+ < span class ="sd "> more details.</ span >
981
+ < span class ="sd "> objective: The MCAcquisitionObjective under which the samples are</ span >
982
+ < span class ="sd "> evaluated. Defaults to `IdentityMCObjective()`.</ span >
983
+ < span class ="sd "> posterior_transform: A PosteriorTransform (optional).</ span >
984
+ < span class ="sd "> X_pending: A `batch_shape x m x d`-dim Tensor of `m` design points that have</ span >
985
+ < span class ="sd "> points that have been submitted for function evaluation but have not yet</ span >
986
+ < span class ="sd "> been evaluated. Concatenated into X upon forward call. Copied and set to</ span >
987
+ < span class ="sd "> have no gradient.</ span >
988
+ < span class ="sd "> constraints: A list of constraint callables which map a Tensor of posterior</ span >
989
+ < span class ="sd "> samples of dimension `sample_shape x batch-shape x q x m`-dim to a</ span >
990
+ < span class ="sd "> `sample_shape x batch-shape x q`-dim Tensor. The associated constraints</ span >
991
+ < span class ="sd "> are considered satisfied if the output is less than zero.</ span >
992
+ < span class ="sd "> eta: Temperature parameter(s) governing the smoothness of the sigmoid</ span >
993
+ < span class ="sd "> approximation to the constraint indicators. For more details, on this</ span >
994
+ < span class ="sd "> parameter, see the docs of `compute_smoothed_feasibility_indicator`.</ span >
995
+ < span class ="sd "> """</ span >
996
+ < span class ="nb "> super</ span > < span class ="p "> ()</ span > < span class ="o "> .</ span > < span class ="fm "> __init__</ span > < span class ="p "> (</ span >
997
+ < span class ="n "> model</ span > < span class ="o "> =</ span > < span class ="n "> model</ span > < span class ="p "> ,</ span >
998
+ < span class ="n "> sampler</ span > < span class ="o "> =</ span > < span class ="n "> sampler</ span > < span class ="p "> ,</ span >
999
+ < span class ="n "> objective</ span > < span class ="o "> =</ span > < span class ="n "> objective</ span > < span class ="p "> ,</ span >
1000
+ < span class ="n "> posterior_transform</ span > < span class ="o "> =</ span > < span class ="n "> posterior_transform</ span > < span class ="p "> ,</ span >
1001
+ < span class ="n "> X_pending</ span > < span class ="o "> =</ span > < span class ="n "> X_pending</ span > < span class ="p "> ,</ span >
1002
+ < span class ="n "> constraints</ span > < span class ="o "> =</ span > < span class ="n "> constraints</ span > < span class ="p "> ,</ span >
1003
+ < span class ="n "> eta</ span > < span class ="o "> =</ span > < span class ="n "> eta</ span > < span class ="p "> ,</ span >
1004
+ < span class ="p "> )</ span >
1005
+ < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _scale</ span > < span class ="o "> =</ span > < span class ="n "> math</ span > < span class ="o "> .</ span > < span class ="n "> sqrt</ span > < span class ="p "> (</ span > < span class ="n "> math</ span > < span class ="o "> .</ span > < span class ="n "> pi</ span > < span class ="o "> /</ span > < span class ="mi "> 2</ span > < span class ="p "> )</ span >
1006
+
1007
+ < span class ="k "> def</ span > < span class ="w "> </ span > < span class ="nf "> _sample_forward</ span > < span class ="p "> (</ span > < span class ="bp "> self</ span > < span class ="p "> ,</ span > < span class ="n "> obj</ span > < span class ="p "> :</ span > < span class ="n "> Tensor</ span > < span class ="p "> )</ span > < span class ="o "> -></ span > < span class ="n "> Tensor</ span > < span class ="p "> :</ span >
1008
+ < span class ="w "> </ span > < span class ="sa "> r</ span > < span class ="sd "> """Evaluate qPosteriorStandardDeviation per sample on the candidate set `X`.</ span >
1009
+
1010
+ < span class ="sd "> Args:</ span >
1011
+ < span class ="sd "> obj: A `sample_shape x batch_shape x q`-dim Tensor of MC objective values.</ span >
1012
+
1013
+ < span class ="sd "> Returns:</ span >
1014
+ < span class ="sd "> A `sample_shape x batch_shape x q`-dim Tensor of acquisition values.</ span >
1015
+ < span class ="sd "> """</ span >
1016
+ < span class ="n "> mean</ span > < span class ="o "> =</ span > < span class ="n "> obj</ span > < span class ="o "> .</ span > < span class ="n "> mean</ span > < span class ="p "> (</ span > < span class ="n "> dim</ span > < span class ="o "> =</ span > < span class ="mi "> 0</ span > < span class ="p "> )</ span >
1017
+ < span class ="k "> return</ span > < span class ="p "> (</ span > < span class ="n "> obj</ span > < span class ="o "> -</ span > < span class ="n "> mean</ span > < span class ="p "> )</ span > < span class ="o "> .</ span > < span class ="n "> abs</ span > < span class ="p "> ()</ span > < span class ="o "> *</ span > < span class ="bp "> self</ span > < span class ="o "> .</ span > < span class ="n "> _scale</ span > </ div >
1018
+
949
1019
</ pre > </ div >
950
1020
</ div >
951
1021
</ div >
0 commit comments