Artificial intelligence 换位表如何使用Hypermax?

Artificial intelligence 换位表如何使用Hypermax?,artificial-intelligence,multiplayer,minimax,Artificial Intelligence,Multiplayer,Minimax,我想知道是否有人可以帮助我理解如何将换位表合并到Hypermax算法中。任何示例、伪代码、提示或实现参考都将不胜感激 一点背景: Hypermax是一种递归博弈树搜索算法,用于n人游戏 游戏,通常为3+玩家。它是极大极小和 α-β修剪 通常在游戏树中的每个节点 当前玩家(选择器)将查看其可以做出的所有动作 选择一个能最大化自身效用的。不同于 极小极大/负极大 我了解换位表的工作原理,但我 不知道存储在其中的值将如何用于初始化 找到换位表条目时的截止时间。换位 在带有换位和alpha-beta修

我想知道是否有人可以帮助我理解如何将换位表合并到Hypermax算法中。任何示例、伪代码、提示或实现参考都将不胜感激

一点背景:

  • Hypermax是一种递归博弈树搜索算法,用于n人游戏 游戏,通常为3+玩家。它是极大极小和 α-β修剪
  • 通常在游戏树中的每个节点 当前玩家(选择器)将查看其可以做出的所有动作 选择一个能最大化自身效用的。不同于 极小极大/负极大
  • 我了解换位表的工作原理,但我 不知道存储在其中的值将如何用于初始化 找到换位表条目时的截止时间。换位 在带有换位和alpha-beta修剪的minimax中需要标记。 我似乎不知道该如何合并 在这里
Javascript中无转置表的Hypermax算法:

/**
*@param{*}状态一个游戏状态对象。
*@param{number[]}alphaVectorα向量。
*@为每个玩家返回{number[]}一个实用值数组。
*/
函数hypermax(状态,字母向量){
//如果终端返回所有播放器的实用程序
if(state.isTerminal()){
返回状态。calculateUtilities();
}
//把每一步都弹出来
var moves=state.getLegalMoves();
var bestUtilityVector=null;
对于(变量i=0;ialpha[state.currentPlayer]){
alpha[state.currentPlayer]=实用程序[state.currentPlayer];
最佳效用=效用向量;
}
//阿尔法修剪
var总和=0;
对于(var j=0;j=0){
打破
}
}
}
参考文献:

  • 不带转置表的Hypermax的实现:
  • Minimax(negamax变体)与alpha-beta修剪和换位表:
  • Hypermax的原始推导和证明:

这个问题相当宽泛,因此这是一个同样宽泛的答案-如果有具体的问题,请澄清您不理解的地方

换位表不能保证在多人游戏中是正确的,但是如果你仔细地执行它们,它们是可以正确的。本文对此进行了简要讨论:

总而言之,关于换位,有三件事需要注意 多玩家游戏树中的表格。首先,他们要求我们 与我们的节点顺序一致。第二,它们可能会更少 比两人游戏更有效,因为它需要更多的时间 移动以发生换位。最后,投机修剪可以 从换位表中获益,因为它们可以抵消 重新搜索游戏树的部分

除了排序问题,您可能还需要存储分支下的搜索深度、下一个玩家以及用于修剪子树的边界等内容。例如,如果在第一次搜索中修剪树的界限不同,则在第二次搜索中可能无法生成正确的结果


HyperMax只是带有推测性修剪的Max^n的一个微小变体,因此您可能希望查看上下文,看看是否可以在Max^n中实现这些功能。

问题相当广泛,因此这是一个类似的广泛答案-如果有特定的内容,请澄清您不理解的内容

换位表不能保证在多人游戏中是正确的,但是如果你仔细地执行它们,它们是可以正确的。本文对此进行了简要讨论:

总而言之,关于换位,有三件事需要注意 多玩家游戏树中的表格。首先,他们要求我们 与我们的节点顺序一致。第二,它们可能会更少 比两人游戏更有效,因为它需要更多的时间 移动以发生换位。最后,投机修剪可以 从换位表中获益,因为它们可以抵消 重新搜索游戏树的部分

除了排序问题,您可能还需要存储分支下的搜索深度、下一个玩家以及用于修剪子树的边界等内容。例如,如果在第一次搜索中修剪树的界限不同,则在第二次搜索中可能无法生成正确的结果

HyperMax只是带有推测性修剪的Max^n的一个微小变体,因此您可能希望查看该上下文,看看是否可以在Max^n中实现