0

アルファベータ剪定を使用して、三目並べのミニマックス アルゴリズムを実装しようとしています。現在、プログラムを実行していますが、機能していないようです。実行するたびに、すべてのマスにゴミが入力されているようです。ミニマックス関数がボードの状態を取り、その状態を変更して、終了時にボードの状態に次善の動きが含まれるように実装しました。次に、「this」を変更されたボードと等しくなるように設定します。ミニマックスアルゴリズムの私の関数は次のとおりです。

void board::getBestMove() {
  board returnBoard;
  miniMax(INT_MIN + 1, INT_MAX -1, returnBoard);

  *this = returnBoard;
}

int board::miniMax(int alpha, int beta, board childWithMaximum) {
  if (checkDone())
    return boardScore();

  vector<board> children = getChildren();
  for (int i = 0; i < 9; ++i) {
    if(children.empty()) break;

    board curr = children.back();
    if (curr.firstMoveMade) { // not an empty board
      board dummyBoard;
      int score = curr.miniMax(alpha, beta, dummyBoard);

      if (computerTurn && (beta > score)) {
        beta = score;
        childWithMaximum = *this;
        if (alpha >= beta) break;
      } else if (alpha < score) {
        alpha = score;
        childWithMaximum = *this;
        if (alpha >= beta) break;
      }
    }
  }
  return computerTurn? alpha : beta;
}

vector<board> board::getChildren() {
  vector<board> children;

  for (int i = 0; i < 3; ++i) {
    for (int j = 0; j < 3; ++j) {
      if (getPosition(i, j) == '*') { //move not made here
        board moveMade(*this);
        moveMade.setPosition(i, j);
        children.push_back(moveMade);
      }
    }
  }

  return children;
}

そして、誰かがそれを実行したい場合は、ここに私の完全なファイルがあります:

.cpp : http://pastebin.com/ydG7RFRX .h : http://pastebin.com/94mDdy7x

4

1 に答える 1