Мой проект - сделать ИИ, играющего 2048 на питоне, используя генетический алгоритм и нейронные сети.
Я использую нейронную сеть в качестве структуры для вычисления того, что является лучшим движением, учитывая текущую сетку и генетический алгоритм для корректировки весов и смещений. Так что я не использую обратное распространение.
На данный момент лучшие результаты составляют всего 512, что чуть выше, чем у полностью случайного игрового продукта (в среднем случайный пробег достигает 128, а самый удачливый дает 256).
Во многих руководствах по искусственному интеллекту они говорили, что найти правильные настройки - это вопрос опыта. Так как это мой первый проект в этой области, у меня нет такого опыта.
У меня вопрос , в котором содержится вся информация ниже, , что можно отрегулировать для улучшения результатов ?
Жирные цифры - это параметры, которые, я думаю, должны быть скорректированы.
Я следую основным шагам в алгоритме генетики:
поколение:
Я создаю совокупность 600 сетей.
Структура сетей:
- 16 нейронов для входного слоя (по одному на каждый квадрат сетки)
- 3 скрытые слои с 10 нейронами каждый
- 4 нейронов для вывода
оценка
Я проверяю все население, выполняя полную игру 2048 года (конечно, это неграфическое моделирование) и собирая их счет и значение максимальной плитки. (Я использую многопроцессорность, чтобы сделать несколько запусков параллельно)
Я рассчитываю пригодность на оценка + (maxTileValue) ²
выбор
Я просто сортирую их и убиваю половину самого плохого фитнеса
воспроизведение
для каждой сети, которую мне нужно воссоздать, я выбираю одного из выживших и добавляю к каждому весу случайное значение между -0,5 и 0,5, умноженным на 100 / (средняя пригодность генерации)
Я повторяю это для 200 поколений.
Я не использую Tensorflow или какую-либо библиотеку.
Полный код на github (https://github.com/Nonoreve/2048Solver/tree/master/solver/AIsolver)
(я студент из Франции, поэтому извиняюсь за синтаксис и грамматику) .