diff --git a/examples/circle_packing_with_artifacts/evaluator.py b/examples/circle_packing_with_artifacts/evaluator.py index ea3202546..a8692c936 100644 --- a/examples/circle_packing_with_artifacts/evaluator.py +++ b/examples/circle_packing_with_artifacts/evaluator.py @@ -295,9 +295,9 @@ def evaluate(program_path): # Add successful packing stats for good solutions if valid and target_ratio > 0.95: # Near-optimal solutions artifacts["stdout"] = f"Excellent packing! Achieved {target_ratio:.1%} of target value" - artifacts["radius_stats"] = ( - f"Min: {validation_details['min_radius']:.6f}, Max: {validation_details['max_radius']:.6f}, Avg: {validation_details['avg_radius']:.6f}" - ) + artifacts[ + "radius_stats" + ] = f"Min: {validation_details['min_radius']:.6f}, Max: {validation_details['max_radius']:.6f}, Avg: {validation_details['avg_radius']:.6f}" return EvaluationResult( metrics={ @@ -404,9 +404,9 @@ def evaluate_stage1(program_path): # Add validation issues if any if not valid: - artifacts["stderr"] = ( - f"Validation failed: {len(validation_details.get('boundary_violations', []))} boundary violations, {len(validation_details.get('overlaps', []))} overlaps" - ) + artifacts[ + "stderr" + ] = f"Validation failed: {len(validation_details.get('boundary_violations', []))} boundary violations, {len(validation_details.get('overlaps', []))} overlaps" artifacts["failure_stage"] = "stage1_geometric_validation" if validation_details.get("boundary_violations"): artifacts["boundary_issues"] = validation_details["boundary_violations"][ diff --git a/examples/mlx_metal_kernel_opt/run_benchmarks.py b/examples/mlx_metal_kernel_opt/run_benchmarks.py index bc7c5fc2b..3095a8523 100644 --- a/examples/mlx_metal_kernel_opt/run_benchmarks.py +++ b/examples/mlx_metal_kernel_opt/run_benchmarks.py @@ -457,9 +457,7 @@ def print_comparison_summary(comparison_results): print(f" ā±ļø Average Time Reduction: {summary['avg_time_reduction_pct']:+.2f}%") print(f"\nšŸ“Š ABSOLUTE PERFORMANCE:") - print( - f" šŸ”µ Standard MLX-LM: {summary['avg_standard_decode_speed']:.1f} tokens/sec average" - ) + print(f" šŸ”µ Standard MLX-LM: {summary['avg_standard_decode_speed']:.1f} tokens/sec average") print( f" 🟠 Metal Kernel Optimized: {summary['avg_optimized_decode_speed']:.1f} tokens/sec average" ) diff --git a/openevolve/controller.py b/openevolve/controller.py index 1656f557b..472a6c372 100644 --- a/openevolve/controller.py +++ b/openevolve/controller.py @@ -376,9 +376,7 @@ async def run( # Specifically check if this is the new best program if self.database.best_program_id == child_program.id: - logger.info( - f"🌟 New best solution found at iteration {i+1}: {child_program.id}" - ) + logger.info(f"🌟 New best solution found at iteration {i+1}: {child_program.id}") logger.info(f"Metrics: {format_metrics_safe(child_program.metrics)}") # Save checkpoint @@ -405,8 +403,7 @@ async def run( break except Exception as e: - logger.error(f"Error in iteration {i+1}: {str(e)}") - traceback.print_exc() + logger.exception(f"Error in iteration {i+1}: {str(e)}") continue # Get the best program using our tracking mechanism diff --git a/openevolve/database.py b/openevolve/database.py index d7526f729..0f8c73742 100644 --- a/openevolve/database.py +++ b/openevolve/database.py @@ -161,9 +161,22 @@ def add( # Add to feature map (replacing existing if better) feature_key = self._feature_coords_to_key(feature_coords) - if feature_key not in self.feature_map or self._is_better( - program, self.programs[self.feature_map[feature_key]] - ): + should_replace = feature_key not in self.feature_map + + if not should_replace: + # Check if the existing program still exists before comparing + existing_program_id = self.feature_map[feature_key] + if existing_program_id not in self.programs: + # Stale reference, replace it + should_replace = True + logger.debug( + f"Replacing stale program reference {existing_program_id} in feature map" + ) + else: + # Program exists, compare fitness + should_replace = self._is_better(program, self.programs[existing_program_id]) + + if should_replace: self.feature_map[feature_key] = program.id # Add to specific island (not random!)