Sự ngẫu nhiên trong chơi động cơ


11

Nếu tôi có hai động cơ để chơi với nhau với cùng một màu, liệu cùng một kết quả trò chơi mỗi lần? Nếu không, sự ngẫu nhiên trong chơi động cơ đến từ đâu? (Bỏ qua cuốn sách mở đầu, trong đó nếu tôi không nhầm cuốn sách có thể bảo động cơ chọn ngẫu nhiên giữa hai lần di chuyển vì chúng tốt như nhau.)

Tôi cho rằng có sự ngẫu nhiên bởi vì trong trận đấu giữa Alphazero và Stockfish, chúng tôi đã không có được trận đấu tương tự xảy ra nhiều lần liên tiếp. Tuy nhiên tôi không hiểu tại sao. Có lẽ cách duy nhất để làm điều này là làm cho động cơ chơi một nhánh phụ di chuyển một số thời gian, nghe có vẻ như seppuku.


AlphaZero học bằng cách chơi, vì vậy sau mỗi trò chơi, mô hình của nó được cập nhật.
men

Thêm giá trị ngẫu nhiên nhỏ để đánh giá là một trong những cách có thể. Tôi nghĩ rằng stockfish đang làm điều đó.
hoacin

Câu trả lời:


7

Về AlphaZero vs cá hồi phơi khô không có muối trận đấu, câu hỏi này đã được đề cập ở đây bởi SmallChess .

Bỏ qua AlphaZero (sử dụng thói quen chuyên biệt Monte Carlo 1 trong việc khám phá các đường chơi), được xây dựng để không mang tính quyết định khi xây dựng, đối với các động cơ cờ vua dựa trên kinh nghiệm thông thường, như Stockfish và các loại khác (mặc dù có khác các động cơ có thói quen dựa trên MC, AFAIK Rybka đã từng có tính năng như vậy), nguồn gốc của tính ngẫu nhiên nói chung chỉ là hệ quả của các khía cạnh kỹ thuật trong quá trình thực hiện, thay vì ngẫu nhiên có chủ ý được đưa ra một cách thuật toán trong quá trình ra quyết định của động cơ. Nói một cách trừu tượng, một lý do cho điều đó là thực tế là các động cơ không chạy theo cách thức hoàn toàn tuần tự (thực hiện hết nhiệm vụ này đến nhiệm vụ khác). Thay vào đó, để làm cho các động cơ hiệu quả hơn, chúng thực hiện các tìm kiếm song song trong các nhánh khác nhau của cây di chuyển có thể. Họ làm như vậy thông qua cái được gọi là đa luồng (hoặc xử lý nhưng điều đó hơi khác một chút). Vì vậy, nhiều luồng của CPU đồng thờithực hiện các hoạt động để tìm kiếm cây (và lưu trữ các đánh giá của các vị trí đã truy cập), vì vậy hãy tưởng tượng mỗi luồng được gán một cây con. Vấn đề với kiểu triển khai này là việc thực thi tổng thể của các luồng trở nên phụ thuộc rất nhiều vào tất cả các điều kiện (thời gian chờ, hoán đổi RAM, ...), vì vậy cuối cùng, một biến thể chính có thể được chọn mà không cho phép tất cả các biến thể khác chủ đề để kết thúc tìm kiếm của họ.

Điều này thực sự xảy ra thường xuyên vì động cơ được thiết lập để đưa ra quyết định trong một khoảng thời gian nhất định, vì vậy quản lý thời gian làm thay đổi hành vi. Bạn cũng có thể hoàn nguyên tuyên bố này bằng cách nói: biết thuật toán và thực hiện các thói quen phân luồng xác định là không đủ để dự đoán một cách đáng tin cậy trạng thái của chương trình sau bất kỳ thời gian nào. Tất nhiên, nếu người ta luôn cho phép tất cả các luồng kết thúc tìm kiếm của họ và không có vấn đề tương tranh nào trong quá trình thực thi đó (ví dụ, một luồng cố gắng truy cập vào một bộ đệm nhất định không thể truy cập được), thì hành vi đó thực sự sẽ được tái tạo hoàn toàn cho tất cả mọi thứ khác là cùng 2 .


1 : Cùng với thực tế là thông qua đào tạo bổ sung (ví dụ như tự chơi), mạng lưới thần kinh của nó tiếp tục phát triển (các tham số được điều chỉnh lại) hoặc nếu bạn sẽ chức năng đánh giá của nó không có định nghĩa cố định, cố định (không giống như các công cụ dựa trên heuristic ).

2 : Ngay cả khi đó, như bạn đã nói, ở cấp độ mở, với một cuốn sách mở đầu, đôi khi có những quyết định ngẫu nhiên có chủ ý được thực hiện bởi động cơ về việc chọn biến thể nào. Tương tự, bên ngoài giai đoạn mở đầu, có thể có những khoảnh khắc mà nhiều biến thể gần với các đánh giá bằng nhau (trong độ phân giải được chọn cho Eval), sau đó dựa trên thiết kế, cuối cùng có thể chọn một biến thể. Cuối cùng, ở cấp độ cài đặt động cơ, bạn cũng phải cẩn thận, ví dụ độ sâu của thời gian tìm kiếm và thời gian suy nghĩ được chọn cho mỗi động cơ (và liệu chúng có thể tính toán thêm trong thời gian suy ngẫm của nhau không).


6

Cảm ơn @Phonon bao gồm các câu trả lời trước đây của tôi một cách chi tiết. Tôi muốn thêm một điểm nữa: kiểm soát thời gian .

Kiểm soát thời gian xác định duy nhất là theo số lượng nút , nhưng điều này là không phổ biến. Việc kiểm soát thời gian phổ biến hơn nhiều - số giây cố định hoặc thời gian trò chơi thường không mang tính quyết định.

Hãy thử một ví dụ. Chạy stockfish trên thiết bị đầu cuối của bạn. Kiểu:

đi 20000

Lệnh này hướng dẫn động cơ thực hiện di chuyển sau 20 giây. Kết quả của tôi:

info depth 23 seldepth 32 multipv 1 score cp 6 upperbound nodes 24325860 nps 1216171 hashfull 999 tbhits 0 time 20002 pv g1f3 d7d5
bestmove g1f3 ponder d7d5

Di chuyển là 1.Nf3. Tiếp theo, tôi giết Stockfish của tôi, bắt đầu một cái mới. Một lần nữa, 20 giây. Tôi đã nhận:

info depth 23 seldepth 32 multipv 1 score cp 20 nodes 26185280 nps 1309067 hashfull 999 tbhits 0 time 20003 pv d2d4
bestmove d2d4 ponder g8f6

Đó là 1.d4! Cùng một vị trí, cả 20 giây tìm kiếm!

Bạn có thấy? Cả hai giây cho việc di chuyển, nhưng do sự biến động trong hệ điều hành Linux, lần chạy thứ hai của tôi đã tìm kiếm sâu hơn (26185280> 24325860).

Xin lưu ý rằng thí nghiệm nhỏ này thậm chí không được đa luồng (số lượng chủ đề = 1). Đa luồng sẽ làm cho mọi thứ trở nên không xác định hơn.

Stockfish đã được cho một phút mỗi lần di chuyển trong trận đấu Google AlphaZero. Số lượng chủ đề là 64. Các quyết định của Stockfish trong trận đấu không thể mang tính quyết định.


Thật vậy, ví dụ rất hướng dẫn và nhận xét.
dùng929304

đẹp! ý tưởng tuyệt vời để giới thiệu ngay cả trường hợp 1 chủ đề.
Phonon

Cảm ơn câu trả lời. Câu hỏi tiếp theo ngu ngốc: một nút (trong bối cảnh các công cụ chơi cờ) là gì?
Allure

@ user3727079 Các nút là các đỉnh (vị trí duy nhất) trong cây trò chơi . Chẳng hạn, nếu nút gốc là vị trí bắt đầu, thì nó có 20 nút con, đó là 20 vị trí pháp lý duy nhất cách xa gốc một lớp.
Phonon
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.