The release log for Ax.
- Fix incorrect feasibility computation when using
qLogProbabilityOfFeasibilityfor MOO — objective weights were applied twice via both the posterior transform and the constraint matrix, leading to incorrect results when only objective thresholds (no outcome constraints) were present (#4935) - Add defensive
issubclassguard for acquisition function dispatch to prevent silent fallthrough for future subclasses ofqLogProbabilityOfFeasibility(#4938) - Require only opt_config metrics for
prepare_arm_datato fixArmEffectsPlotfailures when tracking metrics are missing (#4957)
- Bumped pinned botorch version to 0.17.2 (#4959). This picks up the following changes from botorch 0.17.2:
- Support
post_processing_funcinoptimize_with_nsgaiifor post-processing optimization results, e.g., to round discrete dimensions to valid values
- Support
- Remove unused
objective_thresholdsparameter fromAcquisition.get_botorch_objective_and_transform— the parameter was silently discarded (#4939) - Add
Selftype annotations to clone methods for better type inference in subclasses (#4907) - Heterogeneous search space utilities for transfer learning benchmarks (#4767)
- Migrate benchmarking state dict files for GPyTorch compatibility (#4916)
- Move
merge_multiple_curvesto Advanced tier in complexity classification (#4949) - Move
infer_reference_point_from_experimentandget_tensor_converter_adaptertoax/service/utils/best_point.py(#4940) - Replace disclosure triangle with info icon in Bento notebooks for analysis cards (#4956)
Packack Requirements
- Python 3.11+ required (#4810)
- Pandas 3.0 upgrade (#4838)
- BoTorch 0.17.0 (#4911)
Method Removals (non-API)
transition_tonow required onTransitionCriterion(#4848) — Users must explicitly specify transition targets- Removed callable serialization (#4806) — Encoding callables now raises an exception
- Removed legacy classes:
TData(#4771),MinimumTrialsInStatus(#4786), completion criteria (#4850),arms_per_nodeoverride (#4822)
- Experiment Lifecycle Tracking: New
ExperimentStatusenum (DRAFT,INITIALIZATION,OPTIMIZATION,COMPLETED) with automatic status updates from the Scheduler based on generation strategy phase (#4737, #4738, #4891) - BOPE (Preference Learning): Utility-based traces via PairwiseGP preference models (#4792);
UtilityProgressionAnalysissupport with "User Preference Score" UI (#4793) - BONSAI (Pruning): New
pruning_target_parameterizationAPI parameter (#4775); tutorial and documentation added (#4865, #4871) add_tracking_metrics()method (#4858)TorchAdapter.botorch_modelconvenience property (#4827)DerivedParameternow supportsboolandstrtypes (#4847)- LLM integration:
LLMProvider/LLMMessageabstractions andllm_messageson Experiment (#4826, #4904) - Improved slice/contour plots: uses status_quo, best trial, center hierarchy (#4841)
- Sensitivity analysis excludes 'step' by default (#4777)
ScalarizedOutcomeConstraintsupport in feasibility analysis (#4856)
DataRow-backedDataclass with itertuples — 3.6x faster tensor creation (#4773, #4774, #4798)- Generation strategy caching: significant speedup in high trial count regimes (#4830)
- Optimization complete logic: O(nodes x TC) to O(TC on current node) (#4828)
- Fix
GeneratorRun.clone()not copying metadata (mutations affected original) (#4892) - Fix OneHot transform not updating hierarchical parameter dependents (#4825)
- Fix Float parameters loaded as ints from SQA (#4853)
- Fix scikit-learn 1.8.0 compatibility with XGBoost (#4816)
- Trials now marked ABANDONED (not FAILED) on metric fetch failure (#4779)
- Baseline improvement healthcheck now shows WARNING instead of FAIL (#4883)
- Codebase updated to Python 3.11+ idioms:
typing.Self(#4867),StrEnum(#4868),ExceptionGroup(PEP 654) (#4877),asyncio.TaskGroup(#4878), PEP 604 type annotations (#4912) - For the complete list of 90+ PRs, see the GitHub releases page
NOTE: This will be the last Ax release before SQLAlchemy becomes a required dependency.
- Add deprecation warning to AxClient (#4749)
- Add deprecation warning to 'optimize' loop API (#4697)
- Deprecate Trial.runner (#4460)
- Deprecate TensorboardMetric's
percentilein favor ofquantile(#4676) - Deprecate default_data_type argument to Experiment (#4698)
- Efficient leave-one-out cross-validation for Gaussian processes (#4631)
- Add patience parameter to PercentileEarlyStoppingStrategy (#4595)
- Log-scale support for ChoiceParameter (#4591)
- Support ChoiceParameter in Log transform (#4592)
- Add robust trial status polling to Orchestrator (#4756)
- Expose validation for TL experiments and fetching of candidate TL sources through AxService (#4615)
- Add PreferenceOptimizationConfig with storage layer support (#4638)
- Add PLBO transform and metric ordering validation (#4633)
- Add expect_relativized_outcomes flag to PreferenceOptimizationConfig (#4632)
- Add kendall tau rank correlation diagnostic (#4617)
- Vectorize SearchSpace membership check for performance (#4762)
- New UtilityProgression Analysis for tracking optimization progress over time (#4535)
- New Best Trials Analysis for identifying top-performing trials (#4545)
- New Early Stopping Healthcheck analysis (#4569)
- New Predictable Metrics Healthcheck analysis (#4598)
- New Baseline Improvement Healthcheck analysis (#4673)
- New Complexity Rating Healthcheck for assessing optimization difficulty (#4556)
- Analysis to visualize experiment generation strategy (#4759)
- Add Pareto frontier display on MOO objective scatter plots (#4708)
- Add Progression Plots for MapMetric experiments to ResultsAnalysis (#4705)
- Add SEM display option to ContourPlot (#4690)
- Add markers to ProgressionPlot line charts (#4693)
- GraphvizAnalysisCard and HierarchicalSearchSpaceGraph visualization (#4616)
- IndividualConstraintsFeasibilityAnalysis replaces ConstraintsFeasibilityAnalysis (#4527)
- Fix tied trial bug in PercentileESS: use rank() for n_best_trial protection (#4587)
- Fix StandardizeY not updating weights in ScalarizedObjective (#4619)
- Fix StratifiedStandardizeY behavior with ScalarizedObjective & ScalarizedOutcomeConstraint (#4621)
- Fix floating point precision issue in step_size validation (#4604)
- Fix progression normalization logic in early-stopping strategies (#4525)
- Fix dependent parameter handling in Log transform (#4679)
- Drop NaN values in MAP_KEY column before align_partial_results (#4634)
- Filter failed trials from plots (#4725)
- Allow single progression early stopping checks when patience > 0 (#4635)
- Update SOBOL transition criterion to exclude ABANDONED and FAILED trials (#4776)
- Speed up MapDataReplayMetric (#4654)
- Fast MapData.df implementation (#4487)
- Validate patience <= min_progression in PercentileEarlyStoppingStrategy (#4639)
- Enforce
smoothingin[0, 1)for TensorBoardMetric (#4661) - Enforce sort_values=True for numeric ordered ChoiceParameter (#4597)
- Add error if PowerTransformY is used with ScalarizedObjective (#4622)
- Support ScalarizedObjective in get_best_parameters with model predictions (#4594)
- Rename model_kwargs -> generator_kwargs (#4668)
- Rename model_gen_kwargs -> generator_gen_kwargs (#4667)
- Rename model_cv_kwargs -> cv_kwargs (#4669)
- Improved error messaging for
client.compute_analyseswhen certain analyses are not yet available (#4441) - Fix tooltip mismatch bug in
ArmEffectsPlot(#4479)
- Bumped pinned botorch version to 0.16.1 (#4570)
- Removed deprecated robust optimization functionality (#4493)
- Allow
HierarchicalSearchSpaceto be constructed with multiple root nodes (#4560)
DerivedParameterConfigallows users to specify parameters which are not tuned, instead taking the value of some expression of other tunable parameters (#4454)- New argument
simplify_parameter_changesinclient.configure_generation_strategy(defaulted toFalse) which whenTrueinforms Ax to change as few parameters as possible relative to the status quo without degrading optimization performance. Has a near-zero effect on generation time (#4409) - Default to
qLogNParEgoacquisition function for multi-objective optimization in multi-objective optimization when the number of objectives is > 4, leading to improved walltime performance (#4347)
- Fix issue during candidate generation involving
MapMetricsproviding progressions at different scales i.e. one progression goes up to 10^9 and the other goes up to 10^6 by normalizing to [0, 1] (#4458)
- Improve visual clarity in
ArmEffectsPlotby removing certain elements including red "infeasibility" halos and optional cumulative best line (#4397, #4398) - Instructions on citing Ax included in README.md and ax.dev (#4317, #4357)
- New "Using external methods for candidate generation in Ax" tutorial on website (#4298)
- Fixed rendering issue in ArmEffectsPlot when the number of arms displayed is greater than 20 (#4273)
- Enabled Winsorization transform by default, improving surrogate performance in the presence of outliers (#4277)
- Correctly filter out observations from Abandoned trials/arms during candidate generation (#4155)
- Handle scalarized objectives in ResultsAnalysis (#4193)
- Fix bug in polytope sampler when generating more than one candidate in a batch (#4244)
- Transition from setup.py to pyproject.toml for builds, modernizing Ax's build configuration and bringing it in compliance with PEP 518 and PEP 621 (#4100)
- Add py.typed file, which allows typecheckers like Pyre, mypy, etc. to see Ax's types and avoid a TypeStub error when importing Ax (#4139)
- Improve legibility of ArmEffectPlot by modifying legend and x-axis labels (#4220, #4243)
- Address logspew in OneHotEncoder transform (#4232)
- New option for the
methodparameter inclient.configure_generation_strategy:quality-- allows uers to indicate they would like Ax to generate the highest quality candidates it is able to at the expense of slower runtime (#4042) - New logic for deciding which analyses to produce by default in
client.compute_analyses(#4013) - New parameters in
client.summarizeallow users to filter their summary by trial index and/or trial status (#4012, #4118)
- Allow
client.summarizeto be called without aGenerationStrategybeing set (i.e. beforeclient.configure_generation_strategyorclient.get_next_trailshas been called.) (#3801) - Fixed incorrect grouping in
TopSurfacesAnalysis(#4095) - Fixed
ContourPlotfailing to compute in certain search spaces with parameter constraints (#4124) - Misc. plotting fixes and improvements
- Bumped pinned botorch version to 0.15.1
- Performance improvements in
SensitivityAnalysis(#3891) - Improved optimization performance in constrained optimization settings (#3585)
- Augmented logging in
Client, early stopping module (#4044, #4108)