Làm cách nào để chọn thuật toán tốt nhất cho trò chơi cờ như cờ đam?


15

Làm cách nào để chọn thuật toán tốt nhất cho trò chơi cờ như cờ đam?

Cho đến nay, tôi chỉ xem xét ba thuật toán, đó là minimax, cắt tỉa alpha-beta và tìm kiếm cây Monte Carlo (MCTS). Rõ ràng, cả việc cắt tỉa alpha-beta và MCTS đều là phần mở rộng của thuật toán minimax cơ bản.

Câu trả lời:


17

tl; dr:

  • Không có thuật toán nào trong số này là thực tế cho công việc hiện đại, nhưng chúng là nơi tốt để bắt đầu sư phạm.

  • Bạn nên luôn luôn thích sử dụng cắt tỉa Alpha-Beta hơn tìm kiếm minimax trần.

  • Bạn nên sử dụng một số hình thức tìm kiếm hướng dẫn heuristic nếu bạn có thể đưa ra một heuristic hữu ích. Đến với một heuristic hữu ích thường đòi hỏi nhiều kiến ​​thức về miền.

  • Bạn nên sử dụng tìm kiếm Monte Carlo Tree khi bạn thiếu một heuristic tốt, khi tài nguyên tính toán bị hạn chế và khi sai lầm sẽ không vượt quá hậu quả trong thế giới thực.

Thêm chi tiết:

Trong tìm kiếm minimax, chúng tôi không cố gắng tỏ ra rất thông minh. Chúng tôi chỉ sử dụng một phương pháp lập trình động tiêu chuẩn. Thật dễ dàng để tìm ra giá trị của các bước di chuyển khác nhau nếu chúng ta gần kết thúc trò chơi (vì trò chơi sẽ kết thúc ở nước đi tiếp theo, chúng ta không cần phải nhìn về phía trước rất xa). Tương tự như vậy, nếu chúng ta biết đối thủ của mình sẽ làm gì trong nước đi cuối cùng của trò chơi, thật dễ dàng để tìm ra những gì chúng ta nên làm trong lần di chuyển cuối cùng thứ hai. Thực tế, chúng ta có thể coi bước cuối cùng thứ hai là bước cuối cùng của một trò chơi ngắn hơn. Sau đó chúng ta có thể lặp lại quá trình này. Sử dụng phương pháp này là chắc chắn để khám phá các chiến lược tốt nhất trong một trò chơi dạng rộng tiêu chuẩn, nhưng sẽ yêu cầu chúng tôi xem xét mọi di chuyển có thể, không thể áp dụng cho tất cả các trò chơi đơn giản nhất.

Cắt tỉa Alpha-Beta là một cải tiến nghiêm ngặt về tìm kiếm Minimax. Nó sử dụng thực tế là một số di chuyển rõ ràng là tồi tệ hơn so với những người khác. Ví dụ, trong cờ vua, tôi không cần phải xem xét bất kỳ động thái nào sẽ cho bạn cơ hội đưa tôi vào vị trí người chơi, ngay cả khi bạn có thể làm những việc khác từ vị trí đó. Một khi tôi thấy rằng một động thái có thể dẫn đến thua cuộc, tôi sẽ không bận tâm suy nghĩ về những gì khác có thể xảy ra từ thời điểm đó. Tôi sẽ đi xem xét những thứ khác. Thuật toán này cũng chắc chắn mang lại kết quả chính xác, và nhanh hơn, nhưng vẫn phải xem xét hầu hết các động thái trong thực tế.

Có hai cách phổ biến mà bạn có thể nhận được xung quanh chi phí tính toán cực cao để giải quyết chính xác các loại trò chơi này:

  1. Sử dụng một Heuristic (tìm kiếm A * là thuật toán thông thường cho mục đích sư phạm, nhưng tìm kiếm Quieshood là một ý tưởng tương tự trong 2 trò chơi người chơi). Đây chỉ là một chức năng đưa ra ước tính giá trị của trạng thái của trò chơi. Thay vì xem xét tất cả các động thái trong một trò chơi, bạn chỉ có thể xem xét di chuyển ra một khoảng cách hữu hạn phía trước, và sau đó sử dụng giá trị của heuristic để đánh giá giá trị của các trạng thái bạn đạt được. Nếu heuristic của bạn là nhất quán (về cơ bản: nếu nó luôn đánh giá quá cao chất lượng của các trạng thái), thì điều này vẫn sẽ mang lại câu trả lời chính xác, nhưng với tốc độ rất lớn trong thực tế.

  2. Sử dụng Rollouts (như Tìm kiếm cây Monte Carlo). Về cơ bản, thay vì xem xét mọi di chuyển, hãy chạy vài nghìn trò chơi mô phỏng giữa những người chơi hành động ngẫu nhiên (điều này nhanh hơn so với việc xem xét tất cả các động thái có thể). Gán một giá trị cho các trạng thái bằng với tỷ lệ thắng trung bình của các trò chơi bắt đầu từ nó. Điều này có thể không mang lại câu trả lời chính xác, nhưng trong một số loại trò chơi, nó thực hiện đáng tin cậy. Nó thường được sử dụng như một phần mở rộng của các kỹ thuật chính xác hơn, thay vì được sử dụng riêng.


A * dường như không thực sự phù hợp với bối cảnh của các trò chơi hai người như các thuật toán khác làm gì? Lưu ý về MCTS: các triển khai điển hình không "xem xét tất cả các chuyển xuống một số độ sâu cố định" và sau đó bắt đầu triển khai; thay vào đó, việc triển khai điển hình một cách linh hoạt, dần dần trồng cây tìm kiếm cây, phát triển nó nhiều hơn ở những phần có triển vọng hơn (những phần mà nhiều lần triển khai được đưa vào chiến lược Lựa chọn), phát triển ít hơn ở những phần ít hứa hẹn hơn.
Dennis Soemers 16/07/18

1
@JohnDoucette tại sao bạn lại nói "Không có thuật toán nào trong số này là thực tế cho công việc hiện đại, nhưng chúng là nơi tốt để bắt đầu sư phạm." Trong trường hợp MCTS, có vẻ rất thích hợp cho công việc hiện đại ngay cả đối với tìm kiếm một người chơi khi quá trình chuyển sang trạng thái tiếp theo được đưa ra một trạng thái và một hành động được xác định rõ. Bạn có đồng ý không
Miguel Saraiva

1
@MiguelSaraiva Tự nó, MCTS không phải là thứ bạn thường sử dụng cho một ứng dụng hiện đại. Kết hợp với một cái gì đó giống như một DNN để cung cấp một heuristic đã học sẽ khá tốt.
John Doucette

1
@JohnDoucette "MCTS không phải là thứ bạn thường sử dụng cho một ứng dụng hiện đại". Trước hết, "tính hiện đại" mà bạn đề cập đã có bước đột phá lớn trong năm 2016 (MCTS + DNN) và có vẻ như bạn đang ám chỉ rằng mọi thứ từ trước đó đã bị lỗi thời (rõ ràng là sai). Trên thực tế, có thể còn hợp lý hơn khi nói rằng MCTS thường không được sử dụng vì ngược lại: nó rất tiên tiến: Có rất nhiều ứng dụng trong ngành thực sự lỗi thời và có thể bị NÂNG CẤP thành MCTS. Đối với nhiều người trong số các MCTS + DNN này chỉ là một giấc mơ xa vời vì việc đào tạo trước là khá nhiều không thể tưởng tượng được.
Johan

1
@Johan Điều đó nghe có vẻ đúng với tôi đối với các ứng dụng công nghiệp , nhưng câu hỏi đặt ra là "một trò chơi cờ như cờ đam". Đối với những vấn đề về đồ chơi đó, tôi nghĩ MCTS không phải là phương pháp hiện đại đúng đắn. Chắc chắn có rất nhiều vấn đề trong thế giới thực, nơi nó sẽ là một cải tiến lớn trên các hệ thống được triển khai hiện có.
John Doucette

6

NB Lý do tại sao tôi chỉ chọn ba thuật toán này là do thời gian tôi có sẵn để hiểu chúng. Từ một nghiên cứu nhỏ, tôi thấy rằng các thuật toán này về cơ bản được đan xen vào thuật toán minimax. Vì vậy, nếu tôi có thể hiểu một thì hai người kia sẽ rơi vào vị trí.

Với bối cảnh này, tôi khuyên bạn nên bắt đầu với Minimax . Trong ba thuật toán, Minimax là dễ hiểu nhất.

Alpha-Beta , như những người khác đã đề cập trong các câu trả lời khác, là một cải tiến nghiêm ngặt trên đỉnh Minimax. Minimax về cơ bản là một phần của việc triển khai Alpha-Beta và hiểu biết tốt về Alpha-Beta đòi hỏi phải bắt đầu với sự hiểu biết tốt về Minimax. Nếu bạn tình cờ còn thời gian sau khi hiểu và triển khai Minimax, tôi khuyên bạn nên chuyển sang Alpha-Beta sau đó và xây dựng nó trên đỉnh Minimax. Bắt đầu với Alpha-Beta nếu bạn chưa hiểu Minimax không thực sự có ý nghĩa.

Monte-Carlo Tree Search có lẽ tiên tiến hơn một chút và phức tạp hơn để thực sự, hiểu sâu sắc. Trong thập kỷ qua, MCTS thực sự đã trở nên phổ biến hơn nhiều so với hai loại kia, vì vậy từ quan điểm đó, hiểu MCTS có thể "hữu ích" hơn.

Kết nối giữa Minimax và MCTS ít trực tiếp / rõ ràng hơn kết nối giữa Minimax và Alpha-Beta, nhưng vẫn có một kết nối ít nhất là ở cấp độ khái niệm. Tôi tranh luận rằng việc hiểu rõ về Minimax trước tiên vẫn có lợi trước khi lao vào MCTS ; đặc biệt, hiểu Minimax và những sai sót / điểm yếu của nó có thể cung cấp bối cảnh hữu ích / giúp bạn hiểu tại sao MCTS trở nên "cần thiết" / phổ biến.


Để kết luận, theo tôi:

  • Alpha-Beta hoàn toàn tốt hơn Minimax, nhưng cũng liên quan / xây dựng mạnh mẽ trên đỉnh Minimax; vì vậy, hãy bắt đầu với Minimax, sau đó hãy đến Alpha-Beta nếu thời gian cho phép
  • MCTS có những điểm mạnh / điểm yếu khác nhau, thường tốt hơn Alpha-Beta trong các vấn đề "hiện đại" (nhưng không phải lúc nào cũng vậy), một sự hiểu biết tốt về Minimax sẽ có lợi trước khi bắt đầu đi sâu vào MCTS

Có thuật toán nào khác mà bạn muốn đề xuất rằng tôi cũng có thể sử dụng không? Điều đó giống như một mức độ cắt tỉa alpha beta
Joey

@Joey Hmm không thực sự. Minimax là một điểm khởi đầu rất tự nhiên, tôi cực kỳ khuyến nghị rằng nếu bạn chỉ mới bắt đầu. Về cơ bản, đó là thuật toán đầu tiên được phát triển cho các trò chơi như cờ vua / cờ đam / tic tac toe / bất cứ thứ gì. Sau đó, hàng trăm nếu không phải hàng ngàn cải tiến đã được phát triển trên đỉnh của nó, nhiều trong số đó có thể bạn có thể tìm thấy tại Chessprogramming.wikispaces.com/Search . Alpha-Beta là sự cải tiến tự nhiên nhất để xem xét trên đỉnh của Minimax.
Dennis Soemers 16/07/18

@Joey Monte-Carlo Tree Search hơi khác một chút (không nhất thiết phải có Minimax làm cơ sở), rất thú vị, vui nhộn, phổ biến và có liên quan cao trong AI "hiện đại". Tuy nhiên, nền tảng rất quan trọng, tôi không khuyên bạn nên bắt đầu với MCTS ngay lập tức nếu bạn chưa hiểu về Minimax + Alpha-Beta, mặc dù về mặt kỹ thuật có thể khả thi.
Dennis Soemers 16/07/18

Cảm ơn bạn cho trang web đó. Đó là một kho kiến ​​thức mà bây giờ tôi có thể đọc được. Khó nhất khi học những thứ mới là tìm tài liệu chính xác để giúp bạn hiểu. Vì vậy, cảm ơn một lần nữa cho trang web
Joey

@Joey Tôi không chắc chắn 100% nếu lập trình cờ vua là trang web dễ học nhất (và dường như có một thông báo đáng sợ ở đầu trang rằng trang web có thể biến mất vào cuối tháng 7). Nếu tôi nhớ chính xác, nhiều mô tả khá ngắn / có lẽ không dễ hiểu nếu bạn là người mới bắt đầu trong lĩnh vực này. Ít nhất nó sẽ là một bộ sưu tập tốt, toàn diện về tên của tất cả các loại thuật toán / cải tiến, và bạn có thể thử tra cứu các nguồn gốc hoặc google tất cả các tên đó để biết thêm thông tin chi tiết ở nơi khác.
Dennis Soemers 16/07/18

1

Tôi phải chọn giữa cắt tỉa Minimax và Alpha-Beta, bạn nên chọn Alpha-beta. Nó hiệu quả và nhanh hơn vì nó có thể cắt tỉa một phần đáng kể của cây thăm dò của bạn. Nhưng bạn cần phải sắp xếp các hành động từ tốt nhất đến xấu nhất tùy thuộc vào quan điểm tối đa hoặc tối thiểu, để thuật toán có thể nhanh chóng nhận ra nếu việc thăm dò là cần thiết.

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.