Get the best program based on a metric Args: metric: Metric to use for ranking (uses combined_score or average if None) Returns: Best program or None if database is empty
(self, metric: Optional[str] = None)
| 476 | return parent, inspirations |
| 477 | |
| 478 | def get_best_program(self, metric: Optional[str] = None) -> Optional[Program]: |
| 479 | """ |
| 480 | Get the best program based on a metric |
| 481 | |
| 482 | Args: |
| 483 | metric: Metric to use for ranking (uses combined_score or average if None) |
| 484 | |
| 485 | Returns: |
| 486 | Best program or None if database is empty |
| 487 | """ |
| 488 | if not self.programs: |
| 489 | return None |
| 490 | |
| 491 | # If no specific metric and we have a tracked best program, return it |
| 492 | if metric is None and self.best_program_id: |
| 493 | if self.best_program_id in self.programs: |
| 494 | logger.debug(f"Using tracked best program: {self.best_program_id}") |
| 495 | return self.programs[self.best_program_id] |
| 496 | else: |
| 497 | logger.warning( |
| 498 | f"Tracked best program {self.best_program_id} no longer exists, will recalculate" |
| 499 | ) |
| 500 | self.best_program_id = None |
| 501 | |
| 502 | if metric: |
| 503 | # Sort by specific metric |
| 504 | sorted_programs = sorted( |
| 505 | [p for p in self.programs.values() if metric in p.metrics], |
| 506 | key=lambda p: p.metrics[metric], |
| 507 | reverse=True, |
| 508 | ) |
| 509 | if sorted_programs: |
| 510 | logger.debug(f"Found best program by metric '{metric}': {sorted_programs[0].id}") |
| 511 | else: |
| 512 | # Sort by fitness (excluding feature dimensions) |
| 513 | sorted_programs = sorted( |
| 514 | self.programs.values(), |
| 515 | key=lambda p: get_fitness_score(p.metrics, self.config.feature_dimensions), |
| 516 | reverse=True, |
| 517 | ) |
| 518 | if sorted_programs: |
| 519 | logger.debug(f"Found best program by fitness score: {sorted_programs[0].id}") |
| 520 | |
| 521 | # Update the best program tracking if we found a better program |
| 522 | if sorted_programs and ( |
| 523 | self.best_program_id is None or sorted_programs[0].id != self.best_program_id |
| 524 | ): |
| 525 | old_id = self.best_program_id |
| 526 | self.best_program_id = sorted_programs[0].id |
| 527 | logger.info(f"Updated best program tracking from {old_id} to {self.best_program_id}") |
| 528 | |
| 529 | # Also log the scores to help understand the update |
| 530 | if ( |
| 531 | old_id |
| 532 | and old_id in self.programs |
| 533 | and "combined_score" in self.programs[old_id].metrics |
| 534 | and "combined_score" in self.programs[self.best_program_id].metrics |
| 535 | ): |
no test coverage detected