NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #5654 most downloaded on PyPI
Bayesian Optimization in PyTorch
Last release 3 months ago
08 Jun 2026
Ships fairly regularly
a new release about every 3 months
Nearly every release is documented
notes for 57 of 57 stable releases
Nothing withdrawn
no release was ever pulled
7 years old
57 releases · first in 2019
Make JAX/jaxlib/NumPyro optional dependencies, only required for fitting fully Bayesian models via the botorch[fully_bayesian] extra (#3319).
botorch[fully_bayesian] extra (#3319).Replace deprecated torch.inverse/torch.det with torch.linalg equivalents (#3213).
OrthogonalAdditiveGP with component-wise inference (#3187).custom_fit and compute_loss protocols for fitting extensibility (#3232).LatentKroneckerGP with customized GPyTorch inference (#3234).LearnedFeatureImputation input transform and wire transfer-learning
support for MultiTaskGP (#3281, #3285, #3286, #3296, #3299).optimize_acqf (#3241).TorchPosterior for non-MVN distributions in ApproximateGPyTorchModel (#3242).continuous_step crash when fixed_features cover all dims (#3249).HeterogeneousMTGP.posterior() (#3254).fixed_features shape mismatch in infeasible projection (#3259).PairwiseGP stored-state management for eval and CV (#3272).HeterogeneousMTGP (#3294).MultivariateNormalQMCEngine eigendecomposition on
CUDA (#3224).torch.inverse/torch.det with torch.linalg
equivalents (#3213).logsumexp for numerically stable mixture entropy in BALD (#3222).cache_root for low-rank kernels (#3223).taus in MAP SAAS (#3225).ref_point in
optimize_with_nsgaii / MOO input constructors (#3219, #3220, #3229).FitGPyTorchMLL and GetLossClosure dispatchers with isinstance
checks (#3233, #3235)._supports_batched_models attribute to models that don't support
batching (#3239).fixed_features type hints and docstrings in OptimizeAcqfInputs (#3240).separate_mtmvn for the non-interleaved case (#3246).Log outcome transform (#3245).BetaPrior support for correlation parameters and a default
BetaPrior(2.5, 1.5) for MultiTaskGP task covariance, with setting_closure
on PositiveIndexKernel for prior support (#3266, #3267, #3271).qLogEHVI using a fused kernel (#3275).DeprecationWarning in Standardize.untransform_posterior (#3279).MultiTaskGP docstring (#3307).One column per quarter.
Enable creating a new Ax release
post_processing_func in optimize_with_nsgaii for post-processing
optimization results, e.g., to round discrete dimensions to valid values (#3215)Require GPyTorch>=1.15.2 and linear_operator>=0.6.1 (#3182).
ScalarizedPosteriorMean (#3191).candidate_set in qMultiFidelityMaxValueEntropy.__init__ before
passing to super().__init__, allowing candidate_set to be either n x d
(without fidelity dims) or n x (d + s) (with fidelity dims) (#3205).d and target_fidelities required arguments in
project_to_target_fidelity to eliminate silent bugs (#3203).ScalarizedPosteriorMean (#3191).candidate_set in qMultiFidelityMaxValueEntropy.__init__ before
passing to super().__init__, allowing candidate_set to be either n x d
(without fidelity dims) or n x (d + s) (with fidelity dims) (#3205).optimize_acqf_mixed_alternating that may produce candidates with
invalid values when using parameter constraints on discrete parameters (#3212).d and target_fidelities required arguments in
project_to_target_fidelity to eliminate silent bugs (#3203).Remove deprecated APIs for v0.17 (#3134).
TrajectoryPlanningProblem test problem (#3182).NoisyExpectedHypervolumeMixin._initial_hvs (#3090).KroneckerMultiTaskGP.posterior transforming inputs twice (#3132).safe_math.py (#3172).optimize_with_nsgaii (#3116).PosteriorTransform API to optionally accept features X (#3117).get_constants_like usage in botorch/utils/probability (#3131).MultiTaskGP with unobserved tasks (#3145).optimize_acqf_homotopy to support mixed optimization (#3165).SingleTaskMultifidelityGP (#3167).SaasFullyBayesianMultiTaskGP (#3175).HadamardGaussianLikelihood in HeterogeneousMTGP for inferred noise (#3176).PyroModel hierarchy (#3177).get_fitted_map_saas_ensembleqMultiObjectiveMaxValueEntropyFullyBayesianPosteriortask_feature parameter from SingleTaskGP.construct_inputsfixed_features argument from optimize_acqf_homotopymvn_hellinger_distance (#3109).New default parameterization for MultiTaskGP (#3049). See discussion: https://github.com/meta-pytorch/botorch/discussions/3065
New default parameterization for MultiTaskGP (#3049).
See discussion: https://github.com/meta-pytorch/botorch/discussions/3065
PositiveIndexKernel (#3047).Add HeterogeneousMTGP for transfer learning between different search spaces (#3073).
MCSampler (#3062).qNegIntegratedPosteriorVariance (#3068).EnsembleMapSaasSingleTaskGP for consistency when loading state dict (#3069).options arguments in gen_candidates_torch (#3019).cache_root based on whether the model supports it (#3075).nanmean and nanstd in Standardize outcome transform (#3072).Deprecate get_fitted_map_saas_ensemble() in favor of EnsembleMapSaasSingleTaskGP (#3036).
EnsembleMapSaasSingleTaskGP (#3035, #3038, #3040).MultitaskGP (#2997).LatentKroneckerGP model to support different T values at train and test time (#3032, #3037).qHypervolumeKnowledgeGradient to return log values for better numerical stability (#2974, #2976, #2979).NumericToCategoricalEncoding input transform (#2907).MatheronPathModel - a DeterministicModel returning a Matheron path sample (#2984).EnsembleModel and EnsemblePosterior (#2993).optimize_acqf_mixed_alternating initialization with categorical features (#2986).IIDNormalSampler for PosteriorList by default to fix issue with correlated Sobol samples (#2977).condition_on_observations to correctly apply input transforms and properly add data to train_inputs (#2989, #2990, #3034).AdditiveMapSaasSingleTaskGP (#3042).qNEHVI handles pending points to avoid duplicate suggestions when initial pending points are passed (#2985).LogConstrainedExpectedImprovement (#2973).AnalyticAcquisitionFunction._mean_and_sigma() return output dim consistently (#3028).optimize_acqf_mixed_alternating (#3041).ContextualDataset.__eq__() (#3005).py.typed file to precent tools complainnig about type stubs (#2982).get_fitted_map_saas_ensemble() in favor of EnsembleMapSaasSingleTaskGP (#3036).MCAcquisition support to PFNModel (#3031).PFNModel (#3045).PFNModel to load checkpoints from trainings done with automl/PFNs (#3017).This is a compatibility release, coming only one week after 0.15.0.
This is a compatibility release, coming only one week after 0.15.0.
optimize_acqf (#2931).NP Regression Model w/ LIG Acquisition (#2683).
condition_on_observations in FullyBayesianMultiTaskGP (#2871).optimize_acqf_mixed_alternating:
optimize_acqf_mixed_alternating (#2923).optimize_acqf_mixed_alternating (#2942).optimize_acqf_mixed_alternating (#2944).Y vs global Y_Train in generate_batch function in TURBO tutorial (#2862).FullyBayesianMTGP (#2875).is_non_dominated (#2925).qLowerBoundMaxValueEntropy (#2930).VBLLModel posterior doesn't work with single value tensor (#2929).LogProbabilityOfFeasibility (#2945).AugmentedRosenbrock problem and expand testing for optimizers (#2950).optimize_acqf (#2865).average_over_ensemble_models decorator for acquisition functions (#2873).MultiTask / FullyBayesianMultiTaskGP to use ProductKernel and IndexKernel (#2908).separate_mtmvn (#2920).StoppingCriterion (#2927).Remove deprecated gp_sampling module (#2768).
Models (#2754).gen_candidates_scipy and error out for infeasible candidates (#2737).return_best_only=True (#2778).evaluation_mask mask in ModelListGP (#2735).qLogNEI via incremental argument to qLogNoisyExpectedImprovement (#2760).[q]LogProbabilityOfFeasibility acquisition functions (#2815).dtype from best_f buffers (#2725).dtype/nan issue in StratifiedStandardize (#2757).AdditiveMapSaasSingleTaskGP with outcome transforms (#2763).initialize_q_batch always includes the maximum value when called in batch mode (#2773).gen_candidates_scipy to avoid test failure due to new warning (#2797).max_hv and reference point for Penicillin problem (#2771).nonlinear_constraint_is_feasible to return a boolean tensor (#2731).qLogNEI by default (#2762).LogEI: select cache_root based on model support (#2820).gp_sampling module (#2768).qMultiObjectiveMaxValueEntropy acquisition function (#2800).BoTorch website has been upgraded to utilize Docusaurus v3, with the API reference being hosted by ReadTheDocs. The tutorials now expose an option to
RobustRelevancePursuitSingleTaskGP, a robust Gaussian process model that adaptively identifies
outliers and leverages Bayesian model selection (paper) (#2608, #2690, #2707).LatentKroneckerGP, a scalable model for data on partially observed grids, like the joint modeling
of hyper-parameters and partially completed learning curves in AutoML (paper) (#2647).mpmath dependency pin (#2640).threadpoolctl in minimize_with_timeout to prevent CPU oversubscription (#2712).BatchBroadcastedTransformList, which broadcasts a list of InputTransforms over batch shapes (#2558).InteractionFeatures input transform (#2560).percentile_of_score, which takes inputs data and score, and returns the percentile of
values in data that are below score (#2568).optimize_acqf_mixed_alternating, which supports optimization over mixed discrete & continuous spaces (#2573).PosteriorTransform to get_optimal_samples and optimize_posterior_samples (#2576).X_avoid in optimize_acqf_discrete (#2593).qPosteriorStandardDeviation acquisition function (#2634).optimize_acqf_homotopy (#2639).InfeasibilityError exception class (#2652).InputTransforms in SparseOutlierLikelihood and get_posterior_over_support (#2659).StratifiedStandardize outcome transform (#2671).center argument to Normalize (#2680).Warp input transform (#2692).SingleTaskGP models in ModelListGP (#2693).batch_cross_validation (#2554).posterior method in BatchedMultiOutputGPyTorchModel for tracing JIT (#2592).as_tensor argument of set_tensors_from_ndarray_1d (#2615).optimize_acqf_mixed that can't satisfy the parameter constraints (#2614).get_default_partitioning_alpha for >7 objectives (#2646).sample_hypersphere (#2688).optimize_objective with fixed features (#2691).FullyBayesianSingleTaskGP.train should not return None (#2702).KroneckerMultiTaskGP (#2460).HigherOrderGP to use new priors & standardize outcome transform by default (#2555).initialize_q_batch methods to return both candidates and the corresponding acquisition values (#2571).optimize_acqf_homotopy explicit (#2588).trial_indices argument to SupervisedDataset (#2595).Modules by default (#2607).ConstrainedMaxPosteriorSampling (#2622).clone method to datasets (#2625).optimize_acqf_mixed_alternating (#2635).qLogNEI._get_samples_and_objectives to support multiple input batches (#2649).X to OutcomeTransforms (#2663).optimize_acqf_discrete_local_search (#2682).HeteroskedasticSingleTaskGP (#2616).FixedNoiseDataset (#2626).maximize option from information theoretic acquisition functions (#2590).Remove deprecated FixedNoiseGP (#2536).
PairwiseGP; for models that utilize a
composite kernel, such as multi-fidelity/task/context, this change only
affects the base kernel (#2449, #2450, #2507).Standarize by default in all the models using the upgraded priors. In
addition to reducing the amount of boilerplate needed to initialize a model,
this change was motivated by the change to default priors, because the new
priors will work less well when data is not standardized. Users who do not
want to use transforms should explicitly pass in None (#2458, #2532).PathwiseThompsonSampling acquisition function (#2443).qBayesianActiveLearningByDisagreement to accept a posterior
transform, and improve its implementation (#2457).SaasPyroModel to sample via NUTS when training data is empty (#2465).qBayesianActiveLearningByDisagreement (#2475).qNegIntegratedPosteriorVariance (#2477).qLowerConfidenceBound (#2517).qMultiFidelityHypervolumeKnowledgeGradient (#2524).posterior_transform to ApproximateGPyTorchModel.posterior (#2531).batch_shape default in OrthogonalAdditiveKernel (#2473).HitAndRunPolytopeSampler (#2502).generation/gen.py (#2504).X_pending is set on the underlying AcquisitionFunction
in prior-guided AcquisitionFunction (#2505).current_value in input constructor for qMultiFidelityKnowledgeGradient (#2519).fval in torch_minimize to remove an opportunity for memory leaks
(#2529).get_polytope_samples
(#2469).Standardize unnecessarily, and other
simplifications and cleanup (#2462, #2463, #2490, #2495, #2496, #2498, #2499).FixedNoiseGP (#2536).qHypervolumeKnowledgeGradient helpers
(#2486).botorch/acquisition/multi_objective directory structure (#2485).AffineInputTransform, always require data to have at least two
dimensions (#2518).data_fidelity to SingleTaskMultiFidelityGP and
deprecated model FixedNoiseMultiFidelityGP (#2532).OptimizationGradientError when optimization produces NaN gradients (#2537).torch.log(1 + x) with torch.log1p(x)
and torch.exp(x) - 1 with torch.special.expm1 (#2539, #2540, #2541).Reap deprecated kwargs argument from optimize_acqf variants (#2390).
MultiTaskGP (#2375).DeterministicModel using a Matheron path (#2435).**kwargs argument from optimize_acqf variants (#2390).DeterministicPosterior and DeterministicSampler (#2391, #2409, #2410).CachedCholeskyMCAcquisitionFunction (#2399).gp_sampling module in favor of pathwise sampling (#2432).sample_all_priors to not sample one value for all lengthscales (#2404).(Log)NoisyExpectedImprovement create a correct fantasy model with
non-default SingleTaskGP (#2414).**kwargs arguments in qLogNEI (#2406).NumericsWarning for Legacy EI implementations (#2429).Support picking best of multiple fit attempts in fit_gpytorch_mll (#2373).
qLogNParEGO (#2364).fit_gpytorch_mll (#2373).UnstandardizeMCMultiOutputObjective and UnstandardizePosteriorTransform (#2362).sample_polytope (#2290).None so that 0.0 isn't ignored (#2348).sample_polytope (#2353).normalize & unnormalize when lower & upper bounds are equal (#2363).sample_all_priors to support wider set of priors (#2371).is_non_dominated behavior with NaN (#2332).qEUBO (#2335).LogEI as a baseline in the TuRBO tutorial (#2355).Remove deprecated args from base MCSampler (#2228).
Model.construct_inputs (#2186).ModelList and ModelListGP subset_output behavior (#2231).mean and interior_point of LinearEllipticalSliceSampler have correct shapes (#2245).LCEMGP (#2260).batch_cross_validation, support for model init kwargs (#2269).all_tasks for MTGPs (#2271).LinearEllipticalSliceSampler (#2283).qNIPV a subclass of AcquisitionFunction rather than AnalyticAcquisitionFunction (#2286).LCEMGP & define construct_inputs (#2291).MCSampler (#2228).botorch/generation/gen/minimize (#2229).fit_gpytorch_model (#2250).requires_grad_ctx (#2252).base_samples argument of GPyTorchPosterior.rsample (#2254).mvn argument to GPyTorchPosterior (#2255).Posterior.event_shape (#2320).**kwargs & deprecated indices argument of Round transform (#2321).Standardize.load_state_dict (#2322).FixedNoiseMultiTaskGP (#2323).Reap deprecated support for objective with 1 arg in GenericMCObjective (#2199).
qEUBO preferential acquisition function (#2192).condition_on_observations in fully Bayesian models (#2151).q > 1 (#2168).X_pending from qMultiFidelityLowerBoundMaxValueEntropy constructor (#2193).data_fidelities=[] in SingleTaskMultiFidelityGP (#2195).EHVI, qEHVI, and qLogEHVI input constructors (#2196).qMultiFidelityMaxValueEntropy (#2198)._is_non_dominated_loop (#2203).MVaR risk measure (#2150).ModelListGP (#2154).ContextualDataset (#2155).HVKG sampler to reflect the number of model outputs (#2160).OneHotToNumeric that the categoricals are the trailing dimensions (#2166).q(Log)EI's best_f and compute_best_feasible_objective (#2171).PairwiseGP logic (#2176).PBO in EUBO's input constructor (#2178).posterior_transform to qMaxValueEntropySearch's input constructor (#2181).GenericMCObjective (#2199).get_objective_weights_transform (#2200).ContextualDataset (#2205).(Identity)AnalyticMultiOutputObjective (#2208).soft_eval_constraint (#2223). Please use botorch.utils.sigmoid instead.mpmath <= 1.3.0 to avoid CI breakages due to removed modules in the latest alpha release (#2222).Hypervolume Knowledge Gradient (HVKG):
Hypervolume Knowledge Gradient (HVKG):
qHypervolumeKnowledgeGradient, which seeks to maximize the difference in hypervolume of the hypervolume-maximizing set of a fixed size after conditioning the unknown observation(s) that would be received if X were evaluated (#1950, #1982, #2101).Other new features:
MultiOutputFixedCostModel, which is useful for decoupled scenarios where the objectives have different costs (#2093).q > 1 in acquisition function optimization when nonlinear constraints are present (#1793).FixedNoiseGaussianLikelihood when noise is known and X is empty (#2090).LearnedObjective compatible with constraints in acquisition functions regardless of sample_shape (#2111).qExpectedImprovement, qLogExpectedImprovement, and qProbabilityOfImprovement compatible with LearnedObjective regardless of sample_shape (#2115).qSimpleRegret (#2141).LearnedObjective (#2095).X with or without fidelity dimensions in project_to_target_fidelity (#2102).FullyBayesianPosterior to GaussianMixturePosterior; add _is_ensemble and _is_fully_bayesian attributes to Model (#2108).Re-establish compatibility with PyTorch 1.13.1 (#2083).
FixedNoiseGP and FixedNoiseMultiFidelityGP have been deprecated, their functionalities merged into SingleTaskGP and SingleTaskMultiFidelityGP, respect…
qLogEHVI (#2036).qLogNEHVI (#2045, #2046, #2048, #2051).LogEI-type acquisition functions (#2058).FixedNoiseGP and FixedNoiseMultiFidelityGP have been deprecated, their functionalities merged into SingleTaskGP and SingleTaskMultiFidelityGP, respectively (#2052, #2053).numpy_converter, fit_gpytorch_scipy, fit_gpytorch_torch, _get_extra_mll_args (#1995, #2050).SingleTaskMultiFidelityGP and (deprecated) FixedNoiseMultiFidelityGP models (#1956).logsumexp and fatmax to handle infinities and control asymptotic behavior in "Log" acquisition functions (#1999).MultiTaskDataset (#2015, #2019).MixedSingleTaskGP (#2054).PosteriorStandardDeviation acquisition function (#2060).qMaxValueEntropy and qMultiFidelityKnowledgeGradient (#1989).LearnedObjective (#2006).FixedNoiseGP and outcome transforms and use FantasizeMixin (#2011).LearnedObjective base sample shape (#2021).prune_inferior_points (#2069).PenalizedMCObjective (#2073).Dataset equality checks (#2077).**kwargs in input_constructors except for a defined set of exceptions (#1872, #1985).botorch.acquisition.utils (#1986).weights argument of RiskMeasureMCObjective and squeeze_last_dim (#1994).X, Y, Yvar into properties in datasets (#2004).SyntheticTestFunction (#2029).construct_inputs to contextual GP models LCEAGP and SACGP (#2057).This release fixes bugs that affected Ax's modular BotorchModel and silently ignored outcome constraints due to naming mismatches.
This release fixes bugs that affected Ax's modular BotorchModel and silently ignored outcome constraints due to naming mismatches.
BotorchModel and the BoTorch's acquisition input constructors, leading to outcome constraints in Ax not being used with single-objective acquisition functions in Ax's modular BotorchModel. The naming has been updated in Ax and consistent naming is now used in input constructors for single and multi-objective acquisition functions in BoTorch.constraints in qNoisyLogExpectedImprovement, which kept constraints from being used.compute_best_feasible_objective that could lead to -inf incumbent values.get_polytope_samples (#1968)SupervisedDataset and FixedNoiseDataset (#1945).This is a very minor release; the only change from v0.9.0 is that the linear_operator dependency was bumped to 0.5.1 (#1963). This was needed since a
This is a very minor release; the only change from v0.9.0 is that the linear_operator dependency was bumped to 0.5.1 (#1963). This was needed since a bug in linear_operator 0.5.0 caused failures with some BoTorch models.
Support inferred noise in SaasFullyBayesianMultiTaskGP (#1809).
SaasFullyBayesianMultiTaskGP (#1809).Standardize has wrong batch shape (#1807).sample_multiplier in EUBO's acqf_input_constructor (#1816)._optimize_acqf_sequential_q when it will be used (#1808).PairwiseGP comparisons might be implicitly modified (#1811).Deprecate objective in favor of posterior_transform for MultiObjectiveAnalyticAcquisitionFunction (#1781).
PairwiseGP (#1754, #1755).FullyBayesianPosterior (1176a38352b69d01def0a466233e6633c17d6862, #1773).gen_batch_initial_conditions more flexible (#1779).objective in favor of posterior_transform for MultiObjectiveAnalyticAcquisitionFunction (#1781).prune_baseline=True as default for qNoisyExpectedImprovement (#1796).batch_shape property to SingleTaskVariationalGP (#1799).SaasFullyBayesianSingleTaskGP (#1800).output_task to MultiTaskGP.construct_inputs (#1753).BotorchTensorDimensionWarning (#1790).SupervisedDatasetMeta (#1663).Various improvements to tutorials (#1703, #1706, #1707, #1708, #1710, #1711, #1718, #1719, #1739, #1740, #1742).
integer_indices in Round transform (#1709).cache_root in qNEHVI input constructor (#1730).get_init_args helper to Normalize & Round transforms (#1731).ModifiedFixedSingleSampleModel (#1732)._verify_output_shape (#1715).get_infeasible_cost for objectives that require X (#1721).Require PyTorch >= 1.12 (#1699).
OneHotToNumeric input transform (#1517).get_rounding_input_transform utility for constructing rounding input transforms (#1531).EnsemblePosterior (#1636).gen_candidates callable in optimize_acqf (#1655).logmeanexp and logdiffexp numerical utilities (#1657).BotorchTestCase.assertAllClose (#1618).sample_shape property to ListSampler (#1624).BoTorchWarnings by default (#1630).DeterministicSampler (#1641)._filter_kwargs (#1645).functools.lru_cache on methods (#1650).AffineInputTransform (#1656).optimize_acqf and _make_linear_constraints (#1660, #1676).max_reference_point in infer_reference_point (#1671)._fast_solves in HOGP.posterior (#1682).MVNXPB (#1684).cache_root in CachedCholeskyMCAcquisitionFunction (#1688).TransformedPosterior missing batch shape error in _update_base_samples (#1625).coefficient and offset in AffineTransform in eval mode (#1642).TorchPosterior (#1644).optimize_acqf_cyclic (#1648).optimize_acqf didn't work with different batch sizes (#1668)._filter_kwargs was erroring when provided a function without a __name__ attribute (#1678).This release includes changes for compatibility with the newest versions of linear_operator and gpytorch.
LogExpectedImprovement (#1565) should behave better than
ExpectedImprovement. These new acquisition functions are
LogExpectedImprovement (#1565).LogNoisyExpectedImprovement (#1577).LogProbabilityOfImprovement (#1594).LogConstrainedExpectedImprovement (#1594).ModelListGP.posterior from quietly ignoring Log, Power, and Bilog outcome transforms (#1563).fast_computations setting in linear_operator by default (#1547).eta to get_acquisition_function (#1541).FixedFeatureAcquisitionFunction (#1546).MultiModelAcquisitionFunction, an abstract base class for acquisition functions that require multiple types of models (#1584).cache_root option for qNEI in get_acquisition_function (#1608)._fit_multioutput_independent and allclose_mll (#1570).minimize failure messages (#1579).SaasPyroModel to avoid Cholesky errors (#1586).get_bounds_as_ndarray device-safe (#1567).This release includes some backwards incompatible changes.
This release includes some backwards incompatible changes.
Posterior and MCSampler modules to better support non-Gaussian distributions in BoTorch (#1486).
TorchPosterior object that wraps a PyTorch Distribution object and makes it compatible with the rest of Posterior API.PosteriorList no longer accepts Gaussian base samples. It should be used with a ListSampler that includes the appropriate sampler for each posterior.get_sampler helper, which dispatches an appropriate sampler based on the posterior provided.resample and collapse_batch_dims arguments to MCSamplers have been removed. The ForkedRNGSampler and StochasticSampler can be used to get the same functionality.botorch.optim to operate based on closures that abstract away how losses (and gradients) are computed. By default, these closures are created using multiply-dispatched factory functions (such as get_loss_closure), which may be customized by registering methods with an associated dispatcher (e.g. GetLossClosure). Future releases will contain tutorials that explore these features in greater detail.BoxDecomposition cleanup (#1490).torch.triangular_solve in favor of torch.linalg.solve_triangular (#1494).__getitem__ method from LinearTruncatedFidelityKernel (#1501).apply_constraints (#1526).botorch.optim.numpy_converter (#1191).fit_gpytorch_scipy and fit_gpytorch_torch (#1191).NdarrayOptimizationClosure (#1508).Require linear_operator == 0.2.0 (#1491).
BatchedMultiOutputGPyTorchModels that were using a Normalize or InputStandardize input transform and trained using fit_gpytorch_model/mll with sequential=True (which was the default until 0.7.3). The input transform buffers would be reset after model training, leading to the model being trained on normalized input data but evaluated on raw inputs. This bug had been affecting model fits since the 0.6.5 release.Models in a backwards-incompatible way. If your code relies on isinstance checks with BoTorch Models, especially SingleTaskGP, you should revisit these checks to make sure they still work as expected.bvn, MVNXPB, TruncatedMultivariateNormal, and UnifiedSkewNormal classes / methods (#1394, #1408).AffineInputTransform (#1461).subset_transform decorator to consolidate subsetting of inputs in input transforms (#1468).AcquisitionFunction.model is a Model (#1216).BlockDiagLazyTensor logic when using Standardize (#1414)._aug_batch_shape in SaasFullyBayesianSingleTaskGP (#1448).PairwiseGP ScaleKernel prior (#1460).fantasize method into a FantasizeMixin class, so it isn't so widely inherited (#1462, #1479).get_default_partitioning_alpha for NEHVI input constructor (#1481).batch_shape property of ModelListGPyTorchModel (#1441).RuntimeError due to constraint violation while sampling from priors (#1451).BatchedMultiOutputGPyTorchModel (#1454)._fit_multioutput_independent that failed mll comparison (#1455).Y (#1489).Deprecate weights argument of risk measures in favor of a preprocessing_function (#1400),
fit_gpytorch_mll method that multiple-dispatches on the model type. Users may register custom fitting routines for different combinations of MLLs, Likelihoods, and Models.fit_gpytorch_mll does not pass kwargs to optimizer and instead introduces an optional optimizer_kwargs argument.botorch.fit methods restore modules to their original states.fit_gpytorch_mll throws a ModelFittingError when all model fitting attempts fail.fit_gpytorch_mll, mll.training will be True if fitting failed and False otherwise.SyntheticTestFunction (#1415).preprocessing_function (#1400),fit_gyptorch_model; to be superseded by fit_gpytorch_mll.batch_shape property of SaasFullyBayesianSingleTaskGP (#1413).model_list_to_batched ignoring the covar_module of the input models (#1419).Pin linear_operator == 0.1.1 (#1397).
SaasFullyBayesianMultiTaskGP and related utilities (#1181, #1203).SaasFullyBayesianSingleTaskGP (#1120).load_state_dict for ModelList to support fully Bayesian models (#1395).is_one_to_many attribute to input transforms (#1396).PairwiseGP on GPU (#1388).Require python >= 3.8 (via #1347).
LinearOperator library, which required a number of adjustments to BoTorch (#1363, #1377).AppendFeatures input transform via a generic callable (#1354).time.monotonic() instead of time.time() to measure duration (#1353).Y_samples directly in MARS.set_baseline_Y (#1364).state_dict loading for PairwiseGP (#1359).batch_shape handling in Normalize and InputStandardize transforms (#1360).Require GPyTorch >= 1.8.1 (#1347).
RandomFourierFeatures (#1336).skip_expand option to AppendFeatures (#1344).qProbabilityOfImprovement to use batch-shaped best_f (#1324).optimize_acqf re-attempt failed optimization runs and handle optimization
errors in optimize_acqf and gen_candidates_scipy better (#1325).MARS.set_baseline_Y (#1346).outcome_transform was ignored for ModelListGP.fantasize (#1338).get_polytope_samples to sample incorrectly when variables
live in multiple dimensions (#1341).Require PyTorch >=1.10 (#1293).
PairwiseLogitLikelihood and modularize PairwiseGP (#1193).FeasibilityWeightedMCMultiOutputObjective (#1202).FixedNoiseMultiTaskGP (#1255).SaasFullyBayesianSingleTaskGP in prune_inferior_points (#1260).Bilog outcome transform (#1189).get_infeasible_cost return a cost value for each outcome (#1191).List[float] for weights (#1197).SaasFullyBayesianSingleTaskGP in prune_inferior_points_multi_objective (#1204).TrainingData API to allow for more diverse types of datasets (#1205, #1221).SingleTaskGP models (#1212).optimize_acqf_discrete with a check that choices is non-empty (#1228).X_pending properly in FixedFeatureAcquisition (#1233, #1234).model.train call from get_X_baseline for better caching (#1289).inf values in bounds argument of optimize_acqf (#1302).get_gp_samples to support input / outcome transforms (#1201).qNEHVI when using Standardize outcome transform (#1215).task_feature as required input in MultiTaskGP.construct_inputs (#1246).FixedSingleSampleModel dtype/device conversion (#1254).sample_points_around_best when using 20 dimensional inputs or prob_perturb (#1290).optimize_acqf if inequality constraints are specified (#1297).ModelList with individual transforms (#1299).PosteriorList to support deterministic-only models and fix event_shape (#1300).fit_model_with_torch_optimizer notebook (#1196).ModelListGP.condition_on_observations/fantasize bug (#1250).Remove deprecated box_decomposition module (#1175).
ExpectationPosteriorTransform (#903).PairwiseMCPosteriorVariance, a cheap active learning acquisition function (#1125).FullyBayesianPosteriorList (#1161).optimize_acqf_discrete (#939).bounds argument in optimize_acqf (#1142).SAASBO (#1143, #1183).PyroModel (#1149).mean_module to SingleTaskGP/FixedNoiseGP (#1160).box_decomposition module (#1175).ProximalAcquisitionFunction (#1122).fit_gpytorch_scipy (#1170).PairwiseGP.load_state_dict (#1171).fit_gpytorch_model properly honor the debug flag (#1178).posterior_transform in gen_one_shot_kg_initial_conditions (#1187).Implement SAASBO - SaasFullyBayesianSingleTaskGP model for sample-efficient high-dimensional Bayesian optimization (#1123).
SaasFullyBayesianSingleTaskGP model for sample-efficient high-dimensional Bayesian optimization (#1123).LearnedObjective (#1131), AnalyticExpectedUtilityOfBestOption acquisition function (#1135), and a few auxiliary classes to support Bayesian optimization with preference exploration (BOPE).qKG.evaluate in optimize_acqf_mixed (#1133).construct_inputs to SAASBO (#1136).Implement SAASBO - SaasFullyBayesianSingleTaskGP model for sample-efficient high-dimensional Bayesian optimization (#1123).
SaasFullyBayesianSingleTaskGP model for sample-efficient high-dimensional Bayesian optimization (#1123).LearnedObjective (#1131), AnalyticExpectedUtilityOfBestOption acquisition function (#1135), and a few auxiliary classes to support Bayesian optimization with preference exploration (BOPE).qKG.evaluate in optimize_acqf_mixed (#1133).construct_inputs to SAASBO (#1136).Use BOTORCH_MODULAR in tutorials with Ax (#1105).
BOTORCH_MODULAR in tutorials with Ax (#1105).optimize_acqf_discrete_local_search for discrete search spaces (#1111).posterior_transform in qNEI and get_acquisition_function (#1113).Remove deprecated botorch.distributions module (#1061).
Standardize input transform (#1053).Dispatcher (#1009).Normalize input transform input column-specific (#1047).find_interior_point (#1049).botorch.distributions module (#1061).InputPerturbations (#1088).fixed_features in optimization (#1029).VaR risk measure (#1038).find_interior_point for negative variables & allow unbounded problems (#1045).KroneckerMultitaskGP (#1071).preprocess_transform (#1089).compare_mc_analytic_acquisition tutorial (#1099).Require GPyTorch >=1.6 (#1011).
ApproximateGPyTorchModel wrapper for various (variational) approximate GP models (#1012).SingleTaskVariationalGP stochastic variational Gaussian Process model (#1012).ModelList and PosteriorList (#829).covar_module as an optional input of MultiTaskGP models (#941).min_range argument to Normalize transform to prevent division by zero (#931).apply_constraints utility to work with multi-output objectives (#994).t_batch_mode_transform decorator on non-tensor inputs (#991).BatchedMultiOutputGPyTorchModel.posterior (#976).qNoisyExpectedHypervolumeImprovement (#747, #995, #996).Griewank test function (#972).Posterior.rsample (#986).NotPSDError and hitting maxiter in fit_gpytorch_model (#1007).best_f argument to qProbabilityOfImprovement in input constructors (f5a5f8b6dc20413e67c6234e31783ac340797a8d)Require GPyTorch >=1.5.1 (#928).
HigherOrderGP composite Bayesian Optimization tutorial notebook (#864).PenalizedMCObjective and L1PenaltyObjective (#913).ProximalAcquisitionFunction for regularizing new candidates towards previously generated ones (#919, #924).Power outcome transform (#925).HigherOrderGP initialization (#856).CategoricalKernel precision (#857).qMultiFidelityKnowledgeGradient.evaluate (#858).HigherOrderGP. (#889)_generate_unfixed_lin_constraints (#901).fantasize call (#902).batched_to_model_list (#917).TransformedPosterior.mean (#855).DeterministicModel (#869).batch_shape in RandomFourierFeatures (#877).maximize flag to PosteriorMean (#881).MixedSingleTaskGP (#882).HigherOrderGPPosterior for memory efficiency (#883).get_chebyshev_scalarization (#884).train_inputs transforms to model.train/eval calls (#894).Require PyTorch >=1.8.1 (#832).
transform_inputs is applied in model.forward if the model is in train mode, otherwise it is applied in the posterior call (#819, #835).qNoisyExpectedHypervolumeImprovement acquisition function that improves on qExpectedHypervolumeImprovement in terms of tolerating observation noise and speeding up computation for large q-batches (#797, #822).qMultiObjectiveMaxValueEntropy acqusition function (913aa0e510dde10568c2b4b911124cdd626f6905, #760).FastNondominatedPartitioning for Hypervolume computations (#699).DominatedPartitioning for partitioning the dominated space (#726).BoxDecompositionList for handling box decompositions of varying sizes (#712).get_default_partitioning_alpha utility providing heuristic for selecting approximation level for partitioning algorithms (#793).qLowerBoundMaxValueEntropy acquisition function (a.k.a. GIBBON), a lightweight variant of Multi-fidelity Max-Value Entropy Search using a Determinantal Point Process approximation (#724, #737, #749).CategoricalKernel for categorical inputs (#771).MixedSingleTaskGP for mixed search spaces (containing both categorical and ordinal parameters) (#772, #847).optimize_acqf_discrete for optimizing acquisition functions over fully discrete domains (#777).optimize_acqf_mixed to allow batch optimization (#804).AppendFeatures transform (#820).InputPerturbation input transform for for risk averse BO with implementation errors (#827).KroneckerMultiTaskGP model for efficient multi-task modeling for block-design settings (all tasks observed at all inputs) (#637).TrainingData (#794).DelaunayPolytopeSampler for fast uniform sampling from (simple) polytopes (#741).evaluate method to ScalarizedObjective (#795).optimize_acqf (#770).fixed_features to initial candidate generation functions (#806).FastPartitioning (#740).is_non_dominated (#743).get_chebyshev_scalarization (#762).gen_candidates_torch that caused problems with acqusition functions using fantasy models (#766).HigherOrderGP dtype bug (#728).Warp input warping transform (#722).fixed_features is passed (#839).torch.linalg module (#735).Kumaraswamy distribution (#746).callback argument to scipy.optim.minimize in gen_candidates_scipy (#744).X_pending in in multi-objective acqusiition functions (#747).NotPSDError in _scipy_objective_and_grad (#787).raw_samples optional if batch_initial_conditions is passed (#801).Require PyTorch >=1.7.1 (#714).
HigherOrderGP - High-Order Gaussian Process (HOGP) model for
high-dimensional output regression (#631, #646, #648, #680).qMultiStepLookahead acquisition function for general look-ahead
optimization approaches (#611, #659).ScalarizedPosteriorMean and project_to_sample_points for more
advanced MFKG functionality (#645).GPDraw utility for sampling from (exact) GP priors (#655).X as optional arg to call signature of MCAcqusitionObjective (#487).OSY synthetic test problem (#679).scalarize_posterior (#638).X_pending in get_acquisition_function in qEHVI (#662).MCSampler in MaxPosteriorSampling (#701).posterior calls (#652).SobolEngine (#672, #674).gen_candidates_scipy (#688).base_sample_shape property to Posterior objects (#718).Models (LCE-A, LCE-M and SAC ) for Contextual Bayesian Optimziation (#581).
HolderTable synthetic function (#596).device issue in MOO tutorial (#621).train_inputs option to qMaxValueEntropy (#593).fast_pred_var and debug (#595).set_train_data_transform -> preprocess_transform (#575)._expand_bounds() shape checks to work with >2-dim bounds (#604).batch_shape property to models (#588).qMultiFidelityKnowledgeGradient.evaluate() to work with project, expand and cost_aware_utility (#594).Add PenalizedAcquisitionFunction wrapper
PenalizedAcquisitionFunction wrapper (#585)maximize=False (a4bfacbfb2109d3b89107d171d2101e1995822bb)PairwiseGP and add ScaleKernel by default (#571)prior to task_covar_prior in MultiTaskGP and FixedNoiseMultiTaskGP
(16573fea066d8bb682dc68526f42b6ec7c22a555)equals method for InputTransform (#552)Remove deprecated botorch.gen module
evaluate method for qKnowledgeGradient (#515)botorch.gen module (#532)MultiTaskGP (#485)draw_sobol_samples that did not use the proper effective dimension (#505)q>1 in qExpectedHypervolumeImprovement (c80c4fdb0f83f0e4f12e4ec4090d0478b1a8b532)qExpectedHypervolumeImprovement
in get_acquisition_function (#523)PairwiseGP (#537)qExpectedHypervolumeImprovement (#522)(q)ExpectedHypervolumeImprovement to nonnegative functions
[for better initialization] (#496)best_f in qExpectedImprovement (#487)OneShotAcquisitionFunction (#488)construct_inputs class method to models to programmatically construct the
inputs to the constructor from a standardized TrainingData representation
(#477, #482, 3621198d02195b723195b043e86738cd5c3b8e40)**kwargs options
(#478, e5b69352954bb10df19a59efe9221a72932bfe6c)psd_safe_cholesky in qMaxValueEntropy for better numerical stabilty (#518)WeightedMCMultiOutputObjective (81d91fd2e115774e561c8282b724457233b6d49f)outcomes to all multi-output objectives (#524)info_dict for fit_gpytorch_scipy (#534)setuptools_scm for versioning (#539)Multi-Objective Acquisition Functions
Multi-Objective Bayesian Optimization
Fixed issue with broken wheel build (#444).
Bugfix Release
There was a mysterious issue with the 0.2.3 wheel on pypi, where part of the botorch/optim/utils.py file was not included, which resulted in an Import
botorch/optim/utils.py file was not included, which resulted in an ImportError for many central components of the code. Interestingly, the source dist (built with the same command) did not have this issue.Introduces a new Pairwise GP model for Preference Learning with pair-wise preferential feedback, as well as a Sampling Strategies abstraction for gene
Introduces a new Pairwise GP model for Preference Learning with pair-wise preferential feedback, as well as a Sampling Strategies abstraction for generating candidates from a discrete candidate set.
PairwiseGP for preference learning with pair-wise comparison data (#388).SamplingStrategy abstraction for sampling-based generation strategies, including
MaxPosteriorSampling (i.e. Thompson Sampling) and BoltzmannSampling (#218, #407).botorch.gen module is moved to botorch.generation.gen and imports
from botorch.gen will raise a warning (an error in the next release) (#218).prune_baseline (#419).LinearTruncatedFidelityKernel (#409).best_f in qExpectedImprovement and qProbabilityOfImprovement
(#411).BaseTestProblem (9e604fe2188ac85294c143d249872415c4d95823).Remove deprecated joint_optimize and sequential_optimize (#363).
Require Python 3.7 and adds new features for active learning and multi-fidelity optimization, along with a number of bug fixes.
qNegIntegratedPosteriorVariance for Bayesian active learning (#377).FixedNoiseMultiFidelityGP, analogous to SingleTaskMultiFidelityGP (#386).scalarize_posterior for m>1 and q>1 posteriors (#374).subset_output method on multi-fidelity models (#372).TestLoader local test discovery (#376).SingleTaskMultiFidelityGP (#370).qNoisyExpectedImprovement test (#362).MultiTaskGP (#383).joint_optimize and sequential_optimize (#363).Add a static method for getting batch shapes for batched MO models (#346).
Minor bug fix release.
This release adds the popular Max-value Entropy Search (MES) acquisition function, as well as support for multi-fidelity Bayesian optimization via bot
This release adds the popular Max-value Entropy Search (MES) acquisition function, as well as support for multi-fidelity Bayesian optimization via both the Knowledge Gradient (KG) and MES.
qMultiFidelityKnowledgeGradient) for multi-fidelity optimization (#292).qMaxValueEntropy and qMultiFidelityMaxValueEntropy max-value entropy search acquisition functions (#298).subset_output functionality to (most) models (#324).outcome_transform kwarg to model constructors for automatic outcome transformation and un-transformation (#327).DeterminsticModel and DetermisticPosterior abstractions (#288).AffineFidelityCostModel (f838eacb4258f570c3086d7cbd9aa3cf9ce67904).project_to_target_fidelity and expand_trace_observations utilities for use in multi-fidelity optimization (1ca12ac0736e39939fff650cae617680c1a16933).prune_baseline option for pruning X_baseline in qNoisyExpectedImprovement (#287).gen_candidates_torch (#319).gen_batch_initial_conditions to avoid memory issues on the GPU (#323).NoiseModelAddedLossTerm in HeteroskedasticSingleTaskGP (671c93a203b03ef03592ce322209fc5e71f23a74).MultiTaskGPyTorchModel (#316).propagate_grads argument in fantasize of FixedNoiseGP (#303).diag arg in LinearTruncatedFidelityKernel (#320).best_f in qExpectedImprovement (#299).num_outputs property to the Model API (#330).Make joint_optimize / sequential_optimize return acquisition function values (#149) [note deprecation notice below]
joint_optimize / sequential_optimize return acquisition function
values (#149) [note deprecation notice below]standardize now works on the second to last dimension (#263)qKnowledgeGradient acquisition function (#272, #276)cyclic_optimize, convergence criterion class (#269)settings.debug context manager (#242)sequential_optimize and joint_optimize into optimize_acqf
(#150)FixedNoiseGaussianLikelihood (#241)
[requires gpytorch > 0.3.5]ConstrainedExpectedImprovement
(6c067185f56d3a244c4093393b8a97388fb1c0b3)dim > 1111 for gen_batch_initial_conditions (#249)optimize_acqf to use q>1 for AnalyticAcquisitionFunction (#257)fit_gpytorch_scipy (#258)Updates to support breaking changes in PyTorch to boolean masks and tensor comparisons (#224).
FixedFeatureAcquisitionFunction wrapper that simplifies optimizing
acquisition functions over a subset of input features (#219).ScalarizedObjective for scalarizing posteriors (#210).AcquisitionObjective base class (#220).propagate_grads kwarg in
model posterior() calls (#221)batch_initial_conditions argument to joint_optimize() for
warm-starting the optimization (ec3365a37ed02319e0d2bb9bea03aee89b7d9caa).return_best_only argument to joint_optimize() (#216). Useful for
implementing advanced warm-starting procedures.Avoid PyTorch bug resulting in bad gradients on GPU by requiring GPyTorch >= 0.3.4
rename botorch.qmc to botorch.sampling, move MC samplers from acquisition.sampler to botorch.sampling.samplers
botorch.qmc to botorch.sampling, move MC samplers from
acquisition.sampler to botorch.sampling.samplers (#172)condition_on_observations and fantasize to the Model level API (#173)MCAcqusitionFunctions (#176)q-batches (to support things like
sample budget constraints) (2a95a6c3f80e751d5cf8bc7240ca9f5b1529ec5b)neg_ackley, cosine8, neg_levy, neg_rosenbrock, neg_shekel
(e26dc7576c7bf5fa2ba4cb8fbcf45849b95d324b)neg_aug_branin, neg_aug_hartmann6,
neg_aug_rosenbrock (ec4aca744f65ca19847dc368f9fee4cc297533da)NaN to the optimizer (#184)ModelListGP models by default (#189)joint_optimize to increases scalability of
parallel optimization (baab5786e8eaec02d37a511df04442471c632f8a)ModelListGP to comply with GPyTorch’s IndependentModelList
constructor (a6cf739e769c75319a67c7525a023ece8806b15d)torch.random to set default seed for samplers (rather than random) to
making sampling reproducible when setting torch.manual_seed
(ae507ad97255d35f02c878f50ba68a2e27017815)einsum in LinearMCObjective (22ca29535717cda0fcf7493a43bdf3dda324c22d)MCAquisitionFunctions to be base-2 for
better MC integration performance (5d8e81866a23d6bfe4158f8c9b30ea14dd82e032)SumMarginalLogLikelihood sequentially (and make
that the default setting) (#183)f_best was always max for NoisyExpectedImprovement
(410de585f07de0c66427d5066947e22227d11537)initialize_q_batch
(844dcd1dc8f418ae42639e211c6bb8e31a75d8bf)inv_transform for qMC sampling (#162)First public beta release.
First public beta release.
Your coding agent can read these notes before it upgrades. Set up the MCP server →