我想使用深度优先搜索来解决极小极大问题;但是,为了使我的算法能够完成并始终有一个解决方案,我正在使用迭代DFS(因此找到所有节点一层深,然后两层,然后三层)。我希望能够在一段时间过后中断搜索,但是,除了将我的递归算法转换为具有堆栈的迭代算法并检查每个时间之外,我似乎找不到好的方法。循环(看起来效率低下)或将结束时间传递给所有递归调用并在每次调用开始时进行检查(这看起来效率更低,甚至比迭代更复杂)。
我不想使用除Java 8源之外的任何其他库。
伪代码:
function negamax(node, depth, α, β, color)
if depth = 0 or node is a terminal node
return color * the heuristic value of node
bestValue := -∞
childNodes := GenerateMoves(node)
childNodes := OrderMoves(childNodes)
foreach child in childNodes
val := -negamax(child, depth - 1, -β, -α, -color)
bestValue := max( bestValue, val )
α := max( α, val )
if α ≥ β
break
return bestValue
function search()
depth := 0
bestValue := null
while (++depth > 0) // runs forever until interrupted
bestValue := negamax( rootNode, depth, -∞, +∞, 1)
return bestValue
function main()
search();
答案 0 :(得分:1)
您可以使用多线程概念。
例如:
Thread tempThread = new Thread("tempThread");
Thread originalThread = new Thread("DFSthread");
public void run() //run() of tempThread
{
try{
tempThread.sleep(1000); //you can add the limit you want here
originalThread.stop();
}
catch(InterruptedException exc)
{
System.out.println(exc);
}
希望它有所帮助。