Artificial intelligence 针对多个对手的minimax算法的扩展

Artificial intelligence 针对多个对手的minimax算法的扩展,artificial-intelligence,minimax,Artificial Intelligence,Minimax,minimax算法对于两个玩家来说都是很好的描述,比如tic-tac-toe。我需要为坦克游戏写一个AI。 在这个游戏中,坦克必须在有障碍物的迷宫中移动。目的是收集硬币堆。如果只有两个参与者,则可以实现极小极大算法。但是如何在两个以上的时间内实现它呢? 在每个回合中,每个球员都会尽力最大化自己的获胜优势。我不能认为所有的玩家都是一个敌人,他们只想减少我的获胜优势,就像最初的minimax算法那样创建两个玩家级别。 如果问题格式不好,请原谅。这个论坛还是新手你不能再使用minimax来做这个了。除

minimax算法对于两个玩家来说都是很好的描述,比如tic-tac-toe。我需要为坦克游戏写一个AI。 在这个游戏中,坦克必须在有障碍物的迷宫中移动。目的是收集硬币堆。如果只有两个参与者,则可以实现极小极大算法。但是如何在两个以上的时间内实现它呢? 在每个回合中,每个球员都会尽力最大化自己的获胜优势。我不能认为所有的玩家都是一个敌人,他们只想减少我的获胜优势,就像最初的minimax算法那样创建两个玩家级别。
如果问题格式不好,请原谅。这个论坛还是新手

你不能再使用minimax来做这个了。除非你把一个人的利润最大化和另一个人的利润最小化作为一个混合目标。但这很难实现


更好的方法是创建能够从战略层面了解需要做什么的算法。将游戏转换为两人游戏:我和其他人,从这里开始。

如何使用多个最小化代理处理最小化函数,就是运行一个最小化函数,所有代理的深度相同。一旦最小化代理全部完成,就可以在最后一个最小化代理上运行最大化函数

# 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

Mihai Maruseac说MiniMax不能再使用了,这只是部分正确。如果“MiniMax”指的是MiniMax的“标准变体”,那么他完全正确!(这就是他的意思。)然而,你也可以把MiniMax看作MaxiMax,两个玩家各自最大化他们自己的奖励(这正是AlphaWolf在问题中所写的)。因此,对n个参和者的推广被称为
Max^n
,这在某种程度上仍然可以被视为极小极大。无论如何,下面我将解释为什么标准的2人极小极大不能用于3人或更多人的多人游戏环境。然后,最后,我给出了正确的替代方案,即
Max^n
算法

让我们先考虑一下,如果把所有的对手都看作是最小玩家,可以简单地把2人游戏MIMPAX变成N玩家MIMPAX,也就是说,他们都会尽量减少Max玩家的奖励。 好吧,你不能!让我解释一下原因

首先,回想一下,MiniMax总是专门考虑两人零和博弈。因此,MiniMax通常只描述一个游戏结果。然而,从技术上讲,有两个!最大玩家和最小玩家的游戏。因此,为了在形式上完全正确,我们必须为每个搜索节点提供一个2元组作为游戏结果,比如(payoff-P1,payoff-P2),其中payoff-P1是P1(MAX)的结果,payoff-P2是P2(MIN)的结果。然而,由于我们通常考虑零和游戏,我们知道它们的总和总是等于零,即PayOffP1+PayOffelP2=0。因此,我们总是可以推断出对方的胜利,因此只能从P1的角度来表示结果。此外,最小化收益-P2与最大化收益-P1相同

对于几乎所有的游戏(除了在现实生活中心理因素起作用,比如说复仇而不关心自己的损失),我们总是认为所有的代理都是理性的。这将是非常重要的,稍后当我们谈论两个以上的球员!什么是理性?每个玩家的目标都是最大化他们自己的奖励(!),再次假设所有其他玩家都玩理性游戏

回到两人零和:我们确实利用了/假设了理性,因为P1(最大值)已经在最大化它的回报(根据定义),而MIN也在最大化它自己的回报,因为它最小化了MAX的回报(也就是说,因为零和与最大化MINs回报相同)。因此,两个玩家都在最大化自己的回报,因此都表现得很理性

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

不,让我们看看我们是否可以简单地用MIN球员替换所有对手(这有时是建议的,所以我觉得从说教的角度来看这很有用)。如果我们这样做,两者都只会最小化MAX玩家的回报,而MAX会继续最大化自己的回报。然而,从语义上来说,这意味着两个敌人对MAX的合作。这种合作打破了我们的理性假设,即玩家不再最大化他们自己的奖励!(因此,当有两名玩家时,最小化MAX的奖励只等同于最大化自己的奖励,如果有更多玩家,则不等同于最大化自己的奖励。)我举一个例子来说明:

我们在这里看到的是:

  • 像往常一样,我们有一个游戏树,其中三个玩家(P1、P2、P3)交替轮换。每个选手都有两个回合。最晚游戏在3次移动后结束(从技术上讲,P1必须进行一个回合,然后,但这两个状态都是final/leaf,因此游戏结束)。该游戏描述了一个三人零和游戏(尽管零和不再是必需的!所描述的一切在没有这个假设的情况下也可以运行!)
  • 最大的胜利是20场,分布在3名球员之间。(请注意,在我的版本中,所有赢款都是正数。但是,它仍然是零和,因为所有赢款加起来的值完全相同,因此可以很容易地将其转换为一个所有赢款加起来都是零的值。)赢款显示为元组“payoff-P1/payoff-P2/payoff-P3”
  • 此外,我用两种不同的颜色展示了各自玩家的购买策略:紫色是假设只有P1是最大玩家而其他玩家只最小化其奖励(不考虑自己的奖励)的策略。红色表示假设所有玩家都是最大玩家的理性策略,即最大化他们自己的奖励
那么,如果P2和P3被认为是最小玩家,那么在这个游戏中会发生什么呢?他们会最小化P1的奖励,所以P1假设在玩m1时只会收到5,因为P2可以最小化P1