我对算法很新,我试图理解极小极大,我读了很多文章,但我仍然无法在python中实现它如何实现它的tic-tac-toe游戏。 您可以尝试使用一些伪代码或一些python代码尽可能简单地向我解释吗?
我只需要了解它是如何工作的。我读了很多关于这个的东西,我理解基本的,但我仍然无法得到如何回归。
如果可以,请不要链接我的教程和样本(http://en.literateprograms.org/Tic_Tac_Toe_(Python)),我知道它们很好,但我只需要一个白痴的解释。
谢谢你的时间:)答案 0 :(得分:8)
X被称为最大玩家,因为当X移动时,X需要选择一个移动,以便在移动后最大化结果。当O队员,O需要选择一个移动,在移动后最小化结果。递归地应用这些规则,例如,如果只有三个棋盘位置可以打,那么X的最佳游戏就是迫使O选择价值尽可能高的最小值移动。
换句话说,板位置B的游戏理论最小极大值V被定义为 V(B) = 1 if X has won in this position
V(B) = -1 if O has won in this position
V(B) = 0 if neither player has won and no more moves are possible (draw)
,否则
V(B) = max(V(B1), ..., V(Bn)) where board positions B1..Bn are
the positions available for X, and it is X's move
V(B) = min(V(B1), ..., V(Bn)) where board positions B1..Bn are
the positions available for O, and it is O's move
X的最佳策略总是从B移动到Bi,使得V(Bi)最大,即对应于游戏理论值V(B),并且对于O,类似地,选择最小后继位置。 / p>
然而,通常不可能在像国际象棋这样的游戏中计算,因为为了计算游戏理论值,需要计算整个游戏树直到最终位置并且该树通常非常大。因此,一种标准的方法是投入一个“评估函数”,它将棋盘位置映射到有希望与游戏理论值相关的分数。例如。在国际象棋程序中,评估函数倾向于给出物质优势,开放列等的正分数。最小极大算法它们最小化评估函数得分而不是板位置的实际(不可计算)游戏理论值。
对minimax的重要标准优化是“alpha-beta修剪”。它提供与minimax搜索相同的结果,但速度更快。 Minimax也可以用“negamax”表示,其中得分的符号在每个搜索级别都反转。它只是实现minimax的另一种方式,但是以统一的方式处理玩家。其他游戏树搜索方法包括迭代深化,校对数搜索等。
答案 1 :(得分:3)
Minimax是一种在交替转弯的双人游戏中探索潜在动作空间的方法。你正试图赢,而你的对手正试图阻止你获胜。
一个关键的直觉是,如果它现在轮到你了,一个保证你获胜的双向序列是没用的,因为你的对手不会与你配合。你试图做出最大化你获胜机会的动作,你的对手会做出最小化你获胜机会的动作。
出于这个原因,从你制作的那些对你不利的动作中探索分支并不是非常有用,或者让你的对手移动对你有好处。