Kecerdasan buatan sederhana untuk mengajari dinosaurus offline Google Chrome melompati kaktus, menggunakan Jaringan Syaraf Tiruan dan Algoritma Genetika sederhana.
Tonton video ini untuk melihatnya beraksi, dan pelajari cara kerjanya: Kecerdasan Buatan dengan Dinosaurus Google
Instal Node.js
di komputer Anda.
Kloning/unduh folder ini ke komputer Anda.
jalankan npm install
di dalam folder ini
Buka game dinosaurus Chrome dan sisihkan terminalnya (HARUS berada di layar yang sama) (Kiat: buka alat pengembang, dan di bawah jaringan, setel ke offline)
jalankan node index
dalam folder ini. Jika permainan sudah ditemukan, maka kursor mouse akan dipindahkan ke asal floor
dino tersebut. Tekan tombol s
di terminal untuk mulai belajar.
Kami memiliki 3 input berbeda yang dibaca dari piksel layar:
Kami juga memiliki satu keluaran dengan 3 kemungkinan status:
Setiap Generasi terdiri dari 12 jaringan saraf (Genom).
Setiap genom diuji dengan game, dengan terus-menerus memetakan input yang dibaca dari game ke input jaringan saraf, dan dengan mendapatkan output/aktivasi dari jaringan dan menerapkannya pada tombol keyboard.
Saat menguji setiap genom, kami melacak "kebugarannya" dengan menghitung lompatan kaktus di dalam game.
Ketika seluruh generasi selesai, kami menghapus genom terburuk hingga mencapai genom N
Dengan N
genom tersebut, kami kemudian memilih dua secara acak, dan menyilangkan nilai/konfigurasinya. Setelah itu, kami menerapkan mutasi acak pada nilai/konfigurasi Jaringan Syaraf Tiruan, sehingga menciptakan genom baru.
Kami melakukan cross-over/mutasi hingga mendapatkan 12 genom lagi, dan mengulanginya terus-menerus.
Semua implementasi dilakukan menggunakan Node.js, dengan Synaptic (perpustakaan Neural Network), dan RobotJs (perpustakaan untuk membaca piksel dan mensimulasikan penekanan tombol).
Ada beberapa file dalam proyek ini:
index.js
: Ini menyatukan semua hal.
Scanner.js
: Lapisan abstraksi dasar di atas perpustakaan RobotJs yang membaca layar seperti ray tracing. Juga memiliki beberapa fungsi utilitas.
UI.js
: Cakupan global untuk manajemen UI. Ini menginisialisasi dan juga memperbarui layar jika ada perubahan.
GameManipulator.js
: Memiliki semua kode yang diperlukan untuk membaca sensor, dan menerapkan keluaran ke game. Juga bertanggung jawab untuk menghitung poin, mendapatkan status permainan, dan memicu callback/pendengar ke implementasi nyata.
Learner.js
: Ini adalah implementasi inti dari Algoritma Genetika. Di sinilah “keajaiban” terjadi, dengan menjalankan generasi, melakukan seleksi “alami”, pindah silang, mutasi…
genomes
dengan ekstensi .json
enter
(lalu, untuk memulai, tekan s
)o
untuk menyimpan generasiCc
untuk menyelesaikan prosesPermainan dino mempunyai bug yang mengganggu: Ia mulai "melayang" ke kanan seiring berjalannya waktu membuat dino tersebut salah diimbangi dari asal mula permainan. Hal itu membuat program membaca dino sebagai kaktus, karena warnanya sama.
Anda dapat memperbaikinya dengan terus menyegarkan halaman, atau dengan menempelkan kode ini di dalam konsol pada pemeriksa elemen:
// Make sure the dino does not drift to the right
setInterval(function (){Runner.instance_.tRex.xPos = 21}, 2000)
Silakan ikuti panduan gaya Node.js dari Felix. Itu tidak rumit, dan memiliki pola sederhana yang bagus untuk berbagai hal.