botorch icon indicating copy to clipboard operation
botorch copied to clipboard

[FEATURE REQUEST]: More options for `optimize_with_nsgaii`

Open jduerholt opened this issue 3 months ago • 4 comments

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.Integer and pymoo.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

jduerholt avatar Sep 17 '25 09:09 jduerholt

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.

Balandat avatar Sep 17 '25 12:09 Balandat

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

jduerholt avatar Sep 17 '25 13:09 jduerholt

That sounds great. Do you have a high-level design in mind? Could make sense to align on that before starting a PR.

Balandat avatar Sep 17 '25 13:09 Balandat

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

jduerholt avatar Sep 17 '25 14:09 jduerholt