2011-03-26 77 views
1

我有兩名球員,我想模擬他們之間的比賽。兩者都有一些屬性(權力,智力......)和不同的行爲。某些行動的結果是基於屬性值和一些運氣因素。如何模擬兩位玩家之間的戰鬥?

算法:

  • 構建的所有可能的行動博弈樹爲雙方球員
    • 博弈樹大概將有限的深度
    • 每個級別都屬於不同的球員
  • 在葉節點處使用一些啓發式技術來找出必須進行移動的玩家獲勝的概率
  • 傳播概率(象極小算法一樣)
  • 選擇具有最高概率的舉動
  • 繼續在這個算法

所以開始時,基本上這是極大極小算法。我有幾個問題:

  1. 如何把運氣因素考慮在內?
  2. 當我做出一個動作時,是否必須重新運行整個算法? (建立+1深度和新根節點的樹,計算新的概率......)
  3. 任何其他的模擬戰鬥的想法?

謝謝。

+0

那是戰鬥或一門功課? – 2011-03-26 20:32:07

回答

2

雖然通常你的算法是有道理的,沒有辦法,我們可以保證,這個算法是最好的一個。例如,讓我們想象一下兩場比賽:

  1. 在第一場比賽中每個玩家都有2個操作:火一把槍罷工用劍。在這個遊戲中,每一步都不會影響其他步驟,因此在此構建一個移動樹不會有任何意義。每個玩家只需選擇武器並繼續射擊/打擊,並用盾牌或上面的大喊「'直到死亡或贏。
  2. 第二局還有第三個動作 - 偷取對手的盾牌。在這種情況下,移動樹會更有意義,因爲很明顯,如果您決定盜取敵方盾牌,那麼在用劍擊打之前偷走它會更有意義。

所以無論你需要這個移動樹或不高度取決於你的遊戲規則。

關於運氣因素,因爲我看到的是是否包括它影響到舉動樹與否的主要選擇。這取決於運氣因素是否以相同的方式影響每個動作。如果是真的,那麼運氣因素可以在計算舉動樹可以省略,然後應用時,你會選擇計算的行動結果。否則,如果運氣因素影響不同的方式不同的動作(例如甚至徹底的失敗者能夠拍攝的敵人有槍,但殺用勺子技能需要很好的運氣),那麼運氣因素,應考慮在計算中招概率樹。

無論您需要或每個節點取決於您是否可以預測100%的選擇行動的結果後不重新計算整個樹。例如在國際象棋中,你可以預測,如果你決定移動一個棋子,那麼這個棋子肯定會移動到你決定的位置。這允許你在每一步中選擇移動樹中的分支,併爲其中的每個場景計算一個移動,而不是從無到有重新計算完整的樹。但是,如果玩家可以決定用槍射擊,但由於他不吉利的一天他會用自己的腿射擊,所以這是不適用的。

3

你應該看看蒙特卡洛樹搜索,它的聲音,如果將適合在大您的問題。

不是使用啓發式,利用在每個分支隨機玩家展開樹之前,它運行一個完整的遊戲。關於這一點的好處是,你實際上正在構建一個概率樹,並且你不必將樹擴展到最後,或者像MinMax一樣使用啓發式方法來截斷。

MCTS也是在遊戲GO在玩未知的遊戲規則,目前最好的方法,目前最好的。爲了獲得額外的效果,可以使用一些有限狀態機代理而不是隨機播放器來使概率更加準確。你也可以通過使用機器學習派生啓發式方法,通過使用跳過某些分支的決策器來減少分支因子。 (但是,這是你最後會做的事情,以提高技術的速度)

如果你可以做MinMax,你可以做MCTS沒有太多麻煩:)和MCTS可以發揮比MinMax以往任何時候都要複雜得多的遊戲,因爲它比較複雜性大大降低。 (好,如果你打算擴大遊戲規則汽車無)

如果你有興趣看看這裏:

http://www.aaai.org/Papers/AIIDE/2008/AIIDE08-036.pdf

是的,你必須在每一個動作,每做這個播放器。所以MinMax和MCTS都會很慢;所有基於遊戲樹的技術都很慢。

使用MinMax,您可以保留一些樹;移動到您的新狀態的分支,並刪除其父節點和連接到它的子樹。然後在剩下的子樹中展開一個深度。但這是猜測;我以前從來沒有時間這樣做:)(然而,您將保留概率計算中的錯誤)

關於這些技術的好處是,當您構建它們時,它們就可以工作。機器學習技術,運行速度快了很多,但需要時間,如果之前使用的培訓不是幾天;)

相關問題