Làm thế nào các động cơ cải thiện kể từ Deep Blue?


17

Động cơ cờ vua máy tính đã trở nên tốt hơn kể từ khi Deep Blue đánh bại Kasparov vào năm 1997.

Các thuật toán đã trở nên tốt hơn hay các cải tiến chủ yếu là do các thuật toán tương tự chạy nhanh hơn nhờ phần cứng nhanh hơn, v.v.?

Nếu trước đây, những cải tiến thuật toán này là công khai?

Và nếu vậy, những cải tiến là gì? Tôi có thể đọc về họ ở đâu?



Làm sao ? Thật kịch tính.
Evargalo

Câu trả lời:


8

Có lẽ bạn có thể xem TalkChess , một diễn đàn dành riêng cho cờ vua máy tính. Tôi tìm thấy một chủ đề gần đây có thể thú vị với bạn: Tiến bộ trong 30 năm qua bốn khoảng thời gian 7-8 năm

Một vài trận đấu giữa các động cơ hàng đầu (cũ) được chơi trên cùng một phần cứng . Thử nghiệm cho thấy rằng trong những năm gần đây (2002-2017), mức tăng chủ yếu được thực hiện nhờ cải tiến phần mềm. Trong thử nghiệm, Stockfish (2017) đã đạt điểm 94/100 ấn tượng trước RobboLito (2009), trong khi RobboLito, đến lượt mình, nghiền nát Shredder (2002) với 92/100.

Một lưu ý quan trọng: vì tính toán song song không được thực hiện trong các động cơ cũ, thử nghiệm đã được thực hiện trên một lõi đơn. Kết quả là, mức tăng phần cứng của các máy song song không được đo. Mặt khác, bạn có thể lập luận rằng điện toán song song cũng là một lợi ích của phần mềm: không dễ để thiết kế và thực hiện song song hiệu quả và mở rộng cho thuật toán tìm kiếm.

Công cụ Stockfish là nguồn mở, vì vậy các cải tiến thuật toán là công khai. Rất nhiều tài liệu có thể được tìm thấy trên https://chessprogramming.wikispaces.com


Điều này trả lời khẳng định của mình. Hãy cố gắng trả lời câu hỏi lần sau.
Fred Knight

1
Vâng, tôi tin rằng tôi đã trả lời câu hỏi: mức tăng chủ yếu được thực hiện nhờ cải tiến thuật toán. Hơn nữa, tôi đã hiển thị dữ liệu hỗ trợ cho yêu cầu này (xem liên kết) và chỉ ra một thiếu sót có thể xảy ra (không đo song song).
Maxwell86

3

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.


7
Tôi cố gắng không trả lời câu trả lời, nhưng đây chỉ là .... Alpha-beta và bitboard đã được phát minh ra LONG trước Deep Blue. Tôi cũng khá chắc chắn rằng bảng eval không truy cập HD trong bất kỳ động cơ lành mạnh nào (độ trễ là LỚN). Thứ tư, tôi rất nghi ngờ rằng kích thước RAM tạo ra bất kỳ sự khác biệt thực sự nào trong việc triển khai tìm kiếm alpha-beta thông thường của bạn.
MaxB

Có lẽ bạn có thể thêm một số siêu liên kết vào một số khái niệm bạn đang thảo luận? Là một người quan tâm đến khái niệm này, nhưng không quen thuộc với thuật ngữ này, thật khó để theo dõi bởi vì tôi không biết bitboard là gì hoặc công cụ Cờ vua Crafty.
Thunderforge

Tôi nghĩ rằng tôi đã rõ ràng rằng tôi không so sánh với Deep Blue, nhưng tôi đã đưa ra một lịch sử ngắn gọn. Ổ cứng tôi đã đề cập đến là chính chương trình. Mỗi khi có một khái niệm eval mới được đưa vào một công cụ cờ vua, cần nhiều mã hơn và do đó cần nhiều không gian HD hơn.
Fred Knight

@Thunderforge, một liên kết tôi đưa ra giải thích mọi khía cạnh bạn có thể muốn đối phó với lập trình cờ vua, tuy nhiên tôi thừa nhận rằng nó rất khó điều hướng. Tôi đã học được bằng cách đọc mã nguồn của người khác, nhưng mã được nhận xét nhiều nhất là công cụ Crafty của Tiến sĩ Hyatt. Tôi chọn không quá toàn diện do giới hạn không gian và sự khác biệt giữa các nền tảng và trình biên dịch. Nếu, sau khi đọc trang cờ vua wiki, bạn vẫn bối rối, hãy đặt câu hỏi và tôi chắc chắn nhiều người sẽ cung cấp câu trả lời tốt hơn.
Fred Knight

1
Every time that a new eval concept in included into a chess engine, more code, and therefore more HD space is required.Các chức năng bảng eval thường được thiết kế để phù hợp với bộ đệm CPU. Bộ nhớ cache CPU << RAM << HD. Kích thước HD không có sự khác biệt.
MaxB

2

Các thuật toán đã trở nên tốt hơn?

Rõ ràng, có một chút.

hoặc những cải tiến chủ yếu là do cùng một thuật toán chạy nhanh hơn nhờ phần cứng và phần mềm nhanh hơn?

Nit nhỏ: Nếu các thuật toán trở nên tốt hơn thì đó là phần mềm trở nên tốt hơn nên không có "hoặc".

Định luật Moore cho chúng ta biết rằng tốc độ xử lý sẽ tăng gấp đôi sau mỗi 18 tháng. Điều đó có nghĩa là nó đã tăng gấp đôi khoảng 13 lần trong 20 năm. Điều đó làm cho các bộ xử lý hiện đại ở đâu đó trong khu vực nhanh hơn 8.000 lần. Vì vậy, sự cải thiện lớn nhất về hiệu suất động cơ là do phần cứng nhanh hơn.

Nếu trước đây, những cải tiến thuật toán này là công khai?

Và nếu vậy, những cải tiến là gì? Tôi có thể đọc về họ ở đâu?

Chà, nó không phải là cái trước, nó là cái sau. Tuy nhiên, các cải tiến chủ yếu là nguồn mở và hiển thị tự do bằng cách tải xuống các nguồn cho các công cụ như Stockfish . Có lẽ cũng đáng để cung cấp liên kết tải xuống Stockfish chungliên kết mã nguồn cụ thể có thể sẽ hết hạn khi phiên bản 9 xuất hiện.


2
That means it has doubled roughly 13 times in 20 years.Tôi nghĩ rằng bạn đang trích dẫn sai luật Moore. Nó không nói gì về tốc độ xử lý. Trên thực tế, nó đã không tăng gấp đôi trong một thời gian.
MaxB

hardware and softwareTôi có nghĩa là phần mềm như trong việc thực hiện thuật toán (ASM vs C ++), nhưng tôi có thể thấy nó khó hiểu như thế nào. Đã sửa.
MaxB

1
Luật của ông Moore là đúng, ngoại trừ việc ông bao gồm cụm từ "trong thập kỷ tới." Điều này sẽ có được vào năm 1975, và ông đã đúng.
Fred Knight

-1 vì câu trả lời không chính xác - trên cùng một phần cứng, các động cơ hiện tại vẫn đè bẹp các động cơ trước đây.
Allure

0

Đó là tất cả về các thuật toán.

Vào một người chơi cờ người đã lấy một trong những máy tính mạnh nhất thế giới vào thời điểm đó. Cách tiếp cận điện toán vũ phu này cho phép Deep Blue nhìn xung quanh sáu đến tám bước về phía trước. Trong một cuộc thi chặt chẽ, cuối cùng cỗ máy đã đánh bại Kasparov với tỷ số 3 1/2 trận đấu xuống còn 2 1/2.

Sáu năm sau, Kasparov đã tham gia vào một cuộc thi khác của con người so với máy móc. Lần này anh chơi với người kế nhiệm của Deep Blue, Deep Junior. Kết quả là một loạt rút ra ở ba trò chơi tất cả. Sự khác biệt lớn nhất là Deep Junior chạy trên một cỗ máy với khoảng một phần trăm sức mạnh tính toán của Deep Blue. Các thuật toán chơi cờ đã được cải thiện đến mức đạt được kết quả gần như tương tự với sức mạnh tính toán ít hơn hàng trăm lần.


4
Chào mừng bạn đến với Cờ vua! Bạn đã viết phần chính của câu trả lời của bạn như thể đó là một trích dẫn; bạn có thể vui lòng cung cấp một nguồn?
Glorfindel

0

Tuyên bố từ chối trách nhiệm: không phải là một chuyên gia.

Các thuật toán trở nên tốt hơn và các động cơ tốt nhất hiện nay chạy vào năm 1995 (hãy nhớ Deep Blue là 1999) phần cứng sẽ đánh bại Kasparov một cách khéo léo. Theo tôi hiểu, có hai khía cạnh của thuật toán:

Tìm kiếm . Ví dụ, nếu tôi lấy nữ hoàng của bạn với nữ hoàng của tôi, một đối thủ của con người sẽ tự động nhìn đầu tiên vào việc chiếm lại. Tuy nhiên, đối với máy tính, nó sẽ đánh giá mọi phản ứng có thể có đối với QxQ. Hầu như tất cả thời gian, điều này là lãng phí sức mạnh xử lý. Một thuật toán tìm kiếm tốt sẽ cắt giảm tất cả các "nhánh" này vì dù sao chúng không liên quan.

Thuật toán tìm kiếm tiêu chuẩn là cắt tỉa alpha-beta và nó được sử dụng trong các máy tính cờ vua sớm nhất. Tôi không biết Deep Blue có sử dụng cắt tỉa alpha-beta không, nhưng các động cơ hiện đại thì không. Kết quả là các tìm kiếm của họ là "không an toàn" - ví dụ, họ có thể bỏ lỡ rằng một số động thái khác ngoài việc chiếm lại nữ hoàng sẽ giành chiến thắng trong trò chơi. Tuy nhiên, thật hiếm khi điều này xảy ra, và bù lại, họ đẩy độ sâu của mình lên rất cao. .

Đánh giá . Đây là prong khác của mã động cơ. Cho một vị trí cụ thể, nó là tốt hơn cho màu trắng, đen, hoặc bằng? Điều này có thể liên quan đến tất cả các loại chức năng, ví dụ

  • Nếu một bên có thêm vật liệu / không gian, hãy cho nó một phần thưởng cho eval.
  • Nếu màu trắng có một hiệp sĩ tiên tiến được hỗ trợ bởi một con tốt, hãy cho phần thưởng màu trắng cho eval.
  • Nếu vua của người da đen bị bế tắc, hãy cho người da trắng tiền thưởng cho eval.
  • Nếu màu trắng có một tân binh ở hạng 7, hãy cho phần thưởng màu trắng cho eval.
  • Nếu đó là một trò chơi kết thúc (và có các thuật toán để quyết định xem vị trí đó có phải là một kết thúc hay không) và cả hai bên đều có các giám mục màu đối nghịch, áp đặt một hình phạt để đánh bại (tức là đẩy nó về phía 0,00).

Động cơ ngày nay đánh giá vị trí tốt hơn nhiều so với Deep Blue.

Về việc các thuật toán có công khai hay không, Stockfish hiện là công cụ mạnh nhất thế giới và là nguồn mở. Bạn có thể tự tải mã từ Github .

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.