@@ -441,10 +441,10 @@ def get_top_programs(
441441 reverse = True ,
442442 )
443443 else :
444- # Sort by average of all numeric metrics
444+ # Sort by combined_score if available, otherwise by average of all numeric metrics
445445 sorted_programs = sorted (
446446 candidates ,
447- key = lambda p : safe_numeric_average (p .metrics ),
447+ key = lambda p : p . metrics . get ( "combined_score" , safe_numeric_average (p .metrics ) ),
448448 reverse = True ,
449449 )
450450
@@ -882,7 +882,7 @@ def _update_archive(self, program: Program) -> None:
882882 # Find worst program among valid programs
883883 if valid_archive_programs :
884884 worst_program = min (
885- valid_archive_programs , key = lambda p : safe_numeric_average (p .metrics )
885+ valid_archive_programs , key = lambda p : p . metrics . get ( "combined_score" , safe_numeric_average (p .metrics ) )
886886 )
887887
888888 # Replace if new program is better
@@ -1284,10 +1284,10 @@ def _enforce_population_limit(self, exclude_program_id: Optional[str] = None) ->
12841284 # Get programs sorted by fitness (worst first)
12851285 all_programs = list (self .programs .values ())
12861286
1287- # Sort by average metric (worst first)
1287+ # Sort by combined_score if available, otherwise by average metric (worst first)
12881288 sorted_programs = sorted (
12891289 all_programs ,
1290- key = lambda p : safe_numeric_average (p .metrics ),
1290+ key = lambda p : p . metrics . get ( "combined_score" , safe_numeric_average (p .metrics ) ),
12911291 )
12921292
12931293 # Remove worst programs, but never remove the best program or excluded program
0 commit comments