抱歉,如果这是一个愚蠢的问题,但我很困惑。Negamax在开始时检查是否已达到结束状态或最大深度。然后插入一个求值函数,该函数返回状态的负或正分数(一边好,另一边不好,反之亦然)。我发现难以理解的是下面的否定。返回的平均分数是否乘以-1?这样做的目的是什么?我喜欢叶子状态的“泡沫”,在最低/最高分数之间交替。
行:-NegaMax(c,depth+1,单色)
发布于 2013-11-10 21:15:13
在交替移动的游戏中,这是用来翻转视角的。在每种状态下,你都希望根据当前玩家计算得分(正代表好,负代表坏)。当你看一些孩子的状态,对手会移动到那里,所以负极最大将返回根据他的估计分数。你需要否定它才能得到第一名玩家的分数。
示例:在每个状态下,选择最大的被否定的子项:

发布于 2021-02-02 17:10:26
我不知道你为什么要增加深度。Negamax最大化了当前玩家的位置。在执行搜索时,应该调用-negamax(position,depth-1)。当你下一步棋的时候,你需要在每一步棋中反转eval分数。例如,如果要移动的是白色,则eval应该是规则的,如果要移动黑色,则eval应该将黑色部分评分为正值,因此if (turn == black) then eval = -eval。你这样做是因为negamax算法最大化了玩家的得分。
https://stackoverflow.com/questions/19889658
复制相似问题