From 8873f1696653c74d2218f76654bbfcb533554849 Mon Sep 17 00:00:00 2001 From: Daniel Ari Friedman Date: Fri, 7 Feb 2025 11:50:16 -0800 Subject: [PATCH] Delete renderer.py --- ant_colony/visualization/renderer.py | 126 --------------------------- 1 file changed, 126 deletions(-) delete mode 100644 ant_colony/visualization/renderer.py diff --git a/ant_colony/visualization/renderer.py b/ant_colony/visualization/renderer.py deleted file mode 100644 index 69bd265..0000000 --- a/ant_colony/visualization/renderer.py +++ /dev/null @@ -1,126 +0,0 @@ -""" -Visualization module for the ant colony simulation using matplotlib. -""" - -import numpy as np -import matplotlib.pyplot as plt -from matplotlib.patches import Circle, Wedge -from matplotlib.collections import PatchCollection -import matplotlib.animation as animation - -class SimulationRenderer: - """Handles visualization of the ant colony simulation.""" - - def __init__(self, config: dict): - """Initialize the renderer with configuration settings.""" - self.config = config - self.viz_config = config['visualization'] - self.env_size = config['environment']['size'] - - # Setup the figure and axis - self.fig, self.ax = plt.subplots(figsize=(10, 10)) - self.ax.set_xlim(0, self.env_size[0]) - self.ax.set_ylim(0, self.env_size[1]) - self.ax.set_aspect('equal') - - # Initialize collections for different elements - self.agent_patches = [] - self.food_patches = [] - self.obstacle_patches = [] - self.pheromone_plots = {} - - # Setup the nest - nest_loc = config['environment']['nest_location'] - nest = Circle(nest_loc, 5, color=self.viz_config['colors']['nest']) - self.ax.add_patch(nest) - - def update(self, world_state: dict) -> None: - """Update the visualization with current world state.""" - # Clear previous patches - for patch in self.agent_patches + self.food_patches + self.obstacle_patches: - patch.remove() - self.agent_patches.clear() - self.food_patches.clear() - self.obstacle_patches.clear() - - # Update pheromones - for p_type, grid in world_state['pheromones'].items(): - if p_type not in self.pheromone_plots: - color = self.viz_config['colors']['pheromones'][p_type] - self.pheromone_plots[p_type] = self.ax.imshow( - grid, - extent=[0, self.env_size[0], 0, self.env_size[1]], - cmap='Greens' if p_type == 'food' else 'Reds', - alpha=0.3, - vmin=0, - vmax=1 - ) - else: - self.pheromone_plots[p_type].set_array(grid) - - # Draw agents - for agent in world_state['agents']: - color = self.viz_config['colors']['agents'][agent.current_task.value] - agent_patch = self._create_agent_patch(agent, color) - self.ax.add_patch(agent_patch) - self.agent_patches.append(agent_patch) - - # Draw food sources - for food in world_state['resources']: - food_patch = Circle( - (food.position.x, food.position.y), - food.size, - color=self.viz_config['colors']['food'] - ) - self.ax.add_patch(food_patch) - self.food_patches.append(food_patch) - - # Draw obstacles - for obstacle in world_state['obstacles']: - obstacle_patch = Circle( - (obstacle.position.x, obstacle.position.y), - obstacle.size, - color=self.viz_config['colors']['obstacles'] - ) - self.ax.add_patch(obstacle_patch) - self.obstacle_patches.append(obstacle_patch) - - # Trigger redraw - if self.viz_config['realtime']['enabled']: - self.fig.canvas.draw() - self.fig.canvas.flush_events() - - def _create_agent_patch(self, agent, color: str) -> Wedge: - """Create a wedge patch to represent an agent.""" - # Create a wedge shape to show orientation - radius = 1.0 - angle = np.degrees(agent.position.theta) - wedge = Wedge( - (agent.position.x, agent.position.y), - radius, - angle - 30, # 60 degree wide wedge - angle + 30, - color=color - ) - return wedge - - def save_animation(self, frames: list, filename: str) -> None: - """Save the simulation as an animation.""" - if self.viz_config['recording']['enabled']: - anim = animation.ArtistAnimation( - self.fig, - frames, - interval=50, - blit=True, - repeat=False - ) - anim.save(filename, writer='pillow') - - def show(self) -> None: - """Display the current visualization.""" - if self.viz_config['realtime']['enabled']: - plt.show() - - def close(self) -> None: - """Close the visualization window.""" - plt.close(self.fig) \ No newline at end of file