2012-06-14 100 views
6

我目前正在開發一款類似於66或Schnapsen的2人牌抽牌卡牌遊戲。基本上你需要通過贏得技巧來獲得積分,並且當包中有牌時,每個玩家都會在每輪結束後抽出一張牌。蒙特卡羅樹搜索或隨機卡牌遊戲的其他算法?

我正在編寫一個不會作弊的遊戲的良好AI,但是通過僅使用它在給定遊戲狀態下具有的信息來真正計算出最佳動作。我堅持決定哪種算法或邏輯最適合使用。 我決定不使用Alpha-Beta修剪等算法,因爲隱藏的信息太多,特別是在遊戲開始時。 我讀了很多有關蒙特卡羅樹搜索和相關UCT搜索的有趣的事情,但由於遊戲具有隨機元素,因此需要搜索的樹會在短時間內變得非常龐大。

哪種算法或方法最適合使用?

回答

1

MCTS肯定會更好。 無論您選擇哪一個,您都必須處理不完整的信息,這是這裏的核心問題。

1

Here是將UCT應用於Klondike Solitaire的鏈接。 MCTS是一個完美的解決問題的方法,因爲它可以很好地處理隨機性問題。

您可以查看紙張內部描述的稀疏方法,以限制樹的寬度。

+0

感謝您的鏈接,我不知道這篇論文!唯一不清楚的是我該如何處理遊戲狀態對象。一開始很明顯,因爲兩個玩家都有5張牌,所以初始玩家只有5個動作可供選擇。其他玩家可以用_deck size - 5_動作來回應。但在第一輪之後我不知道如何處理這些狀態。如果我是對的,那麼在第一輪之後,當雙方隊員從牌組中抽出牌時,獲勝牌手可以製作大小爲+4的先前未使用的牌動作。還是我的整個態度錯了? –

+0

我不知道遊戲到底如何。但是一個國家應該包含所有確定的信息。如果你只有一個帶有隱藏牌的牌堆,那麼狀態應該可能包含牌手和任何顯露的牌(即使被丟棄)。所以你知道哪些卡在堆棧上,並且可能在下一個繪製。行動是所有可能的行動。但正如在論文中一樣,你可以簡單地爲遊戲編寫一個模擬器(用C,Java編寫......),以某種方式產生可能的動作列表並跟蹤遊戲狀態。 – ziggystar