2017-07-18 17 views
1

私はMiniMaxアルゴリズムの理解を得ようとしていて、それを読み上げました。私の最初のアプローチは、単純なMiniMaxアルゴリズムを実装し、次にアルファベータプルーニングを追加することでした。しかし、これは私の現在のコードです:JavaのTicTacToe AIのための最も簡単なMiniMaxアルゴリズム

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; 
} 

は今、私は、しかし、時にはそれが非インテリジェントな選択をしている、私の移動を阻止し、勝つためにしようと取り組んでAIを持っています例えば、コンソールからの入力がこの順に6,7,8であれば、これは私が得る出力です。私の勝利を阻止しようとはしません。しかし、他の場合にはそうです。


| O | O | |


| | | |


| X | X | X |


私の2回目の試行では、私は4,3を試して勝利の動きをブロックしました。


| | O | |


| X | X | O |


| | | |


私の実装で何が間違っていると指摘できましたか?

+1

あなたはおそらくhttp://codereview.stackexchange.comでより多くのアドバイスを取得します – Chris

答えて

3

示された例のコードの動作は正しいです!

なぜ、次のポジションの脅威がブロックされないのですか?なぜプログラムは6の代わりに1を動かすのですか?

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 
関連する問題