experimental-design / bofire

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

Nomenclature for DoE Strategies #315

Open jduerholt opened 10 months ago

jduerholt commented 10 months ago

@dlinzner-bcs @bertiqwerty @Osburg @KappatC @evo-bschiller @evo-nlueck

We are planning to provide users of our internal web platform that makes BoFire available via a GUI with the possibility to also use strategies that are meant for problem initialization like the RandomStrategy and the DoEStrategy. Furthermore we also want to integrate factorial and fractional factorial plans via the capability from pyDoE3 (I tend to just copy the needed fuctionality out of the library and not create a dependency).

As already discussed in issues https://github.com/experimental-design/bofire/issues/314 and https://github.com/experimental-design/bofire/issues/307, we have to perform some cleanup, which I want to summarize here and dicuss some open questions:

My proposal would be the following:

Furthermore, we have to think about the nomenclature between strategies that we name Sampler and those which we name as Strategy, also this is inconcistent. We have for example the PolytopeSampler, RejectionSampler and the RandomStrategy which makes use of the two samplers ...

What do you think?

Best,

Johannes

dlinzner-bcs commented 10 months ago

Hi Johannes! Thank you for these neat ideas to complement our DoE capabilities. I completely agree that it would be nice to have non-model based DoE schemes available.

I agree with most of you proposals. Why not just call the new DoE strategy FactorialDoEStrategy instead and keep the other name? I am even not entirely sure, if it is not enough to stick with DoEStrategy, and just communicate what we want via the objective, as it is handled for the space-filling case now.

I actually think the best option would be to change to DoEObjective data models that just takes the fields they need. The workflow would be like

   domain = Domain(
        inputs=all_inputs,
        outputs=[ContinuousOutput(key="y")],
        constraints=all_constraints,
    )
    objective = data_models.doe_objectives.DOptimalityObjective(domain = domain, formula="linear")
   # objective = data_models.doe_objectivesSpaceFillingObjective(domain = domain)
    data_model = data_models.DoEStrategy(
        domain=domain,
        objective=objective,
        optimization_strategy="iterative",
    )
    strategy = DoEStrategy(data_model=data_model)
    candidates = strategy.ask(
        candidate_count=n_experiments
    )

A understanding question: "In addition, also make the formula string available, if a user wants to exactly specify it." - is this related to DoE, or BO? DoE has this feature.

I have to read up on this UniversalSampler sounds fancy ;)