botorch icon indicating copy to clipboard operation
botorch copied to clipboard

Implementation of MORBO algorithm

Open RafieeAshkan opened this issue 3 years ago • 5 comments

Hi, first of all many thanks for such a great and useful library. I am using Botorch for engineering design optimisation combined with CFD simulations and absolutely loving it. I had two requests which I believe can be very useful to the community:

  1. Any chance of implementing MORBO algorithm (possibly with tutorials on how to set it up). I noted from NeurIPS paper that you are planning to release this as well.
  2. The tutorial for TuRBO and the paper does not take into account constraints. Is it possible to handle constraint optimisation with TuRBO? Many thanks

RafieeAshkan avatar Jan 17 '22 01:01 RafieeAshkan

Hi @RafieeAshkan,

Thank you for your interest in MORBO and BoTorch!

  1. We are planning on getting this into BoTorch in form of a tutorial similar to TuRBO. The timeline for this isn't totally set yet, but I'll update you when we have a better idea of when this will be ready.
  2. The following paper describes how to extend TuRBO to output constraints: http://proceedings.mlr.press/v130/eriksson21a/eriksson21a.pdf. While our current tutorial doesn't consider constraints, we may consider adding one in the future.

dme65 avatar Jan 21 '22 05:01 dme65

@dme65 I look forward to when you added tutorials on MORBO and SCBO. Thank you guys again for such a great and useful package.

RafieeAshkan avatar Jan 24 '22 01:01 RafieeAshkan

@dme65 thanks for your earlier comment. I went through the SCBO paper and managed to implement the algorithm, which is really powerful. I am now taking a shot at MORBO, and was wondering in TuRBO for the trust region boundaries part we do:

tr_lb = torch.clamp(x_center - weights * state.length / 2.0, 0.0, 1.0)
tr_ub = torch.clamp(x_center + weights * state.length / 2.0, 0.0, 1.0)

with weights calculated from GP model length scale for the objective weights = model.covar_module.base_kernel.lengthscale.squeeze().detach()

In the case of multi-objectives, are the weights calculated for each objectives and then perhaps get the smallest length value? Any comment would be really helpful.

RafieeAshkan avatar Feb 24 '22 11:02 RafieeAshkan

Hi @dme65, I am also very excited about the release of the MORBO tutorial. Do you have any ideas on when this can come out?

Thanks!

gugeyao avatar Aug 24 '22 20:08 gugeyao

@RafieeAshkan: @nataliemaus recently contributed an SCBO tutorial that you can check out here: https://botorch.org/tutorials/scalable_constrained_bo

@gugeyao: We are working on moving MORBO into BoTorch and will eventually add a tutorial. For now, the code for MORBO is available here: https://github.com/facebookresearch/morbo

dme65 avatar Sep 09 '22 14:09 dme65