Вот исходный код для проекта HTML5, который реализует алгоритм машинного обучения в видеоигре Flappy Bird с использованием нейронных сетей и генетического алгоритма. Программа учит маленькой птице, как оптимально класть, чтобы безопасно пролететь через барьеры как можно дольше.
Полный учебник с гораздо более подробной информацией и демонстрацией, которую вы можете найти здесь:
http://www.askforgametask.com/tutorial/machine-learning-algorithm-flappy-bird
Здесь вы также можете посмотреть короткое видео с простой презентацией алгоритма:
https://www.youtube.com/watch?v=aewmdojejf0
Весь код написан в HTML5 с использованием Phaser Framework и библиотеки нейронной сети для реализации нейронной сети.
Чтобы играть в игру, каждое подразделение (птица) имеет свою собственную нейронную сеть, состоящую из следующих 3 слоев:
Входной слой с 2 нейронами, представляющими то, что видит птица:
1) horizontal distance between the bird and the closest gap
2) height difference between the bird and the closest gap
скрытый слой с 6 нейронами
выходной слой с 1 нейроном, используемым для обеспечения действия следующим образом:
if output > 0.5 then flap else do nothing
Существует используемая библиотека синаптической нейронной сети для внедрения всей искусственной нейронной сети вместо того, чтобы делать новую из царапины.
Основная концепция машинного обучения, реализованная в этой программе, основана на форме нейроволюции. Он использует эволюционные алгоритмы, такие как генетический алгоритм для обучения искусственных нейронных сетей. Вот основные шаги:
Создайте новую популяцию из 10 единиц (птиц) со случайной нейронной сетью
Пусть все подразделения играют в игру одновременно, используя свои собственные нейронные сети
Для каждой единицы рассчитайте его функцию пригодности , чтобы измерить его качество как:
fitness = total travelled distance - distance to the closest gap
Когда все подразделения убиты, оцените текущую популяцию до следующей, используя операторы генетического алгоритма (отбор, кроссовер и мутация) следующим образом:
1. sort the units of the current population in decreasing order by their fitness ranking
2. select the top 4 units and mark them as the winners of the current population
3. the 4 winners are directly passed on to the next population
4. to fill the rest of the next population, create 6 offsprings as follows:
- 1 offspring is made by a crossover of two best winners
- 3 offsprings are made by a crossover of two random winners
- 2 offsprings are direct copy of two random winners
5. to add some variations, apply random mutations on each offspring.
вернуться к шагу 2
Поскольку программа написана в HTML5 с использованием Phaser Framework и библиотеки синаптической нейронной сети, вам нужны эти файлы:
Вся игровая логика реализована в файле gamiplay.js . Он состоит из следующих классов:
App.Main
, основная процедура со следующими важными функциями:
TreeGroup Class
, расширенный класс Phaser Group для представления движущегося барьера. Эта группа содержит верхнюю и нижнюю спрайт дерева.
Tree Class
, расширенный класс Phaser Sprite, чтобы представлять спрайт дерева.
Bird Class
, расширенный класс Phaser Sprite, чтобы представлять птичьего спрайта.
Text Class
, расширенный класс Phaser Bitmaptext, используемый для текста рисования.
Генетический алгоритм реализован в файле Genetic.js , который состоит из следующего класса:
GeneticAlgorithm Class
, основной класс для обработки всех операций генетического алгоритма. Требуются два параметра: MAX_UNIT , чтобы установить общее количество единиц в популяции и TOP_UNIT , чтобы установить ряд лучших единиц (победителей), используемых для развития населения. Вот его основные функции: