Compare commits
	
		
			2 Commits
		
	
	
		
			91fef15572
			...
			8a53d4ac37
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 8a53d4ac37 | |||
| f567b0130a | 
							
								
								
									
										18
									
								
								ui/hud.py
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								ui/hud.py
									
									
									
									
									
								
							| @ -152,15 +152,9 @@ class HUD: | |||||||
|         LAYER_VERTICAL_MARGIN = 30  # Top and bottom margin within visualization for neurons |         LAYER_VERTICAL_MARGIN = 30  # Top and bottom margin within visualization for neurons | ||||||
| 
 | 
 | ||||||
|         # Connection appearance constants |         # Connection appearance constants | ||||||
|         WEIGHT_NORMALIZATION_DIVISOR = 2  # Divisor for normalizing weights to [-1, 1] range |  | ||||||
|         MAX_CONNECTION_THICKNESS = 4  # Maximum thickness for connection lines |         MAX_CONNECTION_THICKNESS = 4  # Maximum thickness for connection lines | ||||||
|         MIN_CONNECTION_THICKNESS = 1  # Minimum thickness for connection lines |         MIN_CONNECTION_THICKNESS = 1  # Minimum thickness for connection lines | ||||||
| 
 | 
 | ||||||
|         # Connection colors (RGB values) |  | ||||||
|         CONNECTION_BASE_INTENSITY = 128  # Base color intensity for connections |  | ||||||
|         CONNECTION_POSITIVE_GREEN = 128  # Green component for positive weights |  | ||||||
|         CONNECTION_NEGATIVE_RED = 128  # Red component for negative weights |  | ||||||
| 
 |  | ||||||
|         # Neuron activation colors |         # Neuron activation colors | ||||||
|         NEURON_BASE_INTENSITY = 100  # Base color intensity for neurons |         NEURON_BASE_INTENSITY = 100  # Base color intensity for neurons | ||||||
|         NEURON_ACTIVATION_INTENSITY = 155  # Additional intensity based on activation |         NEURON_ACTIVATION_INTENSITY = 155  # Additional intensity based on activation | ||||||
| @ -359,12 +353,14 @@ class HUD: | |||||||
|                     screen.blit(activation_text, text_rect) |                     screen.blit(activation_text, text_rect) | ||||||
| 
 | 
 | ||||||
|         # Draw layer labels |         # Draw layer labels | ||||||
|         layer_labels = ["Input", "Hidden", "Output"] |         num_layers = len(network.layers) | ||||||
|         for layer_idx in range(len(network.layers)): |         for layer_idx in range(num_layers): | ||||||
|             if layer_idx >= len(layer_labels): |             if layer_idx == 0: | ||||||
|                 label = f"Layer {layer_idx}" |                 label = "Input" | ||||||
|  |             elif layer_idx == num_layers - 1: | ||||||
|  |                 label = "Output" | ||||||
|             else: |             else: | ||||||
|                 label = layer_labels[layer_idx] if layer_idx < len(layer_labels) else f"Hidden {layer_idx - 1}" |                 label = f"Hidden {layer_idx}" if num_layers > 3 else "Hidden" | ||||||
| 
 | 
 | ||||||
|             # Find average x position for this layer |             # Find average x position for this layer | ||||||
|             x_positions = [pos[0] for (l_idx, n_idx), pos in neuron_positions.items() if l_idx == layer_idx] |             x_positions = [pos[0] for (l_idx, n_idx), pos in neuron_positions.items() if l_idx == layer_idx] | ||||||
|  | |||||||
| @ -129,7 +129,8 @@ class FlexibleNeuralNetwork: | |||||||
|             (mutated._add_connection, 1.5),  # Moderate - grow connectivity |             (mutated._add_connection, 1.5),  # Moderate - grow connectivity | ||||||
|             (mutated._remove_connection, 0.8),  # Less common - reduce connectivity |             (mutated._remove_connection, 0.8),  # Less common - reduce connectivity | ||||||
|             (mutated._add_neuron, 0.3),  # Rare - structural growth |             (mutated._add_neuron, 0.3),  # Rare - structural growth | ||||||
|             (mutated._remove_neuron, 0.1)  # Very rare - structural reduction |             (mutated._remove_neuron, 0.1),  # Very rare - structural reduction | ||||||
|  |             (mutated._add_layer, 0.05),  # New: create a new layer (very rare) | ||||||
|         ] |         ] | ||||||
| 
 | 
 | ||||||
|         # Apply weighted random mutations |         # Apply weighted random mutations | ||||||
| @ -339,6 +340,32 @@ class FlexibleNeuralNetwork: | |||||||
|                                 adjusted_connections.append((src_layer, src_neuron, weight)) |                                 adjusted_connections.append((src_layer, src_neuron, weight)) | ||||||
|                         neuron['connections'] = adjusted_connections |                         neuron['connections'] = adjusted_connections | ||||||
| 
 | 
 | ||||||
|  |     def _add_layer(self): | ||||||
|  |         """Add a new hidden layer at a random position with at least one neuron.""" | ||||||
|  |         if len(self.layers) < 2: | ||||||
|  |             return  # Need at least input and output layers | ||||||
|  | 
 | ||||||
|  |         # Choose a position between input and output layers | ||||||
|  |         insert_idx = random.randint(1, len(self.layers) - 1) | ||||||
|  |         # Create a new hidden neuron | ||||||
|  |         new_neuron = { | ||||||
|  |             'type': 'hidden', | ||||||
|  |             'id': f'hidden_{random.randint(1000, 9999)}', | ||||||
|  |             'bias': random.uniform(-1, 1), | ||||||
|  |             'connections': [] | ||||||
|  |         } | ||||||
|  |         # Connect to all neurons in the previous layer | ||||||
|  |         for prev_idx in range(len(self.layers[insert_idx - 1])): | ||||||
|  |             if random.random() < 0.5: | ||||||
|  |                 new_neuron['connections'].append((insert_idx - 1, prev_idx, random.uniform(-2, 2))) | ||||||
|  |         # Insert the new layer | ||||||
|  |         self.layers.insert(insert_idx, [new_neuron]) | ||||||
|  |         # Connect neurons in the next layer to the new neuron | ||||||
|  |         if insert_idx + 1 < len(self.layers): | ||||||
|  |             for neuron in self.layers[insert_idx + 1]: | ||||||
|  |                 if 'connections' in neuron and random.random() < 0.5: | ||||||
|  |                     neuron['connections'].append((insert_idx, 0, random.uniform(-2, 2))) | ||||||
|  | 
 | ||||||
|     def _ensure_network_connectivity(self): |     def _ensure_network_connectivity(self): | ||||||
|         """Ensure the network maintains basic connectivity from inputs to outputs.""" |         """Ensure the network maintains basic connectivity from inputs to outputs.""" | ||||||
|         # Check if output neurons have any connections |         # Check if output neurons have any connections | ||||||
|  | |||||||
| @ -273,9 +273,6 @@ class DefaultCell(BaseEntity): | |||||||
|         :param interactable: List of nearby entities (unused). |         :param interactable: List of nearby entities (unused). | ||||||
|         :return: Self. |         :return: Self. | ||||||
|         """ |         """ | ||||||
|         self.tick_count += 1 |  | ||||||
|         if self.tick_count % 100 == 0: |  | ||||||
|             self.behavioral_model = self.behavioral_model.mutate(1) |  | ||||||
| 
 | 
 | ||||||
|         if interactable is None: |         if interactable is None: | ||||||
|             interactable = [] |             interactable = [] | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user