Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我已经用Java编写了minimax算法。然而,它给出了错误的最佳举措。有什么建议吗? public int minimax(板b){//player1是AI //深度+=10; System.out.println(“当前板为”); System.out.println(“现在在这个板上玩的是”+b.whoseTurn.getId()); b、 显示(); if((GameController.haswen(b.whoseTurn,b)) ||(GameController.Haswen(b.whoseNotInTurn,b)) ||(GameController.isDraw(b.whoseTurn,b,b.whoseNotInTurn)){ 返回(b); } ArrayList possibleMoves=生成移动(b); 如果(b.whoseTurn.getId()=“AI”){ 最佳分数=-1000000; 对于(int i=0;i最佳分数){ 最佳分数=分数; 最佳移动=移动; System.out.println(“最大移动量为“+Move+”最佳分数为“+score”); } 取消移动(b.myBoard.get(move)); } 返回最佳移动; } 否则{ 最佳分数=1000000; 对于(int i=0;i_Java_Artificial Intelligence_Minimax - Fatal编程技术网

我已经用Java编写了minimax算法。然而,它给出了错误的最佳举措。有什么建议吗? public int minimax(板b){//player1是AI //深度+=10; System.out.println(“当前板为”); System.out.println(“现在在这个板上玩的是”+b.whoseTurn.getId()); b、 显示(); if((GameController.haswen(b.whoseTurn,b)) ||(GameController.Haswen(b.whoseNotInTurn,b)) ||(GameController.isDraw(b.whoseTurn,b,b.whoseNotInTurn)){ 返回(b); } ArrayList possibleMoves=生成移动(b); 如果(b.whoseTurn.getId()=“AI”){ 最佳分数=-1000000; 对于(int i=0;i最佳分数){ 最佳分数=分数; 最佳移动=移动; System.out.println(“最大移动量为“+Move+”最佳分数为“+score”); } 取消移动(b.myBoard.get(move)); } 返回最佳移动; } 否则{ 最佳分数=1000000; 对于(int i=0;i

我已经用Java编写了minimax算法。然而,它给出了错误的最佳举措。有什么建议吗? public int minimax(板b){//player1是AI //深度+=10; System.out.println(“当前板为”); System.out.println(“现在在这个板上玩的是”+b.whoseTurn.getId()); b、 显示(); if((GameController.haswen(b.whoseTurn,b)) ||(GameController.Haswen(b.whoseNotInTurn,b)) ||(GameController.isDraw(b.whoseTurn,b,b.whoseNotInTurn)){ 返回(b); } ArrayList possibleMoves=生成移动(b); 如果(b.whoseTurn.getId()=“AI”){ 最佳分数=-1000000; 对于(int i=0;i最佳分数){ 最佳分数=分数; 最佳移动=移动; System.out.println(“最大移动量为“+Move+”最佳分数为“+score”); } 取消移动(b.myBoard.get(move)); } 返回最佳移动; } 否则{ 最佳分数=1000000; 对于(int i=0;i,java,artificial-intelligence,minimax,Java,Artificial Intelligence,Minimax,这里哪里出错了?是指向整个代码的链接。让我们试试这个: 您返回评估(b)在递归结束时获得分数,这很好。但是上面所有的递归级别都将返回bestMove不是吗?因此,你在递归中丢失了你的bestScore,因为你没有将它正确地传播到顶部。它做了什么不应该做的事?代码转储不是最好的方法问题。此代码有什么问题?如果您将代码示例分离到导致问题的部分,这会有所帮助。如果我们不需要其他类就可以删除并运行它,这也会有所帮助。请参见b.whoseTurn.getId()==“AI”应该是b.whoseTurn.g

这里哪里出错了?是指向整个代码的链接。

让我们试试这个:
返回评估(b)
在递归结束时获得分数,这很好。但是上面所有的递归级别都将返回
bestMove
不是吗?因此,你在递归中丢失了你的
bestScore
,因为你没有将它正确地传播到顶部。

它做了什么不应该做的事?代码转储不是最好的方法问题。此代码有什么问题?如果您将代码示例分离到导致问题的部分,这会有所帮助。如果我们不需要其他类就可以删除并运行它,这也会有所帮助。请参见
b.whoseTurn.getId()==“AI”
应该是
b.whoseTurn.getId().equals(“AI”)
I modified whoseTurn.getId().equals(“AI”)。它在某些情况下有效。但是,代码并不是在所有情况下都有效。我到底应该在什么时候交换玩家?我在玩一个移动并撤销它后交换玩家。谢谢你的帮助!是的。是的。有什么可能的出路?我已经为此绞尽脑汁很长一段时间了。我试着打印bestScore自始至终。这似乎也给出了一个错误的答案。逻辑有问题吗?请务必让我知道。我现在会返回bestScore而不是bestMove,并尝试像您那样打印它,以查看它是否正常。修复此问题,然后通过在您的board对象中设置它来获得bestMove。例如,不要返回它。我试图找出答案。B但没有成功。你认为我可能在哪里出错?我不能为你真正测试,你应该提供更多细节!评估中的可变深度是什么?看起来随着时间的推移不会改变。
public  int minimax(Board b) { //player1 is AI

  //depth+=10;
  System.out.println("Current board is  " );
  System.out.println("To play now on this board is  " + b.whoseTurn.getId() );
  b.display();
  if( (GameController.hasWon(b.whoseTurn,b)) 
    || (GameController.hasWon(b.whoseNotInTurn, b)) 
    || (GameController.isDraw(b.whoseTurn,b,b.whoseNotInTurn))) {           
    return evaluate(b);     
  }
  ArrayList<Integer> possibleMoves = generateMoves(b);

  if(b.whoseTurn.getId() == "AI") {

    bestScore = -1000000;

    for(int i = 0; i < possibleMoves.size(); i++) {
      int move = possibleMoves.get(i);
      b.myBoard.get(move).setSymbol(b.whoseTurn.getSymbol());

      swapPlayers(b);
      score = minimax (b);      

      if(score > bestScore) {

        bestScore = score;
        bestMove = move;
        System.out.println("In maximum Move is " + move + "BESTScore is" + score);

      }
      unmakeMove(b.myBoard.get(move));

    }

    return bestMove;
  }
  else {
    bestScore = 1000000;
    for(int i = 0; i < possibleMoves.size(); i++) {
      int move = possibleMoves.get(i);
      b.myBoard.get(move).setSymbol(b.whoseTurn.getSymbol());

      swapPlayers(b);
      score = minimax(b);

      if(score < bestScore) {
        myMoves.add(move);
        bestScore = score;
        bestMove = move;
        System.out.println("In minimum Move is " + move + "Score is" + score);

      }
    unmakeMove(b.myBoard.get(move));

  }
  return bestMove;          
}