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:
- "Pra-pencetak gol": Beberapa pra-analisis dilakukan untuk kondisi permainan saat ini (dalam hal Bendera Minesweeper, ini biasanya: Menghitung semua probabilitas)
- "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.
- Skor yang dihitung pada langkah di atas dijumlahkan bersama dan ditetapkan sebagai skor untuk bergerak.
- Bergerak diurutkan sesuai dengan skor dan peringkat mereka sehingga semua bergerak dengan skor yang sama mendapatkan peringkat yang sama.
- "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:
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:
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 .
sumber
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.
sumber