brain.py
1 import random 2 from typing import List 3 4 from vector import Vector 5 6 7 class Brain: 8 def __init__(self, size: int): 9 self.step: int = 0 10 self.size: int = size 11 self.directions: List[Vector] = [] 12 13 def randomize(self): 14 self.directions = [ 15 Vector(1, random.random() * 360) for _ in range(self.size) 16 ] 17 18 def available(self) -> bool: 19 return self.step < self.size 20 21 def next_direction(self) -> Vector: 22 self.step += 1 23 return self.directions[self.step - 1] 24 25 def clone(self) -> 'Brain': 26 out: Brain = Brain(self.size) 27 out.directions = self.directions.copy() 28 return out 29 30 def mutate(self, start: int): 31 mutation_rate: float = 0.01 32 for i in range(start, self.size): 33 if random.random() < mutation_rate: 34 self.directions[i] = Vector(1, random.random() * 360)