Closed jduerholt closed 1 year ago
Hi Johannes,
Is this also necessary for the Chebyshev scalarization? Or does the scalarization internally transform it in a way that it is not necessary to pass feasible_cost?
Yes using an infeasability cost would still be necessary because the values are not necessarily strictly positive (in fact they will typically be negative for maximization in the current implementation). Note: you may want to pass only the feasible Y values values to get_chebyshev_scalarization
because the normalization bounds in get_chebyshev_scalarization
are defined to adequately cover the Pareto frontier and in the constrained case, we are generally only interested in the feasible Pareto frontier.
. A different example could be that one wants to minimize the quadratic/absolute distance to a specific point. ... To make
get_chebyshev_scalarization
more versatile, one would have to extend it in a way that it takes as input for every single objective a callable and then applies the scalarization to the output of the callable. What do you think about this?
If you want to minimize a quadratic/absolute distance to a specific point, why not just write a custom function to do this? Call this dist_transform
this can be applied to some subset of the M
measured outputs to obtain M'
transformed outputs. If M'>1
and you still want to use a chebyshev objective, then you can create the chebyshev objective using transformed outputs and apply the entire objective in sequence to new predicted outputs Y
as:
Y_tf = dist_transform(Y)
obj = chebyshev_obj(Y_tf)
This entire objective can be passed to an acquisition function simply by making it a GenericMCObjective
. E.g.
GenericMCObjective(lambda Y, X: chebyshev_obj(dist_transform(Y)))
.
I'm don't think we should overload the functionality of get_chebyshev_scalarization
unless there are use cases that we can't currently support.
Returning to the first question. The another approach for constrained multi-objective BO would be to use feasibility weighted outputs. E.g. Apply feasiblity weighting (with an infeasible cost) to your objectives, call this feas_weight
. Then create a chebyshev scalarization with only the feasible values. And then apply both in sequence to new outputs Y
.
chebyshev_scalarization(feas_weight(Y))
.
This is the technique used in https://proceedings.mlr.press/v162/daulton22a/daulton22a.pdf in Appendix F.3, in the context of robust optimization under input noise.
Issue description
I have two questions/ideas regarding the Chebyshev scalarization:
get_chebyshev_scalarization
when passing a negative weight. In a minimization scenario in combination with output constraints one normally has to definefeasible_cost
for theConstrainedMCObjective
. Is this also necessary for the Chebyshev scalarization? Or does the scalarization internally transform it in a way that it is not necessary to passfeasible_cost
?get_chebyshev_scalarization
can only be used in multiobjective optimisations when one want to minimize or maximize, other objectives are not possible. A different example could be that one wants to minimize the quadratic/absolute distance to a specific point. Of course this could be achieved by fitting the GP not to the direct output of an experiment but to the objetive that should be optimized. But I do not like this approach, as this requires learning things that are also known. Furthermore, I like to have prediction models that predict the actual thing which is measured and not some transformation of it. To make get_chebyshev_scalarization` more versatile, one would have to extend it in a way that it takes as input for every single objective a callable and then applies the scalarization to the output of the callable. What do you think about this?Best,
Johannes