Berikut adalah kode sumber untuk proyek HTML5 yang mengimplementasikan algoritma pembelajaran mesin dalam video game Flappy Bird menggunakan jaringan saraf dan algoritma genetika. Program ini mengajarkan seekor burung kecil cara mengepakkan secara optimal untuk terbang dengan aman melalui hambatan selama mungkin.
Tutorial lengkap dengan lebih banyak detail dan demo yang dapat Anda temukan di sini:
http://www.askforgametask.com/tutorial/machine-learning-algorithm-flappy-bird
Di sini Anda juga dapat menonton video pendek dengan presentasi sederhana dari algoritma:
https://www.youtube.com/watch?v=AEWMDOJejf0
Semua kode ditulis dalam HTML5 menggunakan phaser Framework dan Synaptic Neural Network Library untuk implementasi jaringan saraf.
Untuk memainkan permainan, setiap unit (burung) memiliki jaringan sarafnya sendiri terdiri dari 3 lapisan berikutnya:
Lapisan input dengan 2 neuron menghadirkan apa yang dilihat burung:
1) horizontal distance between the bird and the closest gap
2) height difference between the bird and the closest gap
lapisan tersembunyi dengan 6 neuron
Lapisan output dengan 1 neuron yang digunakan untuk memberikan tindakan sebagai berikut:
if output > 0.5 then flap else do nothing
Ada perpustakaan jaringan saraf sinaptik yang digunakan untuk mengimplementasikan seluruh jaringan saraf buatan alih -alih membuat yang baru dari awal.
Konsep utama pembelajaran mesin yang diimplementasikan dalam program ini didasarkan pada bentuk neuro-evolusi. Ini menggunakan algoritma evolusi seperti algoritma genetika untuk melatih jaringan saraf buatan. Inilah langkah utamanya:
Buat populasi baru 10 unit (burung) dengan jaringan saraf acak
Biarkan semua unit memainkan permainan secara bersamaan dengan menggunakan jaringan saraf mereka sendiri
Untuk setiap unit menghitung fungsi kebugarannya untuk mengukur kualitasnya sebagai:
fitness = total travelled distance - distance to the closest gap
Ketika semua unit terbunuh, evaluasi populasi saat ini ke yang berikutnya menggunakan operator algoritma genetika (seleksi, crossover dan mutasi) sebagai berikut:
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.
Kembali ke Langkah 2
Karena program ini ditulis dalam HTML5 menggunakan phaser framework dan Synaptic Neural Network Library Anda memerlukan file -file ini:
Seluruh logika game diimplementasikan dalam file gameplay.js . Ini terdiri dari kelas -kelas berikut:
App.Main
, rutinitas utama dengan fungsi -fungsi penting berikut:
TreeGroup Class
, Kelas Grup Phaser Diperpanjang untuk mewakili penghalang bergerak. Grup ini berisi sprite pohon atas dan bawah.
Tree Class
, kelas phaser sprite yang diperluas untuk mewakili sprite pohon.
Bird Class
, Kelas Phaser Sprite yang Diperpanjang untuk mewakili Sprite Burung.
Text Class
, Kelas Phaser Bitmaptext yang Diperluas yang Digunakan untuk Menggambar Teks.
Algoritma genetika diimplementasikan dalam file genetic.js yang terdiri dari kelas berikut:
GeneticAlgorithm Class
, kelas utama untuk menangani semua operasi algoritma genetika. Perlu dua parameter: MAX_Units untuk menetapkan jumlah total unit dalam populasi dan Top_units untuk menetapkan sejumlah unit teratas (pemenang) yang digunakan untuk populasi yang berkembang. Berikut adalah fungsi -fungsi pentingnya: