为多个对手扩展minimax算法

时间:2013-02-12 06:05:13

标签: artificial-intelligence minimax

minimax算法适用于像tic-tac-toe这样的游戏的两个玩家。我需要为Tank游戏编写AI。 在这个游戏中,坦克必须在一个有墙壁形式障碍的迷宫中移动。目标是收集硬币堆。如果只有两个玩家,则可以实现minimax算法。但是如何实现它超过两个? 在每个回合中,每个玩家都会尝试最大化自己的胜利优势。我不能把所有玩家都想象成一个敌人试图减少我的胜利边缘,创造两个玩家等级,就像在原始的minimax算法中一样。 如果问题格式不正确,请原谅。这个论坛还是新手

3 个答案:

答案 0 :(得分:3)

您不能再使用minimax了。除非你制定一个混合目标,即最大化一个人的利润并最小化另一个人的利润总和。但这很难实现。

更好的是创建能够在战略层面上学习需要做什么的算法。将游戏转变为双人游戏:我与其他游戏,从这里开始。

答案 1 :(得分:3)

Mihai Maruseac说不能再使用MiniMax只是部分正确。如果“ MiniMax”是指MiniMax的“标准型号”,那么他是完全正确的! (这就是他的意思。)但是,您也可以将MiniMax视为MaxiMax,其中两个玩家各自最大化自己的奖励(这正是AlphaWolf在问题中所写的内容)。因此,将n个玩家的一般化称为Max^n,无论如何仍可以将其视为MiniMax。无论如何,下面我将解释为什么标准的2人MiniMax不能在3人或3人以上的多人游戏环境中使用。然后,最后,我将引用正确的替代方法,即Max^n算法。

因此,让我们首先考虑是否可以通过将所有对手都视为最小玩家来简单地将2个玩家的MiniMax变成n个玩家的MiniMax,即他​​们都将尝试最大程度地减少MAX玩家的奖励。

好吧,你不能!让我解释一下原因。

首先,请记住,MiniMax始终只考虑2人零和游戏。因此,通常只用一个游戏结果来描述MiniMax。但是,从技术上讲,有两个! MAX播放器和MIN播放器的。因此,要想形式正确,每个搜索节点必须给出2元组作为游戏结果,例如(payoff-P1,payoff-P2),其中payoff-P1是P1(MAX)和payoff的结果-P2是P2的结果(最小值)。但是,由于我们通常考虑零和博弈,因此我们知道它们的总和始终等于零,即payoff-P1 + payoff-P2 =0。因此,我们总是可以推论另一方的获胜,因此只能表示P1的观点。此外,最小化收益P2与最大化收益P1相同。

对于几乎所有游戏(在现实生活中,当心理因素发挥作用时,在不为自己的损失而进行报复的情况下),我们始终认为所有经纪人都表现合理。当我们谈论两个以上的玩家时,这将是非常重要的!什么是理性?假设所有其他玩家也玩理性游戏,那么每个玩家都将再次尝试最大化自己的奖励(!)。

回到2-player零和:我们确实利用/假设了合理性,因为P1(MAX)无论如何已经(根据定义)最大化了其奖励,而MIN也将其最大化了。 奖励,因为它使MAX的奖励最小化(这是因为零和与MINs奖励最大化相同)。因此,两个玩家都在最大化自己的报酬,因此玩得很理性。

现在让我们假设有2个以上的玩家,为简单起见,请说3个。

不让我们看看我们是否可以简单地用MIN玩家代替所有对手(有时会建议这样做,所以从教学论的角度来看,它很有用)。如果这样做的话,两者都只会使MAX玩家的收益最小化,而MAX则继续使自己的收益最大化。但是,从语义上讲,这是两个敌人对抗MAX的协作。这种合作打破了我们对合理性的假设,即玩家不再能够最大化自己的奖励! (因此,最小化MAX的奖励仅等于有两个玩家时最大化自己的奖励,而不是超过两个。)我举一个例子来说明这一点:

enter image description here

我们在这里看到的是以下内容:

  • 我们像往常一样有一棵游戏树,其中三个玩家(P1,P2,P3)轮流交替。每个玩家都有两个回合。最晚游戏要经过3步才能结束(从技术上讲,P1必须先转一圈,但两种状态均为最终/退出,因此游戏结束)。该游戏描述了一种3人零和游戏(尽管不再需要零和!在没有这种假设的情况下,描述的所有内容都可以使用!)。
  • 最大胜利是20,分配给3个玩家。 (请注意,在我的版本中,所有获胜都是正数。但是,由于所有获胜的总和等于完全相同的值,所以它仍然是零和,因此可以很容易地将其转化为一个总赢为零的总和。 )将胜利显示为元组“ pay-P1 / payoff-P2 / payoff-P3”。
  • 此外,我以两种不同的颜色展示了各自玩家的追逐策略:紫色是假设P1是MAX玩家而其他玩家仅将其奖励降到最低(而不关心自己的奖励)而追求的策略。红色表示理性策略,假设所有玩家都是MAX玩家,即最大化自己的奖励。

那么,如果P2和P3被视为MIN玩家,那么在这场比赛中会发生什么?他们会最小化P1的奖励,因此P1假设在玩m1时只会收到5,因为P2可以通过玩m2来最小化P1的奖励。因此,P1将选择第二步m2获胜(仅)10。

但是,假设两个对手都是MIN玩家,则可以认为这是两个玩家的协作(这是不合理的)。因为在假设合理性时,玩家P2永远不会玩m2,因为P3实际上会玩m3(因此P3赢得5而不是0)。但是假设所有对手都将P1减到最少,则P2会选择m2,因为这使P3能够打m1,从而将P1的获胜次数减少到5(如果P3会打理性,则不会是15)。因此,使用MAX / MIN / MIN策略可以找到(或假设)对手与P1 / MAX进行协作的策略,而在现实中(假设合理性)这种策略永远不会发生!因此,使MiniMax适应2个以上的播放器显然是错误的。 (也就是说,从某种意义上来说,这过于悲观,以至于无法发现永远不会发生的情况。)我们可以从图中看到,假设有理性的代理人,P1应该扮演m1而不是m2,从而赢得15个而不是10个。

这表明MiniMax必须以不同的方式扩展。

应该很明显:如上所述,用向量简单地代表每个玩家的结果。而且,我们不会根据轮到谁来最大化或最小化,而总是最大化当前玩家的成绩。因此,对于n个玩家,所得的算法也称为Max^n。同样,请注意,MiniMax因此仅与元组(payoff-P1,payoff-P2)一起Max^2,其中,payoff-P2被定义为-payoff-P1。

Max^n算法由C.A.拉克特和K.B.伊朗人在“ N人游戏的算法解决方案”中,第五届全国人工智能会议论文集(AAAI'86),第158-162页,AAAI出版社。 该论文可从以下网址公开获得:https://www.aaai.org/Papers/AAAI/1986/AAAI86-025.pdf

请注意,由于搜索空间(即游戏树)的指数增长,在实践中从未使用过MiniMax,因此从未使用Max^n。取而代之的是,人们总是使用Alpha / Beta修剪,这是一种非常直观的扩展,它从不访问/浏览树的分支,而无论如何它们都是毫无意义的。理查德·科夫(Richard Korf)在人工智能48(1991),第99-111页的“多人alpha-beta修剪”中描述了Alpha / Beta也可以扩展到适用于n玩家游戏(n> 2)的情况。 该文章可通过以下网址公开获得:https://www.cc.gatech.edu/~thad/6601-gradAI-fall2015/Korf_Multi-player-Alpha-beta-Pruning.pdf

最后,让我添加一个非常有趣的观察: 在2人零和MiniMax中,计算出的策略是“完美的”,因为它肯定会至少获得MiniMax保证/计算出的胜利。如果对手玩法不合理,即偏离其策略,那么结果只能更高。 在n玩家零和MiniMax(即Max^n)中,情况不再如此!回想一下,P1的理性策略是打m1从而赢得15(如果对手玩理性)。但是,如果对手没有发挥理性,那么几乎所有事情都会发生。在这里,如果P2确实不合理地玩m2,则P1的输出完全取决于P3的行为,因此P1的获胜也可能更少。原因是在2人零和游戏中,对手的行动直接影响到自己的结果-仅此而已!但是,如果有3个或更多的玩家,则胜利也可以在其他玩家之间分配。

答案 2 :(得分:0)

如何使用多个最小化代理处理最小化功能是运行最小化功能,并且所有代理的深度相同。最小化代理程序全部处理完后,您将在最后一个最小化代理程序上运行最大化功能。

# HOW YOU HANDLE THE MINIMIZING FUNCTION - If this pseudocode helps make better sense out of this.
scores = []
if agent == end_of_minimizing_agents: # last minimizing agent
    for actions in legal_actions: 
        depth_reduced = depth-1
        scores.append(max(successor_state, depth_reduced))
else:
    for actions in legal_actions: 
        scores.append(min(successor_state, depth))
bestScore = min(scores)
return bestScore