Pendekatan penilaian untuk lawan komputer yang membutuhkan penyeimbangan

16

Pertanyaan ini adalah tentang pendekatan terhadap lawan komputer yang telah saya buat dan saat ini sedang digunakan, atau direncanakan akan digunakan, di beberapa permainan komputer.

Latar Belakang

Tahun lalu, ketika mencoba meningkatkan lawan komputer untuk permainan yang disebut "Bendera Minesweeper" (deskripsi singkat: Versi multipemain-giliran Minesweeper di mana Anda harus mengambil lebih banyak ranjau daripada lawan Anda) , saya sangat mengubah cara kerja algoritma saya . Alih-alih menggunakan pendekatan seperti if-else-if-else, saya menggunakan serangkaian "pencetak gol" dengan bobot yang ditentukan untuk menentukan apa langkah terbaik.

Anda mungkin berpikir bahwa untuk permainan seperti Minesweeper Flags, ini hanya tentang membuat gerakan yang memberi Anda kemungkinan tertinggi untuk mengambil ranjau, tetapi itu tidak sesederhana itu. Langkah yang akan dilakukan oleh komputer biasanya tergantung pada beberapa fitur untuk langkah spesifik itu dalam kondisi permainan saat ini. Contoh fitur:

  • Berapa probabilitas langkah ini untuk mencetak tambang?
  • Berapa probabilitas mengungkapkan sesuatu kepada lawan saya di sini?

Deskripsi sistem

Sistem pada dasarnya bekerja seperti ini:

  1. "Pra-pencetak gol": Beberapa pra-analisis dilakukan untuk kondisi permainan saat ini (dalam hal Bendera Minesweeper, ini biasanya: Menghitung semua probabilitas)
  2. "Pencetak Skor": Satu set pencetak skor biasa diminta untuk menentukan skor untuk setiap gerakan yang mungkin, setiap pencetak skor menerapkan skor sesuai dengan kriteria itu sendiri. Pencetak skor dapat memeriksa hasil pra-analisis yang dibuat.
  3. Skor yang dihitung pada langkah di atas dijumlahkan bersama dan ditetapkan sebagai skor untuk bergerak.
  4. Bergerak diurutkan sesuai dengan skor dan peringkat mereka sehingga semua bergerak dengan skor yang sama mendapatkan peringkat yang sama.
  5. "Post-scorers": Hasil di atas dapat dikirim ke "Post-scorers" yang memiliki kemungkinan untuk mengubah skor dari setiap bidang dengan cara apa pun yang mereka inginkan, sesuai dengan aturan post-scorer sendiri.

Saat menggabungkan sekelompok pra-pencetak skor, pencetak skor (dengan bobotnya) dan post-pencetak skor, itu yang saya sebut konfigurasi skor .

Contoh hasil

Ini adalah contoh skor yang telah diterapkan pada Bendera Minesweeper. Ini adalah peta yang diberi skor:

Peta Bendera Minesweeper yang dicetak

Dan ini adalah output dari konfigurasi skor aktual. Ini menunjukkan peringkat dari langkah yang mungkin, di mana 1 adalah peringkat terbaik dan telah disorot dalam warna putih:

Contoh output dari pendekatan skoring

Berkat telah menulis kode yang sangat fleksibel, pendekatan ini untuk AI dapat dimasukkan ke dalam game lain juga.

Keuntungan dan kerugian

Di bawah ini adalah beberapa kelebihan dan kekurangan dari sistem ini yang dapat saya pikirkan sendiri

Keuntungan

  • Sangat mudah untuk membuat banyak konfigurasi berbeda untuk AI.
  • Dimungkinkan untuk digunakan dengan Algoritma Genetika: Setiap pencetak gol memiliki bobot terkait, beratnya bisa menjadi gen.
  • Dengan menggunakan beberapa alat, dimungkinkan untuk memeriksa mengapa langkah tertentu dibuat dan pencetak gol mana yang paling bertanggung jawab untuk langkah itu
  • Dengan menggunakan alat, dimungkinkan untuk membuat peta skor / peringkat keseluruhan gerakan yang mungkin (seperti tangkapan layar di atas)
  • Dengan menerapkan skor pada cara yang dimainkan manusia, dimungkinkan untuk membuat "#AI_Mirror" yang mencoba bergerak yang menurutnya akan dilakukan manusia

Kekurangan

  • Sangat sulit untuk menyesuaikan konfigurasi skor "dengan benar", untuk membuat AI bermain sebaik mungkin.

Pertanyaan

  • Apakah sistem yang saya bangun di sini dikenal luas di dunia AI? Apa sebutannya dalam istilah AI nyata?

  • Apakah pendekatan ini masuk akal atau ada pendekatan berbeda yang akan Anda rekomendasikan?

  • Cara apa yang ada yang dapat membuat proses penyesuaian konfigurasi skor lebih mudah?

Mengenai pertanyaan terakhir, saya menyadari kemungkinan menggunakan algoritma genetika, saya juga sedikit menyadari tentang SARSA (dan saya pikir pencetak skor saya mirip dengan deskripsi situs tentang fitur dengan bobot, tetapi dari pemahaman saya bukan itu yang saya buat. sini). Saya pikir masalah dengan SARSA adalah Anda tidak tahu hadiahnya sampai permainan selesai, langkah terbaik sering kali adalah langkah yang sama sekali tidak memberikan hadiah (tambang). Peluang Anda saat ini untuk menang tergantung pada skor saat ini (berapa banyak ranjau yang telah Anda dan lawan ambil) dan seperti apa peta saat ini.


Pertanyaan ini awalnya diposting di situs Kecerdasan Buatan yang sekarang sudah tidak ada .
Kode (Java) yang digunakan untuk pendekatan ini sekarang telah diposting di Tinjauan Kode .

Simon Forsberg
sumber

Jawaban:

7

Pada peregangan itu adalah sistem pakar (seperti logika fuzzy). Karena Anda tidak menjalankan algoritma untuk melakukan umpan balik ke parameter keputusan berdasarkan output, itu tidak benar-benar belajar. Namun, melakukan umpan balik bukan satu-satunya indikator apakah alogirthm adalah AI. Orang bisa berpendapat bahwa jika itu bertindak dengan cara yang tampak cerdas, itu yang terpenting - terutama ketika permainan dimainkan oleh lawan manusia.

Jenis algoritma yang Anda tentukan sebenarnya adalah persamaan parameter, jenis yang akan Anda temukan dalam perhitungan asuransi. Setelah setiap gerakan, ruang input berubah tetapi algoritme tidak membutuhkan memori dari kondisi sebelumnya, sehingga setiap gerakan diperlakukan sebagai papan terpisah yang baru.

Menggunakan Algoritma Genetika

Ada dua opsi yang jelas untuk algoritma genetika:

  • Gunakan parameter untuk genom (seperti yang Anda sarankan). Anda akan mengoptimalkan aturan yang Anda miliki tetapi Anda masih memiliki sistem pakar.
  • Gunakan Learning Classifier System (LCS) untuk memilih aturan bagi Anda. LCS adalah jenis Algoritma Genetika di mana Anda menyandikan aturan serta parameternya. Mereka membutuhkan waktu lebih lama untuk bertemu, dan peka terhadap fungsi kebugaran. Saya pikir cara bermain yang dihasilkan mungkin lebih menarik untuk itu.

Annealing Simulasi

Cara lain untuk memecahkan masalah adalah menggunakan Simulated Annealing (SA). Masalah Anda adalah ruang input terbatas dan Anda dapat secara analitis menulis fungsi yang menemukan kuadrat terbaik untuk dipilih dalam skenario apa pun. Menggunakan Simulasi Annealing akan menemukan global optimal untuk parameter Anda.

Membuatnya terlalu bagus

Saya tahu Anda ingin algoritma menjadi yang terbaik tetapi jangan lupa bahwa manusia bermain melawannya. Ada cara yang sempurna secara taktik untuk memainkan permainan deterministik semacam ini dan jika pemain AI mengambilnya, itu hanya keberuntungan semata yang berarti bahwa pemain menang.

Dr Rob Lang
sumber
Jawaban Anda telah memberi saya banyak hal untuk dipelajari, terima kasih banyak! Meskipun saya tidak begitu yakin saya setuju dengan mengklasifikasikan permainan khusus ini sebagai "deterministik" ..
Simon Forsberg
Alasan saya mengatakan bahwa itu deterministik adalah bahwa jumlah kemungkinan untuk setiap permainan yang diberikan dibatasi dan meskipun pemain manusia mungkin tampak membuat pilihan yang acak, mereka melakukannya dalam ruang yang ditentukan sedemikian rupa sehingga bersifat deterministik. Aturan praktisnya adalah jika Anda menggunakan generator angka acak (atau faktor eksternal yang tidak Anda kendalikan) di mana pun, itu stokastik. Jika tidak, itu deterministik.
Dr Rob Lang
Yah, Minesweeper adalah stokastik saya akan mengatakan, karena Anda tidak tahu konten bidang sampai Anda membuat langkah untuk mengungkapkannya.
Simon Forsberg
1
IMHO itu tidak membuatnya stokastik. Akan menjadi stokastik jika: mengingat kondisi awal yang sama (papan tersembunyi) hasilnya bisa berbeda setiap kali kotak diklik.
Dr Rob Lang
2
Stokastik / deterministik dan sepenuhnya dapat diamati / sebagian dapat diamati adalah sangat berbeda, sifat ortogonal. Menurut definisi (katakanlah, Russel / Norvig "Jika keadaan lingkungan selanjutnya sepenuhnya ditentukan oleh keadaan saat ini dan tindakan yang dilakukan oleh agen ...") Minesweeper adalah deterministik, meskipun tidak sepenuhnya dapat diamati.
Peteris
0

Ya, teknik pemberian skor berdasarkan aspek posisi tertentu adalah standar dalam menulis AI untuk bermain game. Sebagai contoh, hampir semua program catur bekerja dengan mencetak posisi berdasarkan paling signifikan pada bagian yang tersedia, dengan bonus lebih kecil berdasarkan posisi mereka (misalnya, pion saling melindungi). Mereka kemudian mencoba menghitung langkah terbaik yang tersedia dengan menggunakan algoritma pencarian permusuhan seperti alpha-beta.

Pencarian permusuhan mungkin sulit di sini karena faktor percabangan besar - dalam posisi apa pun, langkah hukum adalah untuk menandai atau mengungkapkan kuadrat yang tidak diketahui. Di sisi lain, ada kemungkinan bahwa Anda dapat mengurangi banyak faktor percabangan dengan heuristik. Misalnya, menandai atau mengungkapkan kotak yang Anda tidak tahu sama sekali tentang sangat jarang akan menjadi langkah terbaik. Sebaliknya, jika Anda mengetahui lokasi beberapa ranjau tak bertanda, menandai salah satunya mungkin merupakan langkah terbaik, sebagian besar waktu. Mempertahankan tabel transposisi mungkin juga akan membantu.

David Richerby
sumber