Bagaimana cara mesin menentukan simpul mana yang akan dicari pertama kali?

8

Ini adalah pertanyaan lanjutan untuk Randomness in Engine Play . Jawaban SmallChess menunjukkan bahwa dalam satu contoh, Stockfish mencari sejumlah node setelah 20-an, dan jumlah yang berbeda di 20-an lainnya, maka ada keacakan.

Pertanyaannya: jika setiap node adalah posisi yang diberikan, bagaimana Stockfish memutuskan node mana yang akan dicari pertama kali? Ambil contoh setengah lapis pertama. Putih memiliki 20 kemungkinan gerakan pertama, jadi ada 20 simpul. Saya menuntut Stockfish untuk bergerak setelah mencari lima node. Apakah ini berarti bahwa Stockfish mungkin hanya mengevaluasi 1. a4, 1. a3, 1. b4, 1. b3 dan 1. c3 sebelum harus bergerak? Pencarian sistematis seperti ini akan berarti Stockfish belum mengevaluasi gerakan pertama yang paling umum.

Saya membayangkan bahwa, nanti dalam permainan, akan ada lompatan besar dalam jumlah node per setengah lapis. Itu berarti bahwa Stockfish kadang-kadang memutuskan untuk bergerak meskipun belum selesai mengevaluasi setiap node di setengah-lapis. Bagaimana ia tahu bahwa itu mencari node yang paling menjanjikan?

Daya tarik
sumber
Terima kasih atas tautannya, masih belum benar-benar mengerti. Katakan grafik di bagian bawah. Saya berasumsi A adalah posisi saat ini, dan B, C & E adalah tiga kandidat yang bergerak? Jika IDDFS pada kedalaman dua menjadi A, B, D, F, C, G, E, F, dan langkah terbaik adalah E, itu bisa saja kehilangan langkah terbaik jika harus menghentikan pencarian sebelum mencapainya.
Allure
Saya tidak melihat bagaimana itu bisa menjadi duplikat - pertanyaannya jelas (?) Berbeda.
Allure
Maaf @ user3727079, bisakah Anda menghapus downvote itu? Juga beri tahu saya jika itu membantu.
QuIcKmAtHs
@XcoderX dia tidak bisa menghapusnya karena saya orang yang
menurunkan

Jawaban:

5

http://rebel13.nl/rebel13/ideas.html menjelaskan ini dengan baik.

Ide dasarnya adalah memesan gerakan berdasarkan apa yang menurut program adalah langkah terbaik tanpa mencari. Skor ini biasanya didasarkan pada mobilitas, nilai piece-square, kontrol pusat, sejarah, potensi serangan, tangkapan, dan elemen lain yang menurut programmer penting. Sama seperti manusia mendasarkan langkah kandidat mereka berdasarkan intuisi dan sejarah, komputer mencari langkah skor tertinggi pertama.

Jika komputer dibatasi hanya lima node, maka ya, komputer hanya akan mencari lima gerakan skor tertinggi. Faktor batas waktu ini dapat menyebabkan komputer kehilangan pasangannya jika skornya buruk. Metode pertama yang harus dikoreksi untuk hal ini adalah dengan mendirikan brankas-gagal. Ini akan memotong pencarian jika posisi menjadi lebih buruk atau lebih baik secara signifikan. Harapannya adalah untuk memungkinkan lebih banyak waktu untuk mencari lebih banyak variasi yang mungkin menggunakan waktu lebih baik. Algoritme pencarian lainnya, pendalaman berulang, telah meningkatkan manajemen waktu karena mereka memiliki panjang yang lebih pendek sebelum mereka menerapkan gagal-aman.

Fred Knight
sumber
0

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. masukkan deskripsi gambar di sini 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.

QuIcKmAtHs
sumber
@ user3727079 apakah ini membantu?
QuIcKmAtHs
1
Tidak, sayangnya. Saya tidak mengerti jawaban Anda. Tampaknya tidak menjawab pertanyaan saya, yang berada di simpul mana untuk mencari pertama, bukan bagaimana Stockfish membuat keputusan (saya mengerti apa artinya mencari pohon).
Allure