【问题标题】:Negamax negationNegamax 否定
【发布时间】:2013-11-10 12:25:31
【问题描述】:

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

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

【问题讨论】:

    标签: algorithm minimax search-tree negamax


    【解决方案1】:

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

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

    【讨论】:

    • 但是,如果我们有两个终端状态分别在 -2 和 -500 处从父节点状态评估,从最小化的角度来看,你会选择 2 到 500(乘以 -1)并选择500 这很好,但如果从最大化的角度来看,你会选择 500,这是不对的?!我显然遗漏了一些非常明显的东西,因为 negmax 可以正常工作,但如果你能帮助我理解那就太好了。
    • @user2976086 negamax 的想法是两个玩家都是最大化者,但其中一个最大化否定分数。如果我们有状态应该移动的玩家输了,那么无论它是哪个玩家,它都会得到分数-infinity。 Negamax 总是会选择这样的状态,因为它的否定分数是+infinity
    • 这更有意义!因此,我创建并放入 negamax 的评估函数将为任何一方都不清楚获胜的状态返回一个分数,该分数将乘以玩家(-1 或 +1)。但是,如果任何一方都明显获胜,只需返回负无穷大(不要乘以玩家)?
    • @user2976086,在大多数比赛中,最终状态都是输的(对手刚刚俘获了我的国王并赢得了比赛)所以它是-inf,但有时他们赢了(对手刚刚输掉了比赛),所以@ 987654325@.
    • 您之前说过“......如果我们有状态应该移动的玩家输了,那么无论它是哪个玩家......”
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-23
      • 1970-01-01
      • 2021-10-31
      • 2016-10-21
      相关资源
      最近更新 更多