[英]Get minimax move in string
我正在按照这个伪代码在 Java 中编写我的代码。 除了实际捕捉到最佳动作外,一切都很清楚并且按预期工作。 似乎我在最大化玩家条件中添加的if 条件返回了当前棋盘中的最后一个可玩动作。 所以它总是淡化。 我怎样才能跟踪最好的移动?
这是伪代码
function minimax(position, depth, alpha, beta, maximizingPlayer)
if depth == 0 or game over in position
return static evaluation of position
if maximizingPlayer
maxEval = -infinity
for each move of validMoves
eval = minimax(child, depth - 1, alpha, beta false)
maxEval = max(maxEval, eval)
alpha = max(alpha, eval)
if depth == 3
bestmove = move (Is this correct?)
if beta <= alpha
break
return maxEval
else
minEval = +infinity
for each move of validMoves
eval = minimax(child, depth - 1, alpha, beta true)
minEval = min(minEval, eval)
beta = min(beta, eval)
if beta <= alpha
break
return minEval
// initial call
minimax(currentPosition, 3, -∞, +∞, true)
您实际上并没有检查该动作是否比其他动作更好,因此您只是获得了最后一步。
您需要检查移动的分数是否高于之前看到的其他分数。 由于您已经拥有包含迄今为止最高分数的maxEval
,因此您可以在更新bestmove
之前简单地添加eval == maxEval
的检查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.