2009-02-08 13 views
26

Điều gì sẽ là chiến lược để viết một đối thủ máy tính tốt cho một trò chơi bài? Hầu hết các trò chơi bài là trò chơi thông tin không đầy đủ, vì vậy chỉ cần lập bản đồ và đi ngang qua cây trò chơi như một người có thể làm với trò chơi trên bảng dường như không quá hứa hẹn.Bất kỳ chiến lược AI nào về trò chơi thẻ tốt?

Có thể ai đó có thể theo dõi những thẻ đang mở trong trò chơi (ngay khi chúng được tiết lộ) và gán xác suất cho các sự kiện nhất định (ví dụ: đối thủ vẫn có 2 thẻ câu lạc bộ).

Có ai có kinh nghiệm với điều này không? Các liên kết và hướng dẫn được đánh giá cao.

+1

Tính đếm - nếu [đủ tốt cho MIT] (http://www.mitcardcounting.com/), đủ tốt cho bạn Có thể – new123456

Trả lời

5

Những gì bạn mô tả bằng cách sử dụng xác suất về cơ bản là cách AI AI (hoặc một chuyên gia về poker của con người) hoạt động. Đã có một chuỗi liên tục trên Coding the Wheel về việc tạo một Poker Bot mà bạn có thể quan tâm đến việc đọc.

3

Một nội dung tốt khác là trang web http://aigamedev.com/. Nó rất chi tiết và đi vào các ví dụ mã nơi nó được áp dụng.

1

câu trả lời cụ thể: triển khai min-max algorithm với các sự kiện ngẫu nhiên như bản vẽ thẻ có chứa khả năng chống thay vì quyết định khó.

+0

Liên kết này có thể hữu ích: https://en.wikipedia.org/wiki/Expectiminimax_tree –

0

sử dụng ý thức chung: cho phép máy tính chơi theo cùng các quy tắc mà con người (logic) và thay đổi mức độ khó bằng cách thay đổi các thông số như chất lượng bộ nhớ AI.

Tôi đã triển khai memory game có thể là một trường hợp đơn giản so với những gì bạn đang tìm kiếm, nhưng nó hoạt động khá tốt.

3

Một lần nữa đó là blog, nhưng một điều thú vị trong lĩnh vực này là Computer Programming and Magic: The Gathering. Nếu không có gì khác đáng chú ý vì lập trình rất phức tạp, MTG có biển quy tắc cho thẻ và vì tác giả thực sự đã hoàn thành phiên bản đầu tiên của chương trình ba năm trước. Tấn các dự án trò chơi không còn xa hơn giai đoạn lập kế hoạch.

Dự án mà anh mô tả trong blog của mình là nguồn mở để bạn có thể xem liệu có điều gì thú vị với bạn ở đó không và anh ấy rất sung mãn về việc đăng lên blog của mình.

1

Đại học Alberta có một chương trình chơi Poker có tên là Polaris cạnh tranh với các chuyên gia trong các giải đấu. web site của họ có rất nhiều thông tin.

0

Bạn đang đi ngang qua cây trò chơi '' sẽ không hoạt động vì bạn không có đủ thông tin nhưng nếu bạn tạo ra một số cây trò chơi tiềm năng và xem tùy chọn nào có nhiều khả năng dẫn đến kết quả tốt hơn thì bạn sẽ có một AI.

Nếu bạn có thời gian bạn có thể làm nó một cách đầy đủ và tạo ra mọi kịch bản có thể nhưng thực tế bạn không có 10mins để chơi một thẻ vì vậy chỉ cần làm một phần nhỏ của toàn bộ không gian.

Tôi đã viết một bot poker đã làm điều này và nó đã chơi một trò chơi ok nhưng tôi đã mất hứng thú với nó trước khi tôi có xung quanh để xử lý các hàm ý vị trí để nó không bao giờ mạnh mẽ.

+0

Mô tả của bạn rất giống với kỹ thuật "Tìm kiếm cây Monte-Carlo" –

0

Nếu bạn không có bot hiệu quả nhất, tôi sẽ sử dụng một số ngôn ngữ logic. Và nó nhận được chậm hơn và chậm hơn càng chung chung bạn làm cho ngôn ngữ, nhưng có thể là một sự khởi đầu.

Yếu tố chính là xác định các chiến lược mà bạn quan tâm và lập mô hình chiến lược này bằng ngôn ngữ logic của bạn.

Nếu bạn đang nghĩ trong một trò chơi đoán, ví dụ, bạn có thể có hai chiến lược:

strategy-1 guess the card you think is the most likely; or 

strategy-2 among the cards that are the most likely, guess the card that 

my opponent believes to be the most likely. 

Bây giờ vấn đề của bạn là xác định các chiến lược trong một ngôn ngữ chính thức mà bạn có thể giải thích (bạn cần một âm thanh ngôn ngữ).

Thông thường, một ngôn ngữ cho logic như vậy sẽ có thể thể hiện xác suất cơ bản, ít nhất. Ví dụ một ngôn ngữ nhất định bằng các hình thức sau đây:

A = c | -A | A v A | A -> A | P(A) >= r | P(A) >= P(A) | \forall c . A(c) 

cho ra hợp lý giữa 0 và 1. Đọc P (c)> = r là 'các cầu thủ tin rằng đối thủ có thẻ c với xác suất ít nhất r. '

Ví dụ, chiến lược-1 trông giống như

Guess card C only if holds that 
\forall C'. P(C) >= P(C') . 

chiến lược-2 trông giống như

Guess card C only if holds that 
[\forall C'. P(C) >= P(C')]^[-\forall C''. P'(C'') > P'(C)] 

(P '(c) là xác suất bởi đối thủ của tôi được phân công).

Nếu chiến lược của bạn được cho bởi CHIẾN LƯỢC thức chức năng của bạn cho hành động sẽ được chỉ đơn giản là yêu cầu cho một thẻ có thể đáp ứng các chiến lược:

act gameState = take 1 [c : c |= STRATEGY] 

Ngôn ngữ này mà tôi đã làm ví dụ là không biểu cảm đủ để thể hiện vấn đề ẩn giấu loại của bạn (ví dụ: chiến lược cực kỳ quan trọng trong các trò chơi như Poker hoặc HearthStone). Đối với chiến lược với một số phần mở rộng sẽ là cần thiết.

Một tiện ích phổ biến khác sẽ dành cho các nhà khai thác động lực để bạn có thể thể hiện các chiến lược như 'sau khi thẻ mạnh nhất bị đánh bại, tôi giữ bảng.'

Khi nhận xét của bạn về 'bản nhạc nào đang mở,' bị giới hạn theo nghĩa là bạn không cân nhắc những gì đối thủ đang nghĩ đến vì hành động của bạn. Chiến lược-2 là một ví dụ về cách cải thiện máy tính với niềm tin bậc cao hơn.

Đối với trò chơi đoán, tôi đề nghị giấy gọi là Logic of Pit từ Ditmarsch. (http://link.springer.com/article/10.1007/s11229-005-4331-5) (nó không thực hiện một AI, chỉ cần thể hiện trò chơi gọi là PIT. Tôi không nghĩ rằng nó có giá trị để trả tiền cho nó. Nếu bạn có thể nhận được miễn phí nó có giá trị nó. Có lẽ bạn có thể tìm luận án của mình, thay vào đó miễn phí.)

Tôi rất muốn viết một bài báo trên HearthStone nhưng tôi không bao giờ tìm thấy thời gian: (