人工智能 - 实用功能最小最大搜索



Hi我很困惑如何使用最小最大值搜索来确定实用程序功能用任何可以使用最小最大值搜索的游戏来解释它基本上我问你如何确定实用程序函数干杯

效用值只是玩家在游戏中到达某个状态时收到的一些任意值。例如,在井字游戏中,您的效用函数可能只是 1 表示获胜,0 表示平局,或 -1 表示输。在此上运行 minmax,充其量只能找到一组导致 1(获胜)的操作。

另一个例子是国际象棋(并不是说你可以在国际象棋游戏中运行最小最大值)。假设您的效用函数来自某个数字,该数字基于您捕获或丢失的碎片的价值

确定特定状态下移动的效用值与程序员的经验和他/她对游戏的了解有关。
终端状态的效用值很容易确定。 例如,在井字游戏中,玩家 X 的终端状态是 X 对角线、垂直或水平对齐时。 任何创建这种状态的移动都是终端状态,您可以创建一个函数来检查它。 如果是终端状态,则该函数返回 1 或 -1。如果您的玩家代理是玩家 X,并且在玩家 X 移动后确定玩家 O 将获胜,则该函数返回 -1。如果该函数确定它是自己的获胜动作,则返回 1。如果所有单元格都被最后一次可能的移动所占据,并且没有人获胜,则该函数返回零。

这仅在终端状态。 评估中间状态至关重要,因为即使在 3x3 游戏中,也需要考虑许多组合。 如果你包括对称移动,你有 9!井字游戏中的可能状态。 对于这些中间情况,您需要提出一个评估函数,该函数返回每个状态与其他状态相关的分数。

假设我分配的终端状态值为 810、0 和 -810。 对于每一步,分数将是 810/(# 步数)。 因此,如果我在 6 步中达到最终状态,分数将是 810/6 = 135。 在 9 个动作中,得分将是 90。 以这种方式形成的评估函数将有利于更快地达到终端状态的移动。 但是,它仍计算为叶节点。 不过,我们需要在到达叶节点之前进行评估,但这也可能是评估函数的一部分。假设在下面的游戏中,玩家 1 是 X。 所以X接下来移动。 以下是 X 的合法移动(行、列):(1) 0,0(2) 0,2(3) 2,0(4) 2,1(5) 2,2

|

|O| ||O|X|X|| | | |

每次移动的效用值应有利于最佳移动。在这种情况下,最好的动作是 (2) 或 (5)。 因此,评估函数将分配一个效用值 81,例如分配给每个。 移动 (4) 对于 X 玩家来说是最糟糕的移动(并且还可以保证您在与智能玩家的比赛中输掉游戏),因此该函数将为该移动分配值 -9。 移动(1)和(3)虽然不理想,但不会让你输,所以我们可能会分配一个1。
因此,当最小最大值评估这 5 个动作时,因为您的玩家 X 是最大值,因此选择将是 (2) 或 (5)。

如果我们专注于选项 (2) 或 (5),游戏将在这些之后两步处于终端状态。 因此,实际上,评估函数应该比当前返回效用值的法律移动领先 2 个动作。(此策略遵循深度限制搜索的行,其中函数在某个深度处求值并生成效用值,而不会到达叶节点或终端状态)

现在我回到我的第一个发言。 效用值将由根据程序员的游戏知识编码的评估函数确定。

希望我不会混淆你...

最新更新