我想在Java中寫一個小AI算法來實現miniMax算法。MiniMax的實現
這個遊戲基於雙人遊戲,其中每個玩家每回合移動一個棋子,每個棋盤位置導致每個玩家都有一個得分。玩家X的位置的「品質」通過從玩家X的該位置的得分中減去對手的得分來評估。每一步都用一個整數表示(即,通過輸入1來移動一個,通過輸入2等來移動兩個)
我知道miniMax應該使用遞歸來實現。目前我有:
一個evaluate()
方法,它需要參數代表板狀態的對象(即「BoardState」對象和布爾值稱爲「最大」(簽名將是評估(BoardState myBoard,布爾值max ))
當玩家X回合時,最大值爲true。給定一個棋盤位置,它將評估所有可能的移動並返回對玩家X最有利的移動。如果是對手的回合,max將爲假,並且該方法將返回對於玩家X最有利的移動(即:對玩家y最有利)
然而,我是havi編寫實際的miniMax
方法存在困難。我的一般結構是這樣的:
public int miniMax(GameState myGameState, int depth)
由此我提交了最初的gameState和我希望它查看的「深度」。
然後,我會是具有類似:
int finalMove = 0;
while(currentDepth < depth) {
GameState tmp = myGameState.copy();
int finalMove = evaluate(tmp, true or false);
iniMax(tmp.makeMove(finalMove));
}
return finalMove;
請問這聽起來像一個似是而非的實施?有什麼建議麼? :)
謝謝!
在遞歸,你寫調用自身的方法,但對於較小的問題大小。 while循環不是你想要的,你想多次調用'Evaluate'來減少深度。 – flup 2013-04-25 18:12:43
Ehm ...我不確定我是否明白你的意思:S – MrD 2013-04-25 18:13:13
當定義Evaluate時,可以用其他調用Evaluate的方式來定義它,但用較小的問題大小(少一個深度)。 http://stackoverflow.com/questions/717725/understanding-recursion – flup 2013-04-25 19:25:08