用于Java中TicTacToe AI的最简单的MiniMax算法

时间:2017-07-18 13:47:36

标签: java algorithm artificial-intelligence minimax

我试图掌握MiniMax算法,并已阅读过它。我最初的方法是实现一个简单的MiniMax算法,然后添加alpha-beta修剪。但这是我目前的代码:

public int miniMax(char[] node, int playerNum)
{
    int victor = checkWin(node); // returns 0 if game is ongoing, 1 for p1, 2 for p2, 3 for tie.
    if(victor != 0) //game over .
        return score(victor);   

    if(playerNum == 2) //AI
    {
        int bestVal = Integer.MIN_VALUE;
        int bestSpot = 0;
        for(int i = 0; i < node.length; i++)
        {
            if(node[i] != '-')
                continue;
            node[i] = getSymbol(playerNum);
            int value = miniMax(node, 1); 
            if(value > bestVal)
            {
                bestVal = value;
                bestSpot = i;
            }

            node[i] = '-';
        }
        return bestSpot;
    }
    else
    {
        int bestVal = Integer.MAX_VALUE;
        int bestSpot = 0;
        for(int i = 0; i < node.length; i++)
        {
            if(node[i] != '-')
                continue;
            node[i] = getSymbol(playerNum);
            int value = miniMax(node, 2); 
            if(value < bestVal)
            {
                bestVal = value;
                bestSpot = i;
            }
            node[i] = '-';
        }
        return bestSpot;
    }
}

我的分数功能

private int Score(int gameState)
{
    if(gameState ==2) //O wins.
        return 10;
    else if(gameState==1) //X wins
        return -10;
    return 0;
}

现在,我有一个工作的人工智能试图阻止我的行动和胜利,但有时它会做出非智能选择,例如,如果我从控制台读取的输入是6,7,8,那么这就是我得到的输出订购。它并不试图阻止我的胜利。但在其他情况下确实如此。

| O | O | |

| | | |

| X | X | X |

在我的第二次尝试中,我尝试了4,3并阻止了我的获胜动作。

| | O | |

| X | X | O |

| | | |

我想知道是否有人可以指出我的实施有什么问题?

1 个答案:

答案 0 :(得分:4)

所示示例的代码行为是正确的!

那么为什么以下位置的威胁不被阻止?为什么程序播放1而不是6?

O . .                                    O 1 2
. . .     numbering available moves:     3 4 5
X X .                                    X X 6

这是因为如果游戏在完美游戏中丢失,程序就会播放第一个可用的游戏。

该算法只关心输赢,而不是关注多少动作。

查看威胁被阻止后会发生什么:

O . .     O . .
. . .     . X .     and X wins on his next move
X X O     X X O