[FEATURE REQUEST]: More options for `optimize_with_nsgaii`
Motivation
Hi,
I recently saw optimize_with_nsgaii in botorch and find it really interesting.
We (meaning @LukasHebing) build something related and I thought it can make sense to unite/merge both apporaches.
In contrast to the approach in botorch, our's differs as following:
- it can also handle single-objective optimization --> useful when no gradients are available for the acqf.
- we are featuring discrete and categorical inputs via
pymoo.core.variable.Integerandpymoo.core.variable.Choice - Repair functionality for linear and non-linear constraints.
Describe the solution you'd like to see implemented in BoTorch.
Ideally one would have a kind of generic pymoo wrapper for acqf(s) optimization which follows the syntax of optimize_mixed_alternating including also non-linear constraints (and the features from above) and exposing pymoo hyperparams to the user. Would you be interested in this?
Describe any alternatives you've considered to the above solution.
No response
Is this related to an existing issue in BoTorch or another repository? If so please include links to those Issues here.
No response
Pull Request
Yes
Code of Conduct
- [x] I agree to follow BoTorch's Code of Conduct
Hi @jduerholt, what exactly are the use cases for the functionality you built on your end? @sdaulton has used optimize_with_nsgaii to do multi-objective optimization across different acquisition function as sort of an ensembling approach: https://github.com/facebook/Ax/pull/4074
I think this could be interesting to support, but I'd like to understand the use case a bit better. We currently have pymoo as an optional dependency in botorch and ideally we could keep it that way.
Hi @Balandat,
keeping it as an optional dependency is absolutely fine.
Our current use case was to use a pymoo GA for acqf optimization in scenarios where non-differentiable kernels/objectives were used. In principle in the same spirit as your tutorial on using CMA-ES (CMA is also part of pymoo, so one could also streamline this): https://github.com/pytorch/botorch/blob/main/tutorials/optimize_with_cmaes/optimize_with_cmaes.ipynb.
As you have pymoo now working for ensembling of acqfs, it could make sense to join forces and have everything directly in botorch including support of:
- single and multiples acqfs
- categorical and discrete inputs
- pymoo repairs for handling of constraints
Does this make sense for you?
Best,
Johannes
That sounds great. Do you have a high-level design in mind? Could make sense to align on that before starting a PR.
Hi @Balandat,
I will discuss it @LukasHebing and then come up here with some interface design so that we can discuss it.
First, I wanted to clarify if there is general interest in this, and I am happy about the positive response ;)
Best,
Johannes