34 lines
900 B
Python
34 lines
900 B
Python
import random
|
|
from typing import List
|
|
|
|
from vector import Vector
|
|
|
|
|
|
class Brain:
|
|
def __init__(self, size: int):
|
|
self.step: int = 0
|
|
self.size: int = size
|
|
self.directions: List[Vector] = []
|
|
|
|
def randomize(self):
|
|
self.directions = [
|
|
Vector(1, random.random() * 360) for _ in range(self.size)
|
|
]
|
|
|
|
def available(self) -> bool:
|
|
return self.step < self.size
|
|
|
|
def next_direction(self) -> Vector:
|
|
self.step += 1
|
|
return self.directions[self.step - 1]
|
|
|
|
def clone(self) -> 'Brain':
|
|
out: Brain = Brain(self.size)
|
|
out.directions = self.directions.copy()
|
|
return out
|
|
|
|
def mutate(self, start: int):
|
|
mutation_rate: float = 0.01
|
|
for i in range(start, self.size):
|
|
if random.random() < mutation_rate:
|
|
self.directions[i] = Vector(1, random.random() * 360)
|