Как изменить минимаксную функцию, чтобы включить параметр глубины? - PullRequest
0 голосов
/ 18 ноября 2018

Я следую учебному пособию по созданию искусственного интеллекта (https://www.youtube.com/watch?v=P2TcQ3h0ipQ).). Включена функция для алгоритма минимакса. Мне было интересно, как можно изменить функцию минимакса (написано в JavaScript) нижечтобы алгоритм оценивал только определенное количество ходов вперед (т. е. глубину дерева)?

function minimax(newBoard, player) {
  var availSpots = emptySquares(newBoard);

  if (checkWin(newBoard, huPlayer)) {
    return {score: -10};
      } else if (checkWin(newBoard, aiPlayer)) {
    return {score: 10};
   } else if (availSpots.length === 0) {
    return {score: 0};
  }

  var moves = [];
  for (let i = 0; i < availSpots.length; i ++) {
    var move = {};
    move.index = newBoard[availSpots[i]];
    newBoard[availSpots[i]] = player;

    if (player === aiPlayer)
      move.score = minimax(newBoard, huPlayer).score;
    else
       move.score =  minimax(newBoard, aiPlayer).score;
    newBoard[availSpots[i]] = move.index;
    if ((player === aiPlayer && move.score === 10) || (player === huPlayer && move.score === -10))
      return move;
    else 
      moves.push(move);
  }

  let bestMove, bestScore;
  if (player === aiPlayer) {
    bestScore = -1000;
    for(let i = 0; i < moves.length; i++) {
      if (moves[i].score > bestScore) {
        bestScore = moves[i].score;
        bestMove = i;
      }
    }
  } else {
      bestScore = 1000;
      for(let i = 0; i < moves.length; i++) {
      if (moves[i].score < bestScore) {
        bestScore = moves[i].score;
        bestMove = i;
      }
    }
  }

  return moves[bestMove];
}
...