2012-11-09 49 views
3

我知道怎麼樣極小極大算法可以爲了玩遊戲完美的使用(在這種情況下,我在尋找類似的井字棋遊戲)創建一個非完美的遊戲算法

然而,我想知道如何創建一個非完美的算法,或者在不同的「技能水平」(簡單,中等,難度等)下的人工智能,以確保人類玩家實際上有機會擊敗。

回答

3

切斷各種深度的搜索來限制計算機的技能。更改評估功能以使計算機支持不同的策略。

非專業的人類玩家玩次優戰略和有限的戰術。這些大致對應於對遊戲狀態評估不佳以及預測未來能力有限。

關於隨機性,有一點是需要的,所以計算機並不總是犯同樣的錯誤,有時可能運氣好於或差於平常。爲此,只是不要總是選擇最佳路徑,而是選擇其中的分數加權。根據遊戲的結果,通過改進其評估函數,即更新其權重,您可以使AI更加有趣。通過這種方式,它可以通過玩,在有限的搜索深度學習更好的評估函數,就像人類一樣。

0

我在遊戲中使用的一種方式是利用隨機值。對於簡單的遊戲關卡,我會選擇一個隨機數字來選擇人類玩家。例如:

Easy level: only beat the human if you can randomly select a value less than 10 from the range of 1 to 100 

Medium level: beat the human if you can select a random value which is less than 50 from a range of 1 to 100 

Hard level: beat the human if you can randomly select a value less than 90 from a range of 1 to 100 

我肯定有更好的方法,但是這可能給你一個想法

0

的「簡單」的方法是用你的極小極大結果一起使用的閾值,建立從一組那些超過閾值的結果,然後隨機選擇程序的選擇/路徑。閾值越低,可能越容易對手。

我說可能是因爲即使是純粹的啞運氣也可以選擇最好的舉動,因此「初學者的運氣」。基本上,你正在尋找增加可能結果的熵(隨機性)。如果你想特意貶低計算機對手,你可以限制你的minmax算法的運行水平,或者爲算法的某些部分降低點數。

0

引擎發生人爲錯誤並不容易。減少搜索深度是一種直接的方法,但它有其侷限性。例如,縮小到一層的國際象棋引擎通常會進行檢查,而有價值的棋子仍然受到攻擊。當對手用反擊防守支票時,這兩件都是有效的。即使是沒有經驗的人也不太可能因爲這個錯誤而失敗。

也許你可以使用一些想法,從被稱爲方陣國際象棋引擎: http://phalanx.sourceforge.net/index.html

它是有一個複雜的難度級別(-e選項)的幾個開源引擎之一。如果我沒有弄錯,它會進行正常的搜索,但有時會忽略非明顯的移動。 evaluate.c包含一個稱爲blunder的功能,該功能評估移動是否可能被人忽視。