Bagaimana Anda merancang sistem pembelajaran mesin untuk memainkan Angry Birds?

22

Setelah bermain Angry Birds terlalu banyak, saya mulai mengamati strategi saya sendiri. Ternyata saya mengembangkan pendekatan yang sangat spesifik untuk mendapatkan 3 bintang di setiap level.

Itu membuat saya bertanya-tanya tentang tantangan mengembangkan sistem pembelajaran mesin yang akan mampu memainkan Angry Birds. Berinteraksi dengan permainan dan meluncurkan burung-burung itu sepele. Tetapi satu pertanyaan yang saya miliki adalah tentang "blok bangunan" dari sistem.

Sistem pembelajaran mesin tampaknya bekerja dengan konsep atau pemahaman sederhana tentang masalah tersebut. Ini sering dikodekan sebagai fitur sebagai input. Jadi tampaknya sistem perlu memiliki kemampuan untuk memahami beberapa konsep tingkat tinggi untuk menghasilkan strategi.

Apakah ini benar? Juga, apa tantangan atau bagian sulit dari pengembangan sistem seperti itu?

EDIT # 1:

Ini beberapa klarifikasi. Mendapatkan 3 bintang adalah masalah yang sulit karena Anda harus memaksimalkan poin. Ini dapat dilakukan dengan dua cara non-eksklusif: 1) Meminimalkan jumlah burung yang digunakan (Anda mendapatkan 10.000 poin untuk setiap burung yang tidak digunakan). 2) Memaksimalkan kehancuran kaca, kayu, dan benda-benda lainnya. Setiap objek yang hancur memberi Anda poin. Dimungkinkan untuk menghancurkan objek bernilai lebih dari 10.000 poin dengan satu burung.

Berikut sedikit penjelasan tentang "konsep tingkat tinggi". Untuk memaksimalkan poin yang dijelaskan di atas, Anda perlu menggunakan kekuatan khusus masing-masing burung. Jadi, itu berarti meluncurkan burung yang berbeda dengan lintasan yang berbeda, tergantung pada tata letak peta. Dan, saat bermain saya mengembangkan strategi yang menghancurkan area tertentu dengan burung tertentu dalam urutan tertentu.

Tampaknya tanpa pemahaman tentang bagaimana menggunakan setiap burung untuk menghancurkan area tertentu, sistem tidak dapat belajar untuk mendapatkan 3 bintang. Jadi, bagaimana Anda mengelola dan menyandikan sesuatu seperti itu? Bagaimana Anda memastikan bahwa sistem dapat mempelajari konsep-konsep tingkat tinggi ini?

B Tujuh
sumber

Jawaban:

13

Dengan asumsi Anda bisa mendapatkan kait yang tepat ke dalam perangkat lunak (atau Anda bekerja dengan mock-up Anda sendiri), beberapa hal akan mudah di sini, dan beberapa yang kurang begitu. Ini masalah yang cukup sulit menurut saya. Seperti yang disebutkan carlosdc, Reinforcement Learning (RL) adalah salah satu jalan yang mungkin, meskipun saya tidak yakin itu jalan yang benar.

Ketika Anda mulai, Anda harus mendefinisikan apa ruang keadaan Anda , ruang tindakan , dinamika transisi , dan fungsi hadiah . Ruang keadaan / tindakan dapat kontinu atau diskrit, dan dinamika transisi dapat diberikan oleh masalah atau dimodelkan secara matematis. Akhirnya fungsi hadiah dapat diberikan a-priori , atau dapat disampel (dengan atau tanpa suara).

Ruang tindakannya sederhana: hanya arah dan kekuatan yang Anda gunakan untuk menembak burung saat ini. Bagi manusia, ini adalah masalah tersendiri (mouse / layar sentuh adalah perangkat input digital) - misalkan (misalnya) ada 32 kemungkinan arah dan 10 kekuatan yang memungkinkan, memberikan 320 kemungkinan tindakan.

Fungsi hadiah juga cukup mudah untuk diturunkan: tujuannya adalah untuk menyingkirkan semua babi dengan jumlah burung paling sedikit (OK jadi ada poin tambahan untuk hal-hal lain tapi mari kita abaikan itu untuk saat ini). Hal terbaik adalah jika kita tahu fungsi sebenarnya yang menghasilkan poin dari membunuh babi (tergantung pada ukuran babi dll IIRC) - tetapi untuk tingkat tunggal ini bisa dimodelkan dengan sempurna.

Ruang negara dan dinamika transisi jauh lebih sulit. Untuk memodelkan ini dengan benar, kita harus mengetahui seluruh tata letak peta dan fisika game. Dinamika transisi mengatakan "Jika saya berada di negara x dan saya melakukan tindakan y , saya akan mendarat di negara z ". Anda dapat melihat kesulitannya, pertama karena fisika kompleks dari sistem berarti bahwa ini akan sangat sulit untuk dimodelkan secara akurat, dan kedua karena ada begitu banyak kemungkinan kondisi yang dihasilkan bahkan setelah putaran pertama (320), dan ini adalah jika kita asumsikan tidak ada stokastik dalam mesin fisika, yang dari memainkannya saya curiga ada. Saya pikir pada tahap ini Anda akan menyerah dan pulang.

Pendekatan lain adalah memperlakukannya seperti yang dilakukan manusia pada awalnya - yaitu coba-coba. Manusia, setidaknya untuk memulainya, menembak secara virtual (walaupun dengan yang cukup kuat sebelum mengirim burung ke arah babi, tetapi ini dapat dengan mudah dikodekan), sampai sejumlah tindakan baik ditemukan. Ini lebih seperti bandit multi-bersenjatapengaturan. "Lengan" para bandit di sini adalah tindakan yang memungkinkan. Algoritme mencoba menyeimbangkan eksplorasi dan eksploitasi - yaitu menjelajahi ruang tindakan dan mengeksploitasi tindakan yang baik ketika mereka ditemukan. Untuk ini, Anda tidak perlu tahu apa-apa tentang dinamika yang mendasarinya - Anda hanya perlu tahu tentang tindakan dan hadiah. Untuk melakukannya sepenuhnya, Anda harus memiliki lengan untuk setiap aksi yang mungkin atas semua putaran (misalnya Anda memiliki 5 burung * 320 aksi = 320 ^ 5 = sekitar 10 ^ 12 aksi), sehingga ruang aksi sangat besar! Namun Anda dapat menggunakan beberapa trik untuk meningkatkan ini jika Anda tahu sedikittentang ruang negara. Misalnya, Anda mungkin dapat mengesampingkan tindakan yang mengirim burung menjauh dari babi, turun ke tanah, atau tanpa kekuatan yang cukup untuk mencapai salah satu dari mereka. Anda juga hanya perlu mencapai burung ke-5 jika Anda belum membunuh babi di babak sebelumnya, jadi sebagian dari status aksi sebenarnya tidak mungkin. Ini agak mengingatkan pada pendekatan yang digunakan dalam algoritma MoGo , yang merupakan program komputer untuk bermain Go berdasarkan batas Atas Keyakinan diterapkan pada Pohon , satu pendekatan untuk memecahkan masalah bandit multi-bersenjata.

tdc
sumber
1
Jawaban bagus! Saya pikir ruang tindakan jauh lebih besar dari 320 tindakan yang mungkin. Setiap piksel yang tersapu oleh busur kira-kira 0,7 inci (pada iPad) dari kiri horizontal ke vertikal bawah akan menghasilkan lintasan dan hasil yang berbeda. IPad memiliki resolusi 132 dpi, sehingga mungkin sekitar 8.000 piksel yang memungkinkan untuk dipilih. Saya tidak ingin memikirkan detailnya, tetapi apakah meningkatkan ruang tindakan menjadi 8.000 mengubah jawabannya? Bagaimana Anda bisa bekerja dengan ruang aksi yang lebih besar?
B Seven
Mencoba mensimulasikan dinamika adalah pertanyaan yang sama sekali berbeda (dan sulit). Saya pikir untuk diskusi ini kita harus mengasumsikan bahwa kita memiliki akses ke kode sumber dan dapat secara akurat mendapatkan informasi status. Juga, fungsi hadiah tidak hanya berapa banyak babi yang Anda bunuh. Untuk mendapatkan 3 bintang pada level, Anda harus melakukan sesuatu yang lebih sulit. Lihat edit untuk pertanyaan.
B Seven
@Beven Pada prinsipnya tidak, ruang aksi yang lebih besar tidak mengubah jawaban, meskipun Anda mungkin harus melakukan lebih banyak pemangkasan dan menggunakan lebih banyak daya komputasi ;-) Namun, perhatikan bahwa ini adalah kandidat yang sempurna untuk pemrosesan paralel. Pertanyaan tentang bintang itu rumit, karena ini menyiratkan bahwa tidak ada pemetaan sederhana dari pembunuhan ke bintang, meskipun saya pikir Anda mendapatkan lebih banyak bintang hanya dengan melewati ambang titik (biasanya ini dilakukan dengan menggunakan lebih sedikit burung). Jika tidak, Anda harus secara artifisial meningkatkan jumlah eksplorasi untuk menghindari penyelesaian di jalur suboptimal terlalu dini.
tdc
8

Pertanyaan keren!

Sepertinya pertanyaan ini adalah tentang teknik alami untuk jenis masalah ini. Saya pikir teknik alami untuk jenis masalah ini adalah reinforcement learning (RL). RL adalah tentang bagaimana seorang agen harus mengambil tindakan dalam suatu lingkungan untuk memaksimalkan beberapa gagasan tentang imbalan kumulatif. Mungkin algoritma yang paling terkenal untuk RL adalah Q-learning . Saya pikir ini adalah pertanyaan pertama di situs ini tentang pembelajaran penguatan.

Saya pikir apa yang Anda tanyakan adalah benar jika Anda mencoba untuk mendekati ini sebagai klasifikasi / regresi, tetapi itu sepertinya bukan alat yang tepat untuk masalah ini. Ini tentu saja merupakan masalah RL di mana urutan tindakan dan hasil perlu diperhitungkan.

carlosdc
sumber
5

Periksa di sini bagaimana orang lain melakukannya atau berpartisipasi sendiri: Angry Birds AI Challenge http://ai2012.web.cse.unsw.edu.au/abc.html

Jochen Renz
sumber
mungkin Anda dapat meringkas apa tautannya dan bagaimana kaitannya dengan pertanyaan itu. Seperti sekarang, jawaban Anda lebih baik sebagai komentar.
FredrikD
4

hanya menyebutkan ini dalam meta. ada perintis penggunaan algoritma genetika oleh Koza untuk menyelesaikan video game Pacman. ia membangun primitif algoritmik yang bisa merasakan dan bertindak. seingat saya ini digabungkan dalam pohon seperti Lisp untuk membuat algoritma yang lebih besar. crossover dengan pohon Lisp melibatkan penggantian atau pertukaran subtree yang mewakili ekspresi algoritma. fungsi kesuksesan adalah sesuatu seperti "titik dimakan" atau "titik plus hantu dimakan" atau "waktu tetap hidup". masih ada beberapa pekerjaan di daerah ini. ada koza ref di makalah ini sebagai berikut. waktu pelatihan mungkin sangat lama dan "konvergensi" sangat bertahap untuk jenis masalah ini.

Belajar Bermain Pac-Man: Pendekatan Evolusioner, Berbasis Aturan oleh Gallagher dan Ryan

ay
sumber