Pygame подойдет для начала, его ты уже знаешь. Для более красивой картинки потом можно перейти на Pyglet или даже PyOpenGL, но это усложнение.
Архитектура симуляции:
Каждое существо - объект класса Creature с атрибутами-генами:
class Creature:
def __init__(self, genes=None):
if genes:
self.speed = genes['speed']
self.size = genes['size']
self.vision = genes['vision']
else:
self.speed = random.uniform(1, 5)
self.size = random.uniform(5, 20)
self.vision = random.uniform(50, 200)
self.energy = 100
self.x = random.randint(0, WIDTH)
self.y = random.randint(0, HEIGHT)
def mutate(self):
# мутация с вероятностью 10% на каждый ген
if random.random() < 0.1:
self.speed += random.uniform(-0.5, 0.5)
# аналогично для остальных
def reproduce(self):
child_genes = {
'speed': self.speed,
'size': self.size,
'vision': self.vision
}
child = Creature(child_genes)
child.mutate()
return child
Фитнес-функция:
Не нужна явная. Само выживание и есть отбор. Кто набрал energy > 150 к концу раунда - вызываешь reproduce(). Кто ушел в ноль - удаляешь из списка.
Нейросети:
Для твоего описания не нужны. Нейросети добавляют когда хотят чтобы существа УЧИЛИСЬ принимать решения (куда идти, от кого убегать). Это NEAT алгоритм, там отдельная большая тема.
Для начала сделай простую логику: существо видит еду в радиусе vision -> идет к ближайшей. Не видит -> бродит рандомно. Этого хватит чтобы увидеть эволюцию.
Отлично, именно это и хотел услышать. Про NEAT почитаю когда базовая версия заработает.