Я пытаюсь реализовать минимаксный алгоритм для tic tac toe с обрезкой альфа-бета. Прямо сейчас у меня работает программа, но она, похоже, не работает. Всякий раз, когда я запускаю его, он, кажется, вводит мусор во все квадраты. Я реализовал его так, чтобы моя функция минимакс принимала состояние платы и изменяла это состояние, так что, когда оно будет закончено, состояние платы будет содержать следующий лучший ход. Затем я устанавливаю «это» равным модифицированной доске. Вот мои функции для минимаксном алгоритма:Алгоритм MiniMax для отказа Tic Tac Toe
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
Я установил вмятины на свой код и массировать его в более компактный формат. Пожалуйста, сделайте это самостоятельно до публикации в следующий раз. – Richard
Предположительно здесь будет интересен конструктор класса платы. Пожалуйста, включите его. – Richard
Конструктор классов входит в паштет. Спасибо за помощь! Это мой первый вопрос. – gacharya