【发布时间】:2010-11-05 08:26:23
【问题描述】:
我希望看到一个没有递归的 alpha-beta 搜索(更准确地说是 negamax)的实现。我知道基本的想法 - 使用一个或多个堆栈来跟踪关卡,但是拥有一个真实的代码会节省我很多时间。
在 Java、C# 或 Javascript 中使用它是完美的,但 C/C++ 很好。
这是(简化的)递归代码:
function search(crtDepth, alpha, beta)
{
if (crtDepth == 0)
return eval(board);
var moves = generateMoves(board);
var crtMove;
var score = 200000;
var i;
while (i<moves.length)
{
crtMove = moves.moveList[i++];
doMove(board, crtMove);
score = -search(crtDepth-1, -beta, -alpha);
undoMove(board, crtMove);
if (score > alpha)
{
if (score >= beta)
return beta;
alpha = score;
}
}
return alpha;
}
搜索(4, -200000, 200000);
【问题讨论】:
-
发布您的结构和一些带有递归的代码将有助于为您解除递归的人。至少你会更准确地得到你想要的。
-
谷歌:java alpha-beta search negamax
-
@battal,我有正常的递归代码。我找不到非递归的。
-
在搜索词中添加“非递归”的变体看起来可以提供一些结果,但确实没有多少这方面的例子。看来你可能得补一个了。对了,this 有关系吗?