对不起,如果这是一个愚蠢的问题,但我很困惑。 Negamax最初检查是否已达到最终状态或最大深度。然后插入一个评估函数,该函数返回状态的负或正分数(一个对一方有利,对另一方有坏,反之亦然)。我发现难以理解的是下面的否定。这是否意味着返回的分数乘以-1?这实现了什么?我很欣赏叶子'泡沫'在最小/最大分数之间交替变换。
行:-NegaMax(c,深度+ 1,1-色)
答案 0 :(得分:4)
这用于在交替移动的游戏中翻转视角。在每个州,你想根据当前玩家获得计算分数(正面是好的,负面是坏的)。当你看一些孩子状态时,对手会移动到那里,所以negamax会根据他的回报估计得分。你需要否定它才能获得第一名球员的得分。
示例:在每个州选择最多被否定的孩子:
答案 1 :(得分:0)
我不知道你为什么要增加深度。 Negamax 最大化当前玩家位置。当您执行搜索时,您应该调用 -negamax(position,depth-1)
。移动时,您希望在每次移动时反转 eval 分数。例如,如果它的白色要移动,那么 eval 应该是规则的,如果黑色要移动,那么 eval 应该将黑色块计为正值,所以 if (turn == black) then eval = -eval
。这样做是因为 negamax 算法可以最大化玩家得分。