Source code for biogeme.results_processing.pareto
"""
Identification of Pareto optimal models
Michel Bierlaire
Fri Oct 4 09:22:22 2024
"""
from biogeme_optimization import pareto
from biogeme_optimization.pareto import Pareto
from .estimation_results import EstimationResults
[docs]
def pareto_optimal(
dict_of_results: dict[str, EstimationResults], a_pareto: Pareto | None = None
) -> dict[str, EstimationResults]:
"""Identifies the non dominated models, with respect to maximum
log likelihood and minimum number of parameters
:param dict_of_results: dict of results associated with their config ID
:param a_pareto: if not None, Pareto set where the results will be inserted.
:return: a dict of named results with pareto optimal results
"""
if a_pareto is None:
the_pareto = pareto.Pareto()
else:
the_pareto = a_pareto
for config_id, estimation_results in dict_of_results.items():
the_element = pareto.SetElement(
element_id=config_id,
objectives=[
-estimation_results.final_log_likelihood,
estimation_results.number_of_parameters,
],
)
the_pareto.add(the_element)
selected_results = {
element.element_id: dict_of_results[element.element_id]
for element in the_pareto.pareto
}
the_pareto.dump()
return selected_results