Masalah ini agak mirip dengan beberapa masalah pengkodean. Stockfish sudah memiliki beberapa set gerakan yang telah dihitung sebelumnya. Ini mewakili keadaan papan catur menggunakan beberapa bitboard, yang kemudian digunakan untuk mengevaluasi posisi papan menggunakan kategori (cek, tempos, skakmat) dan representasi statistik (nilai potong). Hampir segera, ia menggunakan algoritma pencarian alpha-beta canggih. Untuk tidak menganalisis posisi yang sama beberapa kali, tabel transposisi digunakan. Ini pada dasarnya hafalan yang diterapkan pada fungsi pencarian, yang merupakan hal mendasar dalam banyak masalah pemrograman grafik-teori. Jadi, sebenarnya menggunakan algoritma yang agak sederhana. Berikut adalah beberapa penelitian yang dilakukan sebelumnya:
Langkah 1. Inisialisasi simpul
Langkah 2. Periksa pencarian yang dibatalkan dan penarikan langsung. Menegakkan batas simpul di sini. (Ini hanya berfungsi dengan 1 utas pencarian, pada Stockfish 2.3.1.)
Langkah 3. Mate pemangkasan jarak. Bahkan jika kita kawin pada langkah selanjutnya skor kita akan menjadi yang terbaik mate_in (textssrightarrowtextply + 1textssrightarrowtextply + 1, tetapi jika alpha sudah lebih besar karena pasangan yang lebih pendek ditemukan ke atas di pohon maka tidak perlu mencari lebih lanjut, kita tidak akan pernah mencari lebih jauh, kita tidak akan pernah mencari lebih jauh, mengalahkan alpha saat ini. Logika yang sama tetapi dengan tanda-tanda terbalik berlaku juga dalam kondisi yang berlawanan dari dikawinkan bukannya memberikan pasangan, dalam hal ini mengembalikan skor gagal-tinggi.
Langkah 4. Pencarian tabel transposisi. Kami tidak ingin skor pencarian parsial untuk menimpa pencarian penuh sebelumnya. Kami menggunakan kunci posisi yang berbeda jika ada langkah yang dikecualikan.
Langkah 5. Evaluasi posisi secara statis dan perbarui statistik perolehan orangtua
Langkah 6. Razoring (dihilangkan dalam node PV)
Langkah 7. Static null move pemangkasan (dihilangkan dalam node PV). Kami bertaruh bahwa lawan tidak memiliki langkah yang akan mengurangi skor lebih dari futility_margin (kedalaman) jika kami melakukan gerakan nol.
Langkah 8. Memindahkan pencarian dengan pencarian verifikasi
Langkah 9. ProbCut. Jika kami memiliki tangkapan yang sangat bagus dan penelusuran yang dikurangi mengembalikan nilai jauh di atas beta, kami (hampir) dapat memangkas langkah sebelumnya dengan aman.
Langkah 10. Pendalaman iteratif internal.
Langkah 11. Loop melalui bergerak. Ulangi semua gerakan pseudo-legal hingga tidak ada gerakan yang tersisa atau beta cutoff terjadi
Langkah 12. Perluas pemeriksaan dan juga gerakan berbahaya
Langkah 13. Pemangkasan kesia-siaan.
Langkah 14. Lakukan langkah
Langkah 15. Pencarian kedalaman yang dikurangi (LMR). Jika gerakan gagal tinggi akan dicari kembali pada kedalaman penuh.
Langkah 16. Pencarian kedalaman penuh, ketika LMR dilewati atau gagal tinggi.
Langkah 17. Batalkan bergerak
Langkah 18. Periksa langkah terbaik baru
Langkah 19. Periksa perpecahan
Langkah 20. Periksa jodoh dan jalan buntu
Langkah 21. Perbarui tabel. Perbarui entri tabel transposisi, pembunuh, dan riwayat
Saya akan mencoba menjelaskan apa yang dibicarakan penelitian profesor. Stockfish menciptakan pohon pencarian dari langkah hukum.
Kemudian, ia mulai mengevaluasi apakah setiap gerakan baik atau buruk, dan seberapa baik atau buruknya, dengan mengeksekusi bidang pencarian yang dangkal terlebih dahulu, dan kemudian menggunakan nilai cutoff alfa / beta yang dihasilkan sebagai nilai awal untuk pencarian yang lebih dalam. Stockfish juga memprioritaskan potongan. Misalnya, ksatria akan diprioritaskan di pusat, jadi jika seorang ksatria dan uskup mendapatkan garpu di tengah, itu akan memindahkan ksatria, kecuali ada keuntungan signifikan lainnya dengan memindahkan uskup. Walaupun ini mungkin tampak rumit, eksekusi ini kira-kira log (jumlah gerakan yang mungkin), sehingga membuatnya agak cepat.