Я строю нейронную сеть, чтобы играть в Снейка с помощью эволюционного алгоритма.
Алгоритм:
Он имеет 12 входных нейронов + смещение:
- Расстояние до стены (вверх, вниз, влево, вправо)
- Есть ли еда? (Вверх, вниз, влево, вправо)
- расстояние до ближайшей части тела (вверх, вниз, влево, вправо)
и 4 выходных нейрона:
Уровень мутаций: 5%.
Численность населения: 500.
Родители: Лучшие 10 из последнего поколения.
Кроссовер: Каждый ребенок - это комбинация 50–50% двух случайных родителей
Решение нейронной сети:
Пока что Змея придумала довольно хорошее решение - добывать еду, избегать стен и избегать хвоста. Его путь - это круг у стены. Если он видит еду, он идет в направлении еды. При достижении стены она снова начинает кружить и т. Д.
Проблема:
Если Змея становится очень большой, она всегда видит свой собственный хвост в В том же направлении, где еда.
Проблема с расстоянием состоит в том, что если Хвост находится далеко, то Активация Нейрона, говорящая «не go для еды», очень высока (большее расстояние = более высокое входное значение) .
Я знаю, что мог бы исправить это, повернув Значения, так что большое число означает «близко», а маленькое «далеко». Другим способом может быть выполнение двоичного ввода или предоставление змее небольшого расстояния, чтобы смотреть в каждом направлении со значениями stati c (например, повернутыми). Я думаю, что есть много решений, как Ввод мог бы быть лучше.
Но я все еще задаюсь вопросом, может ли быть вероятность, что (очень) глубокая нейронная сеть знает, как изменить значение само по себе. Я думал об этом некоторое время, но я не мог придумать решение, как это можно сделать. Было бы приятно, если бы кто-то еще мог найти какое-то решение.