Симулятор эволюции клеток
Для работы необходимо поставить зависимости из requirements.txt
и библиотеку tkinter
.
Поле представляет собой мир, замкнутый циклично по горизонтали, и имеющий стены по горизонтали. На первичном поле в рандомных местах появляются питательные клетки, "травоядные" клетки.
На первичном поле спавнится N ограниченное число клеток питающихся растительными клетками, травоядные. Каждое поедание клетки восполняет здоровье.
Клетка содержит геном поведения который представляет из себя две матрицы весов. Когда клетка собирается сделать шаг, она передает свои веса в нейронную сеть, входные значения для данной нейронной сети и на основании результатов вычислений нейронной сети делает шаг.
Входными параметрами нейронной сети является окружение "живой" клетки, в радиусе одной клетки игрового поля, и здоровье самой клетки.
Выходные нейроны нейронной сетки отвечают каждый за свое действие:
- Клетка делает шаг вверх
- Клетка делает шаг вправо
- Клетка делает шаг вниз
- Клетка делает шаг влево
- Клетка кусает вверх, если там другая клетка, пытается ее съесть
- Клетка кусает вправо, если там другая клетка, пытается ее съесть
- Клетка кусает вниз, если там другая клетка, пытается ее съесть
- Клетка кусает влево, если там другая клетка, пытается ее съесть
- Клетка производит свою копию, делится
Обработкой поведения клетки занимается нейронная сеть с одним скрытым слоем. Она принимает веса и входные значения. Каждая клетка имеет свои веса, дабы поведение клетки было уникальным.
При появлении новая клетка получает M энергии. Если энергия клетки достигает 0, она умирает, при этом став растительной клеткой. При поедании растительной клетки, "травоядная" клетка получает K энергии.
При делении, клетка создают точную копию своей клетки, при этом половину своего здоровья она передает ребенку.