【发布时间】:2018-03-27 12:02:24
【问题描述】:
我正在为一个学校项目制作一个 AI 控制的 alpha-beta 算法,但我的算法非常不一致。有时它会成功阻止我的所有动作,有时它会忽略我的连续 3 个动作,如 here 所示。这怎么会发生?我该如何解决这个问题?
int alphaBeta(const State board, int alpha, int beta, const Player player, int depth)
{
//Max player = Player::O
//Min player = Player::X
std::vector<Move> possibleMoves = getMoves(board);
if(eval(board)==Player::X){return 9999-depth;} //Player X wins
else if(eval(board)==Player::O){return -9999+depth;} //Player O wins
else if(possibleMoves.size()==0){return 0;} //Tie
else{ //Zoek verder
depth++;
State nextBoard = board;
int result;
if(player==Player::O){
for (Move move: possibleMoves) {
nextBoard = doMove(nextBoard, move);
result = alphaBeta(nextBoard, alpha, beta, Player::X, depth);
if (result > alpha){
alpha = result;
if (depth == 1){
choice = move; //The actual move he will do
}
}
else if (alpha >= beta){
return alpha;
}
}
return alpha;
}
else{
for (Move move: possibleMoves) {
nextBoard = doMove(nextBoard, move);
result = alphaBeta(nextBoard, alpha, beta, Player::O, depth);
if (result < beta){
beta = result;
if (depth == 1){
choice = move;
}
}
else if (beta <= alpha){
return beta;
}
}
return beta;
}
}
}
【问题讨论】:
-
我建议您熟悉一下ClangFormat ;)
-
欢迎来到 StackOverflow。请按照您创建此帐户时的建议阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中并重现您描述的问题。
-
您发布的代码仅定义了一个函数并退出而不执行。没有尝试跟踪逻辑和数据流。请参阅这个可爱的 debug 博客寻求帮助。
-
哇,对不起。我会尽快解决的。
标签: c++ algorithm artificial-intelligence alpha-beta-pruning coderef