2009-02-07 36 views
14

Tôi không quan tâm đến việc tối ưu hóa nhỏ cho vài phần trăm tốc độ. Tôi quan tâm đến các chẩn đoán quan trọng nhất cho tìm kiếm alpha-beta. Và các thành phần quan trọng nhất cho chức năng đánh giá.Trạng thái của nghệ thuật trong việc tìm kiếm cây cờ vua máy tính là gì?

Tôi đặc biệt quan tâm đến các thuật toán có tỷ lệ (cải thiện/mã hóa) lớn nhất. (KHÔNG (cải thiện/phức tạp)).

Cảm ơn.

PS Kẻ giết người di chuyển heuristic là một ví dụ hoàn hảo - dễ thực hiện và mạnh mẽ. Cơ sở dữ liệu về chẩn đoán quá phức tạp.

Trả lời

13

Không chắc chắn nếu bạn đã nhận thức được nó, nhưng hãy kiểm tra các Chess Programming Wiki - đó là một nguồn tài nguyên tuyệt vời bao gồm tất cả mọi khía cạnh của AI cờ hiện đại. Đặc biệt, liên quan đến câu hỏi của bạn, xem phần Tìm kiếm và Đánh giá (dưới Nguyên tắc Chủ đề) trên trang chính. Bạn cũng có thể khám phá một số kỹ thuật thú vị được sử dụng trong một số chương trình được liệt kê here. Nếu câu hỏi của bạn vẫn chưa được trả lời, tôi chắc chắn sẽ khuyên bạn nên hỏi trong số Chess Programming Forums, nơi có nhiều chuyên gia hơn để trả lời. (Không phải là bạn sẽ không nhất thiết phải nhận được câu trả lời hay ở đây, chỉ là nó có nhiều khả năng hơn trên các diễn đàn chuyên gia cụ thể theo chủ đề).

2

Mặc dù nhiều tối ưu hóa dựa trên chẩn đoán (ý tôi là cách tăng độ sâu cây mà không tìm kiếm thực tế) được thảo luận trong tài liệu lập trình cờ vua, tôi nghĩ hầu hết chúng hiếm khi được sử dụng. Lý do là chúng là những tên lửa đẩy hiệu suất tốt về lý thuyết, nhưng không phải trong thực tế.

Đôi khi các chẩn đoán này có thể trở lại trạng thái xấu (ý tôi là không phải là tốt nhất).

Những người tôi đã nói chuyện luôn khuyên bạn nên tối ưu hóa tìm kiếm alpha-beta và triển khai làm sâu sắc lặp lại vào mã thay vì cố gắng thêm các chẩn đoán khác. Lý do chính là các máy tính đang gia tăng sức mạnh xử lý và nghiên cứu [cần dẫn nguồn] đã chỉ ra rằng các chương trình sử dụng thời gian CPU đầy đủ của họ để bạo lực cây alpha-beta đến độ sâu tối đa luôn luôn vượt quá mức các chương trình chia thời gian của họ giữa một mức độ alpha-beta nhất định và sau đó một số chẩn đoán.

Mặc dù sử dụng một số chẩn đoán để mở rộng chiều sâu cây có thể gây hại nhiều hơn lợi ích, nhưng có nhiều trình tăng hiệu suất bạn có thể thêm vào thuật toán tìm kiếm alpha-beta.

Tôi chắc chắn rằng bạn biết rằng alpha-beta hoạt động chính xác như được dự định hoạt động, bạn nên có cơ chế sắp xếp di chuyển (làm sâu thêm lặp). Làm sâu sắc hơn có thể giúp bạn tăng cường hiệu suất 10%.

Thêm Biến thể chính searc h kỹ thuật alpha beta có thể giúp bạn tăng thêm 10%.

Hãy thử thuật toán MTD (f). Nó cũng có thể tăng hiệu suất của động cơ của bạn.

0

Chuyển động của kẻ giết người là ví dụ điển hình về kích thước mã nhỏ và cải thiện đáng kể về thứ tự di chuyển.

0

Hầu hết các trò chơi trên bảng AI Thuật toán dựa trên http://en.wikipedia.org/wiki/Minmax MinMax.Mục tiêu là giảm thiểu các tùy chọn của chúng trong khi tối đa hóa các tùy chọn của bạn. Mặc dù với cờ vua đây là một vấn đề thời gian chạy rất lớn và tốn kém. Để giúp giảm thiểu, bạn có thể kết hợp minmax với cơ sở dữ liệu của các trò chơi đã chơi trước đó. Bất kỳ trò chơi nào có vị trí bảng tương tự và có mẫu được thiết lập dựa trên cách bố cục đã giành được cho màu của bạn có thể được sử dụng cho đến khi "phân tích" để di chuyển tiếp theo.

Tôi hơi bối rối về ý của bạn là cải thiện/code_size. Bạn có thực sự có nghĩa là cải thiện/phân tích thời gian chạy (lớn O (n) so với o (n))? Nếu đúng như vậy, hãy nói chuyện với IBM và đội xanh lớn của Parallels của Microsoft. Tại PDC, tôi đã nói chuyện với một anh chàng (tên của tôi đã trốn thoát tôi), người đã thể hiện Mahjong bằng cách sử dụng 8 lõi cho mỗi đối thủ và họ giành vị trí đầu tiên trong cuộc thi thiết kế thuật toán trò chơi (tên cũng thoát khỏi tôi).

Tôi không nghĩ rằng có bất kỳ thuật toán "đóng hộp" nào ngoài đó để luôn giành chiến thắng cờ vua và làm điều đó rất nhanh. Cách mà bạn sẽ phải làm điều đó là có MỌI trò chơi có thể chơi trước đó được lập chỉ mục trong cơ sở dữ liệu từ điển rất lớn và đã được lưu trước khi phân tích mọi trò chơi. Nó sẽ là một thuật toán VERY compex và sẽ là một vấn đề cải thiện/phức tạp rất kém trong quan điểm của tôi.

4

MTD(f) hoặc một trong các MTD variants là một cải tiến lớn so với tiêu chuẩn alpha-beta, cung cấp cho bạn không có chi tiết thực sự tốt trong chức năng đánh giá của bạn và giả định rằng bạn đang sử dụng killer heuristic. history heuristic cũng hữu ích.

Chương trình cờ vua được xếp hạng cao nhất Rybka dường như đã từ bỏ MDT (f) có lợi cho PVS với cửa sổ không hút nguyện vọng trên các nút không phải PV.

Extended futility pruning, trong đó kết hợp cả cắt tỉa vô ích bình thường và làm sạch sâu, về mặt lý thuyết là không rõ ràng, nhưng hiệu quả đáng kể trong thực tế.

Iterative deepening là một kỹ thuật hữu ích khác. Và tôi đã liệt kê rất nhiều good chess programming links here.

1

Một heuristic chưa được đề cập là Null move pruning.

Ngoài ra, Ed Schröder có một trang lớn giải thích một số thủ đoạn ông được sử dụng trong động cơ Rebel của mình, và bao nhiêu cải thiện từng góp phần làm tăng tốc độ/hiệu suất: Inside Rebel

0

Tôi có thể là hơi off topic nhưng "nhà nước của nghệ thuật "các chương trình cờ vua sử dụng MPI như Deep Blue cho sức mạnh song song lớn.

Chỉ cần xem xét hơn xử lý song song đóng một vai trò lớn trong cờ vua hiện đại

1

Sử dụng một bảng chuyển vị với một zobrist hash

Phải mất rất ít mã để thực hiện [một XOR trên mỗi di chuyển hoặc unmove, và nếu tuyên bố trước khi đệ quy trong cây trò chơi] và lợi ích khá tốt, đặc biệt nếu bạn đã sử dụng tính năng làm sâu lặp lại và có thể chỉnh sửa được (sử dụng bảng lớn hơn, bảng nhỏ hơn, chiến lược thay thế, v.v.)

Các vấn đề liên quan