Saya tidak dapat berbicara untuk algoritma yang digunakan untuk Deep Blue, tetapi saya akan mencoba dan menjelaskan peningkatan dalam pemrograman catur. Kecepatan adalah peningkatan terbesar. Deep Blue menggunakan komputer khusus multi-prosesor, jadi perbandingan tidak benar-benar mungkin.
https://chessprogramming.wikispaces.com/ adalah sumber yang bagus, tetapi sulit dinavigasi.
Ada 3 fungsi utama yang di-tweak untuk meningkatkan mesin catur yaitu fungsi evaluasi, pemindahan bergerak, dan pencarian.
Evaluasi adalah yang paling sulit untuk diprogram, karena ada banyak pengecualian pada aturan. Dengan ruang hard drive yang semakin murah, fungsi eval memungkinkan lebih banyak pengecualian untuk dievaluasi.
Generasi yang bergerak, bersamaan dengan membuat dan tidak bergerak, menghabiskan banyak memori karena harus berkali-kali dibentuk sebelumnya. Fungsi generasi yang paling umum adalah kotak surat, bitboard, 0x88, 8x8, papan yang diperluas (10x10, 10x12), dan array / tabel pemindahan yang telah ditentukan (* Saya menggunakan tabel pemindahan yang diindeks). Pendapat saat ini adalah bahwa bitboard lebih cepat, dan menggunakan bitboards ajaib mempercepatnya hingga 30%. Robert Hyatt, profesor dan pencipta mesin catur cratfy, mengklaim tidak ada peningkatan kecepatan yang signifikan.
Fungsi pencarian awal adalah fungsi min-max primitif. Pada dasarnya Anda mencoba memaksimalkan skor sisi untuk bergerak dan meminimalkan skor lawan. Alpha-Beta adalah peningkatan pertama. Mereka mengurangi jumlah gerakan yang dicari oleh tabel transposisi, nilai cut-off, jendela aspirasi, dan heuristik sejarah. Ini adalah pencarian mendalam-pertama. Ada juga pencarian pendalaman iteratif internal yang mencoba untuk mencari langkah "terbaik" (s) yang terdalam berharap bahwa pencarian gerakan lain akan terbukti sia-sia.
CATATAN: Tabel indeks saya. GNUChess dan Jester keduanya menggunakan array indeks untuk menghasilkan gerakan mereka. Mereka menginisialisasi mesin dengan mengisi array dengan gerakan yang mungkin. Ambil enam bagian dan hitung langkah hukum yang tersedia dari setiap kotak. Jadi masing-masing bagian memiliki array [64] [8]. Saya mengambil ide ini dan mengompresnya menjadi dua indeks dan sebuah tabel. Tabel memegang nilai yang memberitahu jika 16 gerakan mungkin, satu indeks memegang offset gerakan, dan yang lainnya memegang topeng.
offset [] = {-8, -1, 1, 8, -9, -7, 7, 9, -17, -15, -10, -6, 6, 10, 15, 17};
mask [] = {1, 2, 4, 8, 16, 32, 64, 128, 256, ...};
Kemudian generasi gerakan geser semudah mencari keabsahan topeng itu di dalamnya diimbangi dengan tabel bergerak.