Teach a Neural Network untuk memainkan permainan kartu


10

Saat ini saya sedang menulis mesin untuk memainkan permainan kartu, karena belum ada mesin untuk permainan khusus ini.

Saya berharap dapat memperkenalkan jaring saraf untuk permainan setelahnya, dan memintanya belajar bermain game.

Saya menulis mesin sedemikian rupa sehingga bermanfaat untuk pemain AI. Ada titik pilihan, dan pada titik-titik itu, daftar opsi yang valid disajikan. Seleksi acak akan dapat memainkan game (meskipun tidak baik).

Saya telah belajar banyak tentang jaringan saraf (kebanyakan NEAT dan HyperNEAT) dan bahkan membangun implementasi saya sendiri. Saya masih tidak yakin bagaimana cara terbaik membangun AI yang dapat memperhitungkan semua variabel di salah satu jenis game ini. Apakah ada pendekatan bersama? Saya tahu bahwa Keldon menulis AI yang bagus untuk RftG yang memiliki jumlah kompleksitas yang layak, saya tidak yakin bagaimana dia berhasil membangun AI seperti itu.

Ada saran? Apakah itu layak? Apakah ada contoh bagus tentang ini? Bagaimana inputnya dipetakan?

EDIT: Saya telah melihat online dan belajar bagaimana jaringan saraf bekerja dan biasanya bagaimana mereka berkaitan dengan pengenalan gambar atau mengarahkan agen sederhana. Saya tidak yakin apakah atau bagaimana saya akan menerapkannya untuk membuat pilihan dengan kartu yang memiliki sinergi yang kompleks. Setiap arah menuju apa yang harus saya perhatikan akan sangat dihargai.

Tentang permainan: Permainan ini mirip dengan Magic: The Gathering. Ada seorang komandan yang memiliki kesehatan dan kemampuan. Pemain memiliki kumpulan energi yang mereka gunakan untuk meletakkan antek dan mantra di papan tulis. Minion memiliki kesehatan, nilai serangan, biaya, dll. Kartu juga memiliki kemampuan, ini tidak mudah disebutkan. Kartu dimainkan dari tangan, kartu baru diambil dari tumpukan kartu. Ini semua adalah aspek yang perlu dipertimbangkan oleh jaringan saraf.


Hai, selamat datang di AI.SE! Karena saat ini berdiri, tampak agak terlalu luas bagi kita untuk dapat menjawabnya dengan baik. Apakah Anda pikir Anda dapat mengeditnya untuk mempersempitnya sedikit? Terima kasih!
Mithical

Meskipun pertanyaannya luas, itu adalah pertanyaan yang jelas dan umum bagi seseorang yang baru di bidang ini. Juga satu tempat di mana jawaban sulit ditemukan menggunakan Google (karena kebanyakan tutorial tentang NN tampaknya berfokus pada pengenalan gambar dan contoh bahasa). Saya pikir itu layak jawaban menunjuk ke sumber daya yang baik tentang pendekatan dan teknik untuk menggunakan NN untuk bermain game, dalam hal ini dalam permainan kartu tertentu.
user12889

Terima kasih untuk umpan baliknya. Saya sudah sedikit mengedit pertanyaan saya. Setiap arah menuju materi pembelajaran akan sangat membantu. Saya menemukan sebagian besar pengenalan gambar seperti yang Anda sebutkan. Saya ingin sekali belajar dan senang memiliki sejumlah besar bacaan yang direkomendasikan, bukan hanya jawaban sederhana.
pcaston2

Jawaban:


3

Saya pikir Anda mengajukan pertanyaan yang bagus, terutama WRT tentang bagaimana input & output NN dipetakan ke mekanisme permainan kartu seperti MtG di mana tindakan yang tersedia sangat bervariasi sesuai konteks.

Saya tidak memiliki jawaban yang benar-benar memuaskan untuk ditawarkan, tetapi saya telah memainkan Keldon Race for the Galaxy NN yang berbasis AI - setuju bahwa itu sangat bagus - dan telah melihat bagaimana mengatasi masalah ini.

Kode terbaru untuk AI Keldon sekarang dapat dicari dan dijelajahi di github .

Kode ai ada dalam satu file . Ini menggunakan 2 NN yang berbeda, satu untuk "mengevaluasi kartu tangan dan aktif" dan yang lain untuk "memprediksi pilihan peran".

Yang akan Anda perhatikan adalah bahwa ia menggunakan jumlah wajar pada kode non-NN untuk memodelkan mekanisme permainan. Sangat banyak solusi hybrid.

Pemetaan status permainan ke dalam evaluasi NN dilakukan di sini . Berbagai fitur yang relevan dikodekan dengan satu panas, misalnya jumlah barang yang dapat dijual pada gilirannya.


Studi kasus lain yang sangat baik dalam memetakan permainan kompleks menjadi NN adalah Lingkungan Belajar Starcraft II yang dibuat oleh Deepmind bekerja sama dengan Blizzard Entertainment. Makalah ini memberikan ikhtisar tentang bagaimana game Starcraft dipetakan ke serangkaian fitur yang dapat ditafsirkan oleh NN, dan bagaimana tindakan dapat dikeluarkan oleh agen NN untuk simulasi game.


2

Ini benar-benar layak, tetapi cara input dipetakan akan sangat tergantung pada jenis permainan kartu, dan bagaimana itu dimainkan.

Saya akan memperhitungkan beberapa kemungkinan:

  1. Apakah waktu penting dalam game ini? Apakah langkah masa lalu memengaruhi masa depan? Dalam hal ini, Anda akan lebih baik menggunakan Jaringan Syaraf Berulang (LSTM, GRU, dll.).
  2. Apakah Anda ingin Jaringan Saraf Tiruan belajar dari data yang Anda kumpulkan, atau belajar sendiri? Jika sendiri, bagaimana? Jika Anda mengumpulkan data diri Anda bermain game puluhan atau ratusan kali, memasukkannya ke Neural Net, dan membuatnya belajar dari Anda, maka Anda melakukan sesuatu yang disebut "Kloning Perilaku". Namun, jika Anda ingin NN belajar sendiri, Anda dapat melakukan 2 cara ini:

    a) Penguatan Belajar - RL memungkinkan Neural Net untuk belajar dengan bermain melawan dirinya sendiri banyak kali.

    b) NEAT / Genetic Algorithm - NEAT memungkinkan Neural Net untuk belajar dengan menggunakan algoritma genetika.

Namun, sekali lagi, untuk mendapatkan lebih spesifik tentang bagaimana input dan output Neural Net harus dikodekan, saya harus tahu lebih banyak tentang permainan kartu itu sendiri.


Halo, terima kasih atas jawabannya! Saya akan menyelidiki area ini untuk melihat apa yang berlaku. Saya telah menambahkan deskripsi singkat tentang game dengan harapan ini mempersempitnya untuk Anda. Mesin saya mendukung undos sehingga mungkin berguna bersama dengan NN. Karena mesin belum selesai, saya tidak memiliki set sampel tetapi berencana untuk menjaga semua sejarah game dari server hosting antara 2 pemain. Saya sedang mempertimbangkan menggunakan back propagation untuk mempercepat proses.
pcaston2

Jika keadaan gim itu penting, tetapi bukan bagaimana Anda mencapai keadaan itu , maukah Anda mengatakan waktu itu penting? Bisakah Anda memberikan contoh permainan di mana waktu berarti dan beberapa di mana waktu tidak masalah? Saat ini saya hanya bisa memikirkan situasi di mana keadaan saat ini penting (siapa yang mengubahnya, apa kartu yang dikenal atau potongan permainan di mana) tetapi tidak bagaimana Anda sampai di sana (satu-satunya hal yang penting adalah di mana mereka berada sekarang , bukan di mana mereka berada dua belokan lalu)
Simon Forsberg

2

Anda pasti ingin jaringan Anda mengetahui informasi penting tentang permainan, seperti kartu apa yang dimiliki agen AI (nilai dan jenisnya), kolam mana, berapa banyak kartu di atas meja dan nilainya, jumlah belokan dan sebagainya. Hal-hal ini yang harus Anda pikirkan sendiri, pertanyaan yang harus Anda tanyakan kepada diri sendiri adalah "Jika saya menambahkan nilai ini untuk memasukkan bagaimana dan mengapa hal itu akan meningkatkan sistem saya". Tetapi hal pertama yang perlu dipahami adalah bahwa sebagian besar NN dirancang untuk memiliki ukuran input yang konstan, dan saya akan menganggap ini adalah masalah dalam permainan ini karena pemain dapat memiliki jumlah kartu yang berbeda di tangan mereka atau di atas meja. Misalnya, Anda ingin memberi tahu NN kartu apa yang dimilikinya, misalkan pemain dapat memiliki maksimal 5 kartu di tangannya dan setiap kartu dapat memiliki 3 nilai (mana, serangan dan kesehatan), sehingga Anda dapat menyandikan ini sebagai 5 * 3 vektor, di mana 3 nilai pertama mewakili kartu nomor satu dan seterusnya. Tetapi bagaimana jika pemain saat ini memiliki 3 kartu, pendekatan sederhana akan menetapkan nol untuk 6 input terakhir, tetapi ini dapat menyebabkan masalah karena beberapa kartu dapat memiliki 0 biaya mana atau 0 serangan. Jadi, Anda perlu mencari cara untuk menyelesaikan masalah ini. Anda dapat mencari model NN yang dapat menangani ukuran input variabel atau mencari cara untuk menyandikan input sebagai vektor ukuran konstan.

Kedua, output juga merupakan vektor ukuran konstan. Dalam hal jenis permainan ini, itu bisa menjadi vektor yang menyandikan tindakan yang bisa dilakukan agen. Jadi katakanlah kita memiliki 3 tindakan: letakkan kartu, lewati giliran dan kemasukan. Jadi itu bisa menjadi salah satu penyandi panas, misalnya jika Anda memiliki keluaran 1 0 0, ini berarti bahwa agen harus meletakkan beberapa kartu. Untuk mengetahui kartu apa yang harus diletakkan, Anda dapat menambahkan elemen lain ke output yang akan menghasilkan angka dalam kisaran 1 hingga 5 (5 adalah jumlah maksimal kartu di tangan).

Tetapi bagian terpenting dari pelatihan jaringan saraf adalah Anda harus menemukan fungsi kerugian yang sesuai untuk tugas Anda. Mungkin fungsi kerugian standar seperti Mean-squared loss atau L2 akan bagus, mungkin Anda harus mengubahnya agar sesuai dengan kebutuhan Anda. Ini adalah bagian di mana Anda perlu melakukan penelitian. Saya belum pernah bekerja dengan NEAT sebelumnya, tetapi seperti yang saya pahami dengan benar menggunakan beberapa algoritma genetika untuk membuat dan melatih NN, dan GA menggunakan beberapa fungsi kebugaran untuk memilih seorang individu. Jadi pada dasarnya Anda perlu tahu metrik apa yang akan Anda gunakan untuk mengevaluasi seberapa baik kinerja model Anda dan berdasarkan metrik ini Anda akan mengubah parameter model.

PS. Dimungkinkan untuk menyelesaikan masalah ini dengan jaringan saraf, namun, jaringan saraf bukan sihir dan bukan solusi universal untuk semua masalah. Jika tujuan Anda adalah untuk memecahkan masalah tertentu ini, saya juga akan merekomendasikan Anda untuk menggali teori permainan dan penerapannya dalam AI. Saya akan mengatakan, bahwa menyelesaikan masalah ini akan membutuhkan pengetahuan yang kompleks dari berbagai bidang AI.

Namun, jika tujuan Anda adalah belajar tentang jaringan saraf saya akan merekomendasikan mengambil tugas yang jauh lebih sederhana. Misalnya, Anda dapat menerapkan NN yang akan berfungsi pada dataset benchmark, misalnya, NN yang akan mengklasifikasikan digit dari dataset MNIST. Alasan untuk ini adalah bahwa banyak artikel ditulis tentang bagaimana melakukan klasifikasi pada dataset ini dan Anda akan belajar banyak dan Anda akan belajar lebih cepat dari menerapkan hal-hal sederhana.


1

Iya. Itu layak.

Gambaran Umum Pertanyaan

Tujuan desain sistem tampaknya mendapatkan keuntungan strategis yang unggul dengan menggunakan satu atau lebih jaringan buatan bersamaan dengan mesin permainan kartu.

Pertanyaan itu menunjukkan kesadaran umum tentang dasar-dasar permainan-permainan sebagaimana diuraikan dalam Morgenstern dan Teori Permainan von Neuman .

  • Pada titik tertentu selama permainan, seorang pemain mungkin diminta untuk melakukan gerakan.
  • Ada seperangkat opsi langkah terakhir sesuai dengan aturan permainan.
  • Beberapa strategi untuk memilih langkah menghasilkan catatan kemenangan yang lebih tinggi dari beberapa permainan daripada strategi lainnya.
  • Jaringan buatan dapat digunakan untuk menghasilkan strategi permainan-permainan yang menang lebih sering daripada pemilihan langkah acak.

Fitur lain dari permainan-permainan mungkin atau mungkin tidak sejelas ini.

  • Di setiap titik pergerakan ada kondisi permainan, yang dibutuhkan oleh komponen apa pun yang terlibat dalam meningkatkan keberhasilan permainan.
  • Selain tidak tahu kapan lawan akan menggertak, dalam permainan kartu, urutan rahasia kartu yang dikocok dapat memperkenalkan pemain virtual yang setara dengan gerakan yang diperkirakan mendekati keacakan.
  • Dalam tiga atau lebih permainan pemain, pensinyalan mitra atau calon mitra dapat menambahkan elemen kompleksitas untuk menentukan strategi permainan yang menang di titik mana pun. Berdasarkan hasil edit, sepertinya game ini tidak memiliki kompleksitas seperti itu.
  • Faktor psikologis seperti intimidasi juga dapat berperan dalam memenangkan permainan. Apakah mesin menyajikan wajah kepada lawan tidak diketahui, jadi jawaban ini akan melompati itu.

Petunjuk Pendekatan Umum

Ada pendekatan umum untuk memetakan input dan output, tetapi ada terlalu banyak untuk dijelaskan dalam jawaban Stack Exchange. Ini hanya beberapa prinsip dasar.

  • Semua pemodelan yang dapat dilakukan secara eksplisit harus dilakukan. Misalnya, meskipun jaring buatan secara teoritis dapat mempelajari cara menghitung kartu (melacak lokasi yang mungkin dari masing-masing kartu), algoritma penghitungan sederhana dapat melakukan itu, jadi gunakan algoritma yang dikenal dan masukkan hasilnya ke jaringan buatan sebagai memasukkan.
  • Gunakan sebagai input informasi apa pun yang berkorelasi dengan output optimal, tetapi jangan gunakan sebagai input informasi apa pun yang tidak mungkin berkorelasi dengan output optimal.
  • Encode data untuk mengurangi redundansi dalam vektor input, baik selama pelatihan dan selama permainan otomatis. Abstraksi dan generalisasi adalah dua cara umum untuk mencapai ini. Ekstraksi fitur dapat digunakan sebagai alat untuk abstrak atau menggeneralisasi. Ini dapat dilakukan pada input dan output. Contohnya adalah jika, dalam game ini, J> 10 dengan cara yang sama seperti A> K, K> Q, Q> J dan 10> 9, kemudian meng-encode kartu sebagai bilangan bulat dari 2 hingga 14 atau 0 hingga 12 oleh mengurangi satu. Encode suit sebagai 0 hingga 3 alih-alih empat string teks.

Pekerjaan pengenalan gambar hanya terkait jarak jauh, terlalu berbeda dari permainan kartu untuk digunakan secara langsung, kecuali jika Anda perlu mengenali kartu dari gambar visual, dalam hal ini LSTM mungkin diperlukan untuk melihat apa yang telah dipilih pemain lain untuk bergerak. Mempelajari strategi yang menang akan lebih diuntungkan dari desain MLP atau RNN, atau salah satu desain jaringan buatan turunannya.

Apa yang Jaringan Buatan Lakukan dan Contoh Pelatihan

Peran utama dari jaringan buatan dari jenis ini adalah untuk mempelajari suatu fungsi dari data contoh. Jika Anda memiliki urutan langkah dari game nyata, itu adalah aset yang bagus untuk dimiliki untuk proyek Anda. Sejumlah besar dari mereka akan sangat membantu untuk pelatihan.

Bagaimana Anda mengatur contoh dan apakah dan bagaimana Anda memberi label itu patut dipertimbangkan, namun tanpa aturan permainan kartu, sulit untuk memberikan arahan yang dapat diandalkan. Apakah ada mitra, apakah itu berdasarkan skor, apakah jumlah bergerak ke kemenangan, dan selusin faktor lain memberikan parameter skenario yang diperlukan untuk membuat keputusan tersebut.

Belajar

Saran utama yang dapat saya berikan adalah membaca, bukan artikel umum di web, tetapi membaca beberapa buku dan beberapa makalah yang dapat Anda pahami tentang topik-topik di atas. Kemudian temukan beberapa kode yang dapat Anda unduh dan coba setelah Anda memahami terminologi dengan cukup baik untuk mengetahui apa yang harus diunduh.

Ini berarti pencarian buku dan pencarian akademik jauh lebih mungkin untuk mengarahkan Anda ke arah yang benar daripada pencarian web umum. Ada ribuan masalah dalam ruang web umum, menjelaskan prinsip AI dengan sejumlah besar kesalahan. Penerbit buku dan artikel akademis lebih menuntut uji tuntas pada penulisnya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.