Làm thế nào để một công cụ quyết định nút nào để tìm kiếm đầu tiên?


8

Đây là câu hỏi tiếp theo về Tính ngẫu nhiên trong Engine Play . Câu trả lời của SmallChess chỉ ra rằng trong một trường hợp, Stockfish đã tìm kiếm một số nút nhất định sau 20 giây và một số khác trong 20 giây khác, do đó có sự ngẫu nhiên.

Câu hỏi: nếu mỗi nút là một vị trí nhất định, làm thế nào Stockfish quyết định nút nào để tìm kiếm đầu tiên? Lấy ví dụ nửa lớp đầu tiên. White có 20 lần di chuyển đầu tiên có thể, vì vậy có 20 nút. Tôi yêu cầu Stockfish chơi một động thái sau khi tìm kiếm năm nút. Điều này có nghĩa là Stockfish có thể chỉ đánh giá 1. a4, 1. a3, 1. b4, 1. b3 và 1. c3 trước khi nó phải di chuyển? Tuy nhiên, một tìm kiếm có hệ thống như thế này có nghĩa là Stockfish chưa đánh giá các bước di chuyển đầu tiên phổ biến nhất.

Tôi tưởng tượng rằng, sau này trong trò chơi, sẽ có một bước nhảy lớn về số lượng nút trên một nửa lớp. Điều đó có nghĩa là Stockfish đôi khi sẽ quyết định thực hiện một động thái mặc dù nó chưa hoàn thành việc đánh giá mọi nút trong nửa lớp. Làm thế nào nó biết rằng nó đã tìm kiếm các nút hứa hẹn nhất?



Cảm ơn cho liên kết, vẫn không thực sự có được nó mặc dù. Nói biểu đồ ở phía dưới. Tôi giả sử A là vị trí hiện tại và B, C & E là ba ứng cử viên di chuyển? Nếu IDDFS ở độ sâu hai đi A, B, D, F, C, G, E, F và di chuyển tốt nhất là E, thì có thể bỏ lỡ bước di chuyển tốt nhất nếu phải chấm dứt tìm kiếm trước khi tiếp cận nó.
Allure

Tôi không thấy làm thế nào nó có thể là một bản sao - câu hỏi rõ ràng là (?) Khác nhau.
Allure

Tôi xin lỗi @ user3727079, bạn có thể xóa downvote đó không? Cũng cho tôi biết nếu nó giúp.
QuIcKmAtHs

@XcoderX anh ấy không thể xóa nó vì tôi là người đã đánh giá thấp bạn
SmallChess

Câu trả lời:


5

http://rebel13.nl/rebel13/ideas.html giải thích điều này tốt.

Ý tưởng cơ bản là sắp xếp các bước di chuyển dựa trên những gì chương trình cho là di chuyển tốt nhất mà không cần tìm kiếm. Điểm này thường dựa trên tính cơ động, giá trị mảnh vuông, điều khiển trung tâm, lịch sử, tiềm năng tấn công, bắt giữ và các yếu tố khác mà lập trình viên cho là quan trọng. Giống như con người dựa trên di chuyển ứng cử viên của họ dựa trên trực giác và lịch sử, máy tính sẽ tìm kiếm điểm di chuyển cao nhất trước tiên.

Nếu máy tính bị giới hạn chỉ năm nút, thì có, máy tính sẽ chỉ tìm kiếm năm di chuyển điểm cao nhất. Yếu tố giới hạn thời gian này có thể khiến máy tính bỏ lỡ một người bạn đời nếu nó bị điểm kém. Phương pháp đầu tiên để khắc phục điều này là thiết lập fail-két. Chúng sẽ cắt ngắn một tìm kiếm nếu vị trí trở nên tồi tệ hơn đáng kể hoặc tốt hơn đáng kể. Hy vọng là cho phép có nhiều thời gian hơn để tìm kiếm nhiều biến thể có thể sử dụng thời gian tốt hơn. Các thuật toán tìm kiếm khác, lặp đi lặp lại sâu hơn, đã cải thiện việc quản lý thời gian vì chúng có độ dài ngắn hơn trước khi chúng ban hành một lỗi an toàn.


0

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. nhập mô tả hình ảnh ở đây 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.


@ user3727079 có giúp được gì không?
QuIcKmAtHs

1
Không, thật không may. Tôi không hiểu câu trả lời của bạn. Dường như nó không trả lời câu hỏi của tôi, đó là nút nào được tìm kiếm trước, chứ không phải Stockfish đưa ra quyết định như thế nào (tôi hiểu ý nghĩa của việc tìm kiếm cây).
Allure
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.