我已经用ai实现了一个井字游戏,但现在我面临一个问题,如何评价一个井字游戏?
也许一开始我会描述它应该如何运作:
问题在于2.有没有办法对"率"董事会?
我想说我不想让任何人给我写一个代码,只是为了帮助我找到算法或其他东西:)
感谢您的帮助!
编辑#1
好吧,我有一个极小极大的玩板,但如何评价许多板并选择哪个是最好的。也许我没有清楚地说出我想要的东西,所以我会表现出来。
e =空
* x | e | e e | o | e
* ---+---+--- ---+---+---
* x | e | e e | o | e
* ---+---+--- ---+---+---
* o | e | e x | x | e
现在,我对minimax算法的实现只是告诉我应该把我的标志放在哪里(让我们说o)但是我需要告诉我哪个板,所以如何使用它来评价整板选择哪个玩?
Minimax代码:
minimax : function(tempBoard,depth){
if (CheckForWinner(tempBoard) !== 0)
return score(tempBoard, depth);
depth+=1;
var scores = new Array();
var moves = new Array();
var availableMoves = Game.emptyCells(tempBoard);
var move, possibleGame, maxScore, maxScoreIndex, minScore,minScoreIndex;
for(var i=0; i < availableMoves.length; i++) {
move = availableMoves[i];
possibleGame = Game.getNewBoard(move,tempBoard);
scores.push(Ai.minimax(possibleGame, depth));
moves.push(move);
tempBoard = Game.undoMove(tempBoard, move);
}
if (Game.turn === "ai") {
maxScore = Math.max.apply(Math, scores);
maxScoreIndex = scores.indexOf(maxScore);
choice = moves[maxScoreIndex];
return scores[maxScoreIndex];
} else {
minScore = Math.min.apply(Math, scores);
minScoreIndex = scores.indexOf(minScore);
choice = moves[minScoreIndex];
return scores[minScoreIndex];
}
}
答案 0 :(得分:2)
可以使用Minimax算法完成Tic-tac-toe的移动评级。该算法旨在执行评估的移动,切换到对手的视角(反过来也试图做各自的最佳移动)并递归评估移动,直到其中一个玩家获胜(这意味着一片叶子游戏树已经到达了。)
尽管实现此算法的基本版本并不是非常困难,但理解该方法至关重要;注意人工智能&#39;基本上是假设用所有可能的动作玩整个游戏 - 它不是启发式算法而是精确算法。可以使用Alpha-Beta-Pruning对其进行细化,以备用游戏树中不需要进行评估的子树。
答案 1 :(得分:1)
以下是一个可以为评级板评分的公式:
value = (10 * x3 + 3 * x2 + x1) - (10 * o3 + 3 * o2 + o1)
其中:
N
x's
且没有o's
N
o's
且没有x's
这假定max-player
为X
。如果不是,你可以改变标志。