Tic-tac-toe评估板算法

时间:2016-02-12 07:55:35

标签: algorithm artificial-intelligence tic-tac-toe rate

我已经用ai实现了一个井字游戏,但现在我面临一个问题,如何评价一个井字游戏?

也许一开始我会描述它应该如何运作:

  1. 我们有n个tic-tac-toe游戏板(有不同的变体)
  2. 我们的ai应评价哪个棋盘最佳移动/最差对手
  3. Ai通过minimax算法计算移动(完成)
  4. 问题在于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];
        }
    }
    

2 个答案:

答案 0 :(得分:2)

可以使用Minimax算法完成Tic-tac-toe的移动评级。该算法旨在执行评估的移动,切换到对手的视角(反过来也试图做各自的最佳移动)并递归评估移动,直到其中一个玩家获胜(这意味着一片叶子游戏树已经到达了。)

尽管实现此算法的基本版本并不是非常困难,但理解该方法至关重要;注意人工智能&#39;基本上是假设用所有可能的动作玩整个游戏 - 它不是启发式算法而是精确算法。可以使用Alpha-Beta-Pruning对其进行细化,以备用游戏树中不需要进行评估的子树。

答案 1 :(得分:1)

以下是一个可以为评级板评分的公式:

value = (10 * x3 + 3 * x2 + x1) - (10 * o3 + 3 * o2 + o1)

其中:

  • xN =&gt;其上有N x's且没有o's
  • 的行数/列数/对角线数
  • oN =&gt;其上有N o's且没有x's
  • 的行数/列数/对角线数

这假定max-playerX。如果不是,你可以改变标志。