Минимаксный алгоритм Tic Tac Toe, возвращающий пустые доски

Я боролся с реализацией алгоритма miniMax для ИИ Tic Tac Toe уже пару дней. Прямо сейчас проблема заключается в том, что я получаю пустую доску на входе returnBoard при вызове функции minimax (). Я знаю, что мой алгоритм проходит через серию досок, потому что я распечатывал детей, когда получил их, и я вижу, что компьютер делает ходы и выставляет счета доскам. Какие-либо предложения?

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 < children.size(); ++i)
{
board curr = children[i];
//children.pop_back();

board dummyBoard;
int score = curr.miniMax(alpha, beta, dummyBoard);

if (computerTurn)
{
if (beta > score)
{
beta = score;
childWithMaximum = curr;
if (alpha >= beta) break;
}
}

else
{
if (alpha < score)
{
alpha = score;
childWithMaximum = curr;
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;
}

Вот это все работоспособное содержимое.

0

Решение

*this = returnedBoard;

Это, вероятно, ваша проблема. Вам следует никогда назначить на *this,

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]