Tôi không thể nói về thuật toán được sử dụng cho Deep Blue, nhưng tôi sẽ cố gắng giải thích những cải tiến trong lập trình cờ vua. Tốc độ là sự cải thiện lớn nhất. Deep Blue đã sử dụng các máy tính chuyên dụng đa bộ xử lý, vì vậy việc so sánh không thực sự khả thi.
https://chessprogramming.wikispaces.com/ là một nguồn tuyệt vời, nhưng thật khó để điều hướng.
Có 3 chức năng chính được điều chỉnh để cải thiện một công cụ cờ vua là đánh giá, tạo di chuyển và chức năng tìm kiếm.
Đánh giá là khó nhất để lập trình, vì có nhiều trường hợp ngoại lệ cho các quy tắc. Với dung lượng ổ cứng ngày càng rẻ hơn, chức năng eval cho phép đánh giá nhiều ngoại lệ hơn.
Di chuyển thế hệ, cùng với việc thực hiện và không di chuyển, tiêu tốn rất nhiều bộ nhớ vì nó phải được tạo hình trước rất nhiều lần. Các chức năng tạo phổ biến nhất là hộp thư, bitboard, 0x88, 8x8, bảng mở rộng (10x10, 10x12) và mảng / bảng di chuyển được xác định trước (* Tôi sử dụng bảng di chuyển được lập chỉ mục). Ý kiến hiện tại là bitboard là nhanh hơn và sử dụng bitboard ma thuật tăng tốc độ này lên đến 30%. Tiến sĩ Robert Hyatt, giáo sư và người tạo ra động cơ cờ vua, tuyên bố không tăng tốc độ đáng kể.
Hàm tìm kiếm ban đầu là các hàm min-max nguyên thủy. Về cơ bản, bạn đã cố gắng tối đa hóa điểm số của phe để di chuyển và tối thiểu hóa điểm số của đối thủ. Alpha-Beta là sự cải tiến đầu tiên. Họ đã giảm số lượng di chuyển đang được tìm kiếm bởi bảng chuyển vị, giá trị giới hạn, cửa sổ nguyện vọng và chẩn đoán lịch sử. Đây là những tìm kiếm chuyên sâu. Ngoài ra còn có tìm kiếm sâu lặp đi lặp lại nội bộ cố gắng tìm kiếm (các) di chuyển "tốt nhất" với hy vọng sâu sắc nhất rằng tìm kiếm các di chuyển khác sẽ chứng tỏ là không có kết quả.
LƯU Ý: Bảng chỉ mục của tôi. Cả GNUChess và Jester đều sử dụng một mảng chỉ mục để tạo ra các bước di chuyển của họ. Họ khởi tạo động cơ bằng cách điền vào mảng với các di chuyển có thể. Lấy sáu mảnh và tính toán các bước di chuyển hợp pháp có sẵn từ mỗi ô vuông. Vì vậy, mỗi phần có một mảng [64] [8]. Tôi lấy ý tưởng này và nén nó thành hai chỉ mục và một bảng. Bảng giữ một giá trị cho biết nếu 16 di chuyển là có thể, một chỉ số giữ phần bù của di chuyển và bảng còn lại giữ mặt nạ.
bù [] = {-8, -1, 1, 8, -9, -7, 7, 9, -17, -15, -10, -6, 6, 10, 15, 17};
mặt nạ [] = {1, 2, 4, 8, 16, 32, 64, 128, 256, ...};
Sau đó, việc tạo ra một bước di chuyển dễ dàng như tìm kiếm tính hợp lệ của mặt nạ trong các độ lệch cho phép so với bảng di chuyển.