experimental-design / bofire

Experimental design and (multi-objective) bayesian optimization.
https://experimental-design.github.io/bofire/
BSD 3-Clause "New" or "Revised" License
159 stars 20 forks source link

predict_pareto_front implementations (especially for PLS and RF) #111

Open rosonaeldred opened 1 year ago

rosonaeldred commented 1 year ago

Internally, we've run into a case where I would like to implement predict_pareto_front for rf. Looking at how we do that for PLS, it makes use of a BASF-internal helper package that has dependencies we cannot open-source. This issue is for us to figure out a work-around for bofire, or a decision to extend bofire strategies internally with the basf-internal package for this functionality,

Parego's implementation uses pymoo. From David Walz: "pymoo or simplex-sampled weights + single objective optimizer implemented directly in BoFire"

jduerholt commented 1 year ago

Hi Rosona,

so you want to run a multiobjective optimization using RFs to find the pareto front?

In Bofire, we have a parego implementation using simplex-based weights and then a single objetive optimizer. The whole thing is currently based on GPs and gradient based ACQF optimization.

So you want to have somehow the same but with an RF as model under the hood? Optimization then via a GA or random sampling?

Do you have any linear or NchooseK constraints in the setup?

Since the weekend, Botorch is able to use ensemble models, so what we could do is to just write a botorch wrapper around a RF and set it up as a Model in Bofire and hook this then into the qparego strategey and optimize the whole thing via random sampling. Doing this as a kind of first hack should be the work of three hours. Only thing is that one needs the most recent botorch version from main as it is not yet in the release version.

Best,

Johannes

jduerholt commented 1 year ago

Hi Rosona, I implemented it in a minimal way. I will put the branch upstream the latest tomorrow. Best, Johannes

jduerholt commented 1 year ago

Hi Rosona,

here is an example implementation using qehvi and a RF: https://github.com/experimental-design/bofire/pull/119

So far we have only qparego, we should also implement original ego for this purposes.

Best,

Johannes