Menulis game AI sangat menarik dan mengasyikkan - Saya yakin akan hal ini lebih dari sekali dari pengalaman saya sendiri. Baru-baru ini, setelah secara tidak sengaja menemukan kode proyek program catur lama saya, saya memutuskan untuk memodifikasinya sedikit dan menaruhnya di GitHub . Dan pada saat yang sama ceritakan tentang bagaimana itu dibuat dan pelajaran apa yang diajarkannya kepada saya dalam prosesnya.
Mulailah
Itu terjadi pada tahun 2009: Saya memutuskan untuk menulis program catur sederhana untuk berlatih mengembangkan game AI. Saya sendiri bukan pemain catur dan saya bahkan tidak akan mengatakan bahwa saya adalah pencinta catur. Tetapi tugas untuk pelatihan cukup cocok dan menarik. Selain itu, ketika bermain catur di papan atau dalam program, saya selalu penasaran mengapa gerakan ini atau itu lebih kuat dari yang lain. Saya ingin dapat melihat dengan jelas keseluruhan pohon perkembangan posisi catur. Saya belum pernah melihat fitur seperti itu di program lain - jadi mengapa tidak menulisnya sendiri? Nah, karena ini adalah pelatihan, maka Anda perlu menciptakan dan menulis dari awal, dan tidak mempelajari algoritme lain dan menulis implementasinya sendiri. Secara umum, saya pikir dalam tiga hari Anda dapat mengelola dan membuat semacam versi kerja.
Versi pertama
Biasanya, mesin catur menggunakan DFS dengan cabang dan batas untuk mempersempit pencarian. Tetapi ini tidak terlalu jelas, jadi telah diputuskan: kami akan menempuh jalan kami sendiri - biarkan ini menjadi pencarian pertama yang luas pada kedalaman yang tetap. Kemudian akan ada pohon pencarian lengkap dalam memori, yang entah bagaimana dapat divisualisasikan. Dan juga mencari tahu: a) sejauh mana permainan catur dapat dihitung dalam kerangka CPU yang tersedia dan sumber daya memori, b) seberapa baik atau buruk algoritma tersebut akan bermain?
Saya harus mengatakan bahwa pada saat itu saya memiliki prosesor 2-core dengan memori 2 atau 4 GB (saya tidak ingat persis), Windows 32-bit dan kompiler Turbo Delphi Explorer 32-bit. Jadi jika waktu yang berjalan entah bagaimana masih bisa dikorbankan, maka memori yang tersedia untuk proses itu dibatasi hingga 2 Gb. Saya tidak tahu tentang bendera PE, yang memperluas memori pengguna ke 3Gb. Namun, karena sistem dan Delphi serta program lain menggunakan memori, kurang dari satu gigabyte tersedia untuk catur, agar tidak beralih ke swap.
Hasilnya adalah versi pertama dari game tersebut, yang terdiri dari modul-modul berikut:
UI - jendela utama, menggambar papan dengan bentuk.
Logika permainan - menyusun daftar kemungkinan gerakan, bergerak, mendeteksi akhir permainan.
AI: skor adalah fungsi evaluasi posisi.
AI: brute force - pencarian pertama yang luas melalui antrian.
UI: - , .
:
3 - , - 5-15 . 4 . .
3 - " ": - , "" , "". . , .
, , .
, : , . .
- . - - , - - . , .
:
:
: - 3, - 5 .. - 1, .
, , ( ). .
. - . ! - . - . 1-2 .
: . AI , .. , .
= (white_rate - black_rate) * (1 + 10 / (white_rate + black_rate)). , , - , .
, , . - , . - 1, - 0.4, - . .
, - .
:
:
- .
- .
- .
. , : . : ?
: - . - . - -. , 64- . 264, , 232, - - - .
"" 30-45%, 80-90%, 5-10 , . !
?
, - 2- , . , , - . :
AI - CPU .
?
AI . ?
: . , . , , . .
, "" . , .
, - . :
: 8-, 2- CPU, .
64- : , , x64. , ! x64 , x86 5-10% . 64- Delphi , .
: 32- PE- . , 1 - - "" . .
: , . - , . - , , . . , - , . .
. - . , . .. .
. . - . , , , .
. - . ? , .
AI , . AI chess.com , 1800-1900. , !
Game pemrograman AI sangat membuat ketagihan: Anda selalu ingin melakukan yang lebih baik. Dan meskipun saya masih memiliki banyak ide untuk pengembangan lebih lanjut, tibalah saatnya saya harus berhenti. Saya pikir itu datang. Namun, jika ada yang mau, mereka dapat mengambil kode saya, bermain-main, bereksperimen, menerapkan sesuatu. Untungnya, Delphi sekarang tersedia untuk semua orang berkat Edisi Komunitas gratis, belum lagi Pascal dan Lazarus gratis. Kode proyek (serta exe-shnik yang dikompilasi) dapat diambil di sini (untuk kompilasi, Anda juga memerlukan sesuatu dari https://github.com/Cooler2/ApusGameEngine ). Terima kasih untuk semua yang membacanya.