Summary
Add an optional weight: float = 1.0 field to Observable so users can express relative importance of objectives in Pareto analysis.
Motivation
Currently all observables are treated equally in non-dominated sorting. Users often care more about some objectives than others (e.g. MAE matters more than coverage). Weighted Pareto scales the objective space before NDS, preserving multi-objective structure while reflecting preferences.
Scope
- Add
weight: float = 1.0 to Observable dataclass
- Propagate weights into
extract_front(), pareto_rank(), hypervolume(), igd_plus()
- Propagate through
top_k_pareto_filter(), Study.front(), Study.front_hypervolume()
- Propagate into
run_adaptive() (scale optuna objective values)
- Tests for weighted vs unweighted behavior
- Backward compatible: default weight=1.0 preserves existing behavior
Summary
Add an optional
weight: float = 1.0field toObservableso users can express relative importance of objectives in Pareto analysis.Motivation
Currently all observables are treated equally in non-dominated sorting. Users often care more about some objectives than others (e.g. MAE matters more than coverage). Weighted Pareto scales the objective space before NDS, preserving multi-objective structure while reflecting preferences.
Scope
weight: float = 1.0toObservabledataclassextract_front(),pareto_rank(),hypervolume(),igd_plus()top_k_pareto_filter(),Study.front(),Study.front_hypervolume()run_adaptive()(scale optuna objective values)