/ SmartDots / brain.py
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)