1

对不起,如果这是一个愚蠢的问题,但我很困惑。Negamax 在开始时检查是否已达到结束状态或最大深度。然后,您插入一个评估函数,该函数返回该状态的负分或正分(一个对一方有利,对另一方不利,反之亦然)。我发现很难理解的是下面的否定。这是否意味着返回的分数乘以-1?这能达到什么目的?我很欣赏叶子状态的“泡沫”备份在最小/最大分数之间交替。

线:-NegaMax(c, depth+1, 1-color)

4

2 回答 2

4

这用于在具有交替动作的游戏中翻转视角。在每个状态下,您都希望根据当前玩家计算得分(正为好,负为坏)。当您查看某个子状态时,对手会移动到那里,因此 negamax 将根据他返回估计的分数。您需要否定它才能获得第一个玩家的分数。

示例:在每个状态中选择最大的否定子节点: 例子

于 2013-11-10T13:15:12.707 回答
0

我不知道你为什么要增加深度。Negamax 最大化当前玩家的位置。当您执行搜索时,您应该调用-negamax(position,depth-1). 移动时,您想反转每一步的评估分数。例如,如果它的白色要移动,那么 eval 应该是规则的,如果黑色要移动,那么 eval 应该将黑色棋子打分为正值,所以if (turn == black) then eval = -eval. 你这样做是因为 negamax 算法最大化玩家得分。

于 2021-02-02T09:10:26.317 回答