Kỹ thuật tốt nhất cho AI của trò chơi bài


27

Tôi đang cố gắng phát triển AI cho một trò chơi bài và tôi hơi bế tắc về kỹ thuật / thuật toán tôi nên sử dụng. Dưới đây là một vài giả định về trò chơi:

  • Sau khi các thẻ được phân phối cho người chơi, không có sự ngẫu nhiên. Ý tôi là ở đây, mọi người chơi đều có thể chọn những thẻ mình chơi nhưng không có quá trình ngẫu nhiên nào xảy ra như khi phân phối thẻ vào đầu trò chơi.
  • Có giới hạn về các thẻ có thể được phát khi thẻ đã được chơi.
  • Người chơi nào thắng được mánh, chơi trước rồi. Ví dụ: Người chơi 1 chơi bài, Người chơi 2 chơi bài và thắng. Sau đó, Người chơi 2 chơi một thẻ và sau đó Người chơi 1 chơi.

Tôi biết rất nhiều gợi ý / quy tắc (ví dụ: nếu tôi biết người chơi có thẻ A, B, C thì tôi nên chơi D) giúp tôi giành chiến thắng trong trò chơi. Do đó trước tiên tôi muốn sử dụng mạng Bayes để mô tả các quy tắc đó. Vấn đề là tôi không biết bất kỳ xác suất nào để gán, nhưng tôi có thể tính toán một heuristic bằng cách sử dụng lịch sử của các trò chơi đã chơi (chống lại một con người). Vấn đề thứ hai, rất có thể là tôi không biết tất cả các quy tắc và có một số quy tắc ngầm cần thiết cho AI để tìm ra cách chơi tối ưu.

Tôi không chắc liệu đây có phải là một cách tốt để phát triển AI cho một trò chơi bài như vậy không?

Tôi cũng tự hỏi nếu có những kỹ thuật khác phù hợp nhất với vấn đề. Ví dụ, tôi đã xem xét minimax (có thể với thuật toán cắt tỉa), nhưng sẽ là một lựa chọn tốt cho vấn đề này? Tôi khá không chắc chắn vì những lần chơi quan trọng nhất là vào đầu trò chơi khi có các thông số chưa biết cao nhất (hầu hết các thẻ chưa được chơi).


1
Câu hỏi tuyệt vời! Đừng có câu trả lời hoàn chỉnh. Tôi chỉ muốn thêm 2c của tôi: nếu bạn biết tất cả các trạng thái có thể có trong trò chơi của mình, thì về mặt lý thuyết, Minimax sẽ là một cách tốt để vượt qua cây trạng thái trò chơi đó. Có thể gặp sự cố về hiệu suất nếu cây trạng thái trò chơi đó quá lớn ...
Shivan Dragon

1
Mục tiêu của trò chơi là gì? Ai thắng? Người chơi có thể ước tính cơ hội chiến thắng trò chơi của mình bất cứ lúc nào không?
ĐẾN TỪ

Tôi không thể giải thích chi tiết về trò chơi. Để giành chiến thắng, người chơi phải nhận được số điểm cao nhất (nhiều hơn người chơi khác). Lúc đầu, thật khó / không thể nói nếu chúng ta sẽ giành chiến thắng. Cuối cùng, chúng ta có thể chắc chắn rằng để giành chiến thắng nếu một người đã có đủ điểm (người chơi khác không thể giành đủ điểm nữa để giành chiến thắng).
LaurentG

1
Là trò chơi HeartStone? :)
Lescai Ionel

1
Có vẻ như tôi đang ở trong một tình huống rất giống với bạn, cũng là trò chơi bài, cũng là người địa phương (không phải Thụy Sĩ) và tôi cũng đang cố gắng hiểu tôi bắt đầu từ đâu. Một điều mà tôi thấy thú vị là một người tiến hóa, nơi bạn gán DNA cho người chơi ảo và sau đó đặt chúng vào nhau. Bạn giết những kẻ lỏng lẻo và bạn gây giống người chiến thắng. Kết quả có thể là các bot AI khá tốt. Tôi vẫn chưa tìm ra cách điều chỉnh ứng dụng này của Tempiceuro.com/puerto-rico-evolver cho trò chơi bài của mình nhưng tôi nghĩ điều này là có thể.
Andrew Savinykh

Câu trả lời:


11

Ví dụ của bạn nghe giống như Bridge . Các hệ thống chơi cầu hàng đầu sử dụng các phương pháp Monte Carlo để chọn di chuyển. Ở một cấp độ cao:

  • Xác định xác suất của mỗi thẻ trong một bàn tay nhất định. Bạn biết chắc chắn thẻ nào trong tay bạn và thẻ nào đã được chơi. Xác định xác suất của tất cả các thẻ khác dựa trên các thẻ đã được chơi và có thể là giá thầu của người chơi nếu có đấu thầu liên quan. Để bắt đầu, bạn chỉ cần sử dụng xác suất ngây thơ và bằng nhau rằng thẻ nằm trong tay một số người chơi.
  • Bây giờ, hãy chạy qua càng nhiều game "ảo" càng tốt. Mô phỏng việc chơi bài từ tay của bạn và sau đó xác định câu trả lời của đối thủ bằng cách sử dụng các quy tắc của trò chơi và xác suất của bạn. Đối với mỗi trò chơi ảo, sử dụng xác suất của bạn để gán thẻ cho người chơi và sau đó nhanh chóng mô phỏng trò chơi. Giả sử mỗi người chơi sẽ chơi hết khả năng của họ. Bạn biết tất cả các thẻ trong trò chơi ảo của mình để bạn có thể khiến mỗi người chơi chơi hoàn hảo.
  • Khi bạn có một mẫu chắc chắn (hoặc bạn hết thời gian), hãy chọn động thái hợp pháp mang lại cho bạn kết quả tốt nhất thường xuyên nhất.

Một khi bạn có được một cái gì đó hoạt động, bạn có thể thêm tất cả các loại chiến lược phong phú. Chẳng hạn, thay đổi xác suất của bạn dựa trên các lần chơi lịch sử của người chơi, thay đổi xác suất dựa trên phong cách của người chơi (thụ động, thận trọng, hung hăng) hoặc thậm chí xem xét tác động của những người chơi cụ thể chơi cùng nhau.


Chỉnh sửa theo nhận xét của LaurentG:

Cuối cùng, bạn có thể muốn loại bỏ ý tưởng chơi hoàn hảo cho tất cả người chơi và thay thế một cái gì đó thực tế hơn. Về mặt khái niệm, tách biệt các xác suất để một thẻ nằm trong tay ai đó (phân phối thẻ) khỏi xác suất người chơi chơi một thẻ hợp pháp nhất định trong một ván bài (lựa chọn thẻ).

Lựa chọn thẻ đã chín muồi cho việc học. Nếu bạn theo dõi các lần chơi trên các trò chơi, bạn có thể tìm hiểu cách một người chơi cụ thể hoặc người chơi nói chung, có xu hướng chơi dựa trên các thẻ trong tay họ và các thẻ đã được chơi. Bạn thậm chí có thể nhận được ưa thích và mô hình các giả định của họ về các thẻ ẩn từ chúng.

Ngoài ra còn có cơ hội học tập để phân phối thẻ. Giá thầu trước đây của người chơi và lựa chọn thẻ trong tay có thể tiết lộ "thông báo" về những gì ẩn trong tay họ. Bạn có thể sử dụng dữ liệu lịch sử để điều chỉnh xác suất khi xây dựng từng trò chơi ảo.


Cảm ơn bạn đã trả lời thú vị của bạn. Bạn nói đúng, trò chơi chia sẻ một vài quy tắc với Bridge. Theo tôi hiểu, AI của bạn sẽ không tốt hơn những gì bạn đã mã hóa. Có cách nào để sử dụng phương pháp Monte Carlo và khiến AI học hỏi không? Có thể chỉ định xác suất cho mỗi thẻ bằng cách sử dụng các sự kiện trong quá khứ (của tất cả các trò chơi trước đó) không?
LaurentG

Bạn chắc chắn có thể làm cho AI học hỏi. Bí quyết sẽ là tách các xác suất để một thẻ nằm trong một tay cụ thể với xác suất người chơi chơi một thẻ hợp pháp nhất định một khi nó nằm trong tay họ. Tôi sẽ giải thích ở trên.
Corbin ngày

6

Một trường hợp kinh nghiệm cá nhân gần đây:

Bản thân tôi đã làm việc với một trò chơi bài (Bisca, một trò chơi Bồ Đào Nha 2 người) và tôi đã đạt được kết quả tốt khi sử dụng các phương pháp Monte Carlo, đặc biệt là sử dụng thuật toán Tìm kiếm thông tin gần đây của Monte Carlo Tree (ISMCTS, được mô tả với ví dụ mã nguồn trong Python tại http://www.aifactory.co.uk/newsletter/2013_01_reduce_burden.htmlm ).

Nó chơi hợp lý tốt, với di chuyển không chính xác, chỉ với kiến ​​thức về các quy tắc trò chơi. Tôi hiện đang cố gắng tìm kiếm nó, để có thể cải thiện nó, vì theo thông tin tôi đã đọc về nó (và MCTS "cha mẹ" của nó), có thể tăng cường chơi trò chơi của nó với heuristic ( http: // www .orangehelbest.com / ed / tờ / aiide13.pdf ) và suy luận thẻ đối thủ.


1
bài này khá khó đọc (tường văn bản). Bạn có phiền chỉnh sửa ing nó thành một hình dạng tốt hơn?
gnat

cảm ơn câu trả lời từ một người có kinh nghiệm thực tế về vấn đề này. liên kết tuyệt vời!
Luben

3

Tôi nghĩ rằng nó phụ thuộc vào các quy tắc của trò chơi.

Đây là những gì tôi hiểu từ câu hỏi của bạn:

  • Trò chơi được chơi theo vòng, với mỗi người chơi chơi một thẻ mỗi vòng
  • Người chơi đi trước có thể chơi bất kỳ thẻ nào anh ta muốn
  • Người chơi đi thứ hai chỉ có thể chơi một số thẻ nhất định, tùy thuộc vào những gì được chơi trước
  • Người chơi chiến thắng vòng đầu tiên sẽ đi vào vòng tiếp theo
  • Tất cả các thẻ được phân phối trước vòng đầu tiên

Giả định:

  • Với kiến ​​thức đầy đủ về các thẻ của người chơi khác, người chơi đi trước có thể quyết định, đối với mỗi thẻ của mình, liệu một thẻ có chiến thắng vòng đấu hay không (người chơi đầu tiên có thể chơi một thẻ thắng chắc chắn)
  • Nếu cả thẻ A và B đều thắng khi chơi vòng đầu tiên, chơi A vòng này (và thắng) thì chơi B vòng sau có nghĩa là B cũng sẽ thắng (thẻ không mất giá trị)
  • Với kiến ​​thức đầy đủ về các thẻ của người chơi khác, người chơi thứ hai có thể quyết định xem một thẻ có thể thắng được vòng này hay không, nhưng sẽ thua nếu chơi đầu tiên ở vòng sau (chọn thẻ thắng tệ nhất)

Ví dụ trò chơi tuân theo các quy tắc sau:

Người chơi đầu tiên chơi bài. Người chơi thứ hai phải chơi một lá bài cùng bộ hoặc thua. Nếu bộ phù hợp, thẻ cao nhất sẽ thắng.

Bây giờ, trò chơi này được quyết định bởi sự may mắn của trận hòa và bằng cách có thể ghi nhớ những lá bài nào đã được chơi để biết tay của đối thủ của bạn.
Trong tình huống này, tôi sẽ làm cho AI chỉ nhớ một phần những thẻ đã được chơi, tức là loại bỏ ngẫu nhiên khỏi danh sách đã nhớ một số phần trăm các thẻ đã chơi (số thấp hơn = AI có độ khó cao hơn), nhưng không quan trọng như Aces hay Kings. Bằng cách này, chẳng hạn, AI sẽ biết an toàn khi chơi Queen of Hearts vì anh ta sẽ nhớ đối thủ không có Ace hay King, nhưng sẽ phải tính xác suất nếu anh ta muốn chơi 10, bởi vì anh ta có thể không nhớ nếu Jack vẫn còn chơi.
Điều này bắt chước khoảng chú ý của con người.

TL; DR
Giới hạn số lượng AI biết để các quyết định của nó không hoàn hảo, chỉ đủ tốt.


Cảm ơn câu trả lời của bạn. Nhưng như đã nói trong câu hỏi, không có may mắn / không có sự ngẫu nhiên sau khi các thẻ được phân phối. Và một người chơi không biết thẻ của những người chơi khác. Anh ta phải đưa ra các giả định bằng cách sử dụng các thẻ đã chơi và một số "quy tắc".
LaurentG

2
Giống như ý tưởng loại bỏ ngẫu nhiên thẻ ghi nhớ. Điều này đưa ra một gợi ý về sự phát triển của các cấp độ như dễ, trung bình và khó.
superM
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.