Vấn đề này khá giống với một số vấn đề mã hóa. Stockfish đã có nhiều bộ di chuyển được tính toán trước. Nó đại diện cho trạng thái của bàn cờ bằng cách sử dụng nhiều bàn cờ, sau đó nó sử dụng để đánh giá các vị trí bàn cờ bằng cách sử dụng một phân loại (kiểm tra, nhịp độ, kiểm tra) và biểu diễn thống kê (giá trị mảnh). Gần như ngay lập tức, nó sử dụng thuật toán tìm kiếm alpha-beta tiên tiến. Để không phân tích cùng một vị trí nhiều lần, một bảng chuyển vị được sử dụng. Đây thực chất là ghi nhớ được áp dụng cho chức năng tìm kiếm, là một vấn đề cơ bản trong nhiều vấn đề lập trình lý thuyết đồ thị. Vì vậy, nó thực sự sử dụng một thuật toán khá đơn giản. Đây là một số nghiên cứu được thực hiện trước đây:
Bước 1. Khởi tạo nút
Bước 2. Kiểm tra tìm kiếm bị hủy bỏ và rút ra ngay lập tức. Thực thi giới hạn nút ở đây. (Điều này chỉ hoạt động với 1 luồng tìm kiếm, kể từ Stockfish 2.3.1.)
Bước 3. Cắt tỉa khoảng cách bạn đời. Ngay cả khi chúng ta giao phối ở lần di chuyển tiếp theo, điểm số của bạn sẽ ở mức mate_in tốt nhất (textsrightarrowtextply + 1textssrightarrowtextply + 1, nhưng nếu alpha đã lớn hơn vì tìm thấy một người bạn đời ngắn hơn ở trên cây thì chúng ta sẽ không bao giờ tìm kiếm thêm đánh bại alpha hiện tại. Logic tương tự nhưng với các dấu hiệu đảo ngược cũng được áp dụng trong điều kiện ngược lại là được giao phối thay vì giao phối, trong trường hợp này trả về điểm không cao.
Bước 4. Tra cứu bảng chuyển vị. Chúng tôi không muốn số điểm của một tìm kiếm một phần ghi đè lên một tìm kiếm đầy đủ trước đó. Chúng tôi sử dụng một phím vị trí khác nhau trong trường hợp di chuyển bị loại trừ.
Bước 5. Đánh giá vị trí tĩnh và cập nhật số liệu thống kê lợi ích của phụ huynh
Bước 6. Razoring (được bỏ qua trong các nút PV)
Bước 7. Cắt tỉa di chuyển null tĩnh (được bỏ qua trong các nút PV). Chúng tôi đang cá cược rằng đối thủ không có động thái sẽ làm giảm điểm nhiều hơn futility_margin (độ sâu) nếu chúng tôi di chuyển vô giá trị.
Bước 8. Null di chuyển tìm kiếm với tìm kiếm xác minh
Bước 9. ProbCut. Nếu chúng tôi có một bản chụp rất tốt và một tìm kiếm giảm sẽ trả về giá trị cao hơn nhiều so với beta, chúng tôi có thể (gần như) cắt tỉa một cách an toàn di chuyển trước đó.
Bước 10. Lặp lại nội bộ sâu sắc.
Bước 11. Vòng qua di chuyển. Lặp lại tất cả các động thái hợp pháp giả cho đến khi không còn động thái nào nữa hoặc việc cắt giảm beta xảy ra
Bước 12. Mở rộng kiểm tra và di chuyển nguy hiểm
Bước 13. Cắt tỉa vô ích.
Bước 14. Thực hiện di chuyển
Bước 15. Giảm tìm kiếm độ sâu (LMR). Nếu di chuyển không cao sẽ được tìm kiếm lại ở độ sâu đầy đủ.
Bước 16. Tìm kiếm chuyên sâu, khi LMR bị bỏ qua hoặc thất bại cao.
Bước 17. Hoàn tác di chuyển
Bước 18. Kiểm tra di chuyển mới tốt nhất
Bước 19. Kiểm tra phân chia
Bước 20. Kiểm tra bạn đời và bế tắc
Bước 21. Cập nhật bảng. Cập nhật mục chuyển đổi bảng, kẻ giết người và lịch sử
Tôi sẽ cố gắng giải thích những gì nghiên cứu của giáo sư đang nói về. Stockfish tạo ra một cây tìm kiếm của di chuyển hợp pháp.
Sau đó, nó bắt đầu đánh giá xem mỗi di chuyển là tốt hay xấu, và nó tốt hay xấu, bằng cách thực hiện trường tìm kiếm nông trước, sau đó sử dụng các giá trị cắt alpha / beta làm giá trị bắt đầu để tìm kiếm sâu hơn. Stockfish cũng ưu tiên miếng. Ví dụ, các hiệp sĩ sẽ được ưu tiên ở trung tâm, vì vậy nếu một hiệp sĩ và giám mục bị ngã rẽ ở trung tâm, họ sẽ di chuyển hiệp sĩ, trừ khi có những lợi ích đáng kể khác bằng cách di chuyển giám mục. Mặc dù điều này có vẻ phức tạp, nhưng việc thực thi này là xấp xỉ log (số lần di chuyển có thể), do đó làm cho nó khá nhanh.