Artificial intelligence 带alpha-beta修剪的量子tic-tac-toe-状态的最佳表示?

Artificial intelligence 带alpha-beta修剪的量子tic-tac-toe-状态的最佳表示?,artificial-intelligence,tic-tac-toe,quantum-computing,Artificial Intelligence,Tic Tac Toe,Quantum Computing,对于我的AI类,我必须使用alpha-beta修剪制作一个游戏 我在考虑表示电路板状态的最佳方法-我的第一直觉是使用一种邻域矩阵,即9x9矩阵,在m[I,j]上,m[I,j]是一个整数,它表示移动(tic tac toe)中标记了I和j(如果没有这种连接-m[I,j])为零)M[i,i]不是0。然后,我将创建这样一个矩阵的博弈树,并使用经典的minimax和alpha-beta修剪 然而,这种方法似乎相当昂贵——会有一个相对较大的分支因子加上每个节点的基本操作——检查循环并找到9x9矩阵的所有等

对于我的AI类,我必须使用alpha-beta修剪制作一个游戏

我在考虑表示电路板状态的最佳方法-我的第一直觉是使用一种邻域矩阵,即9x9矩阵,在
m[I,j]
上,m[I,j]是一个整数,它表示移动(tic tac toe)中标记了
I
j
(如果没有这种连接-
m[I,j])
为零)<如果方形
i
折叠,则code>M[i,i]不是0。然后,我将创建这样一个矩阵的博弈树,并使用经典的minimax和alpha-beta修剪

然而,这种方法似乎相当昂贵——会有一个相对较大的分支因子加上每个节点的基本操作——检查循环并找到9x9矩阵的所有等效状态

我有一种感觉,必须有一个更聪明的解决方案——可能是将量子游戏看作一组经典的tic-tac-toe游戏,并使用一种广义的minimax搜索,所以它会回归到一组(小的)经典tic-tac-toe问题?我看不出这到底是怎么回事


有没有人有这个(或类似)问题的经验,你能给我指出正确的方向吗?

如果你的问题只是抽搐,那么你就可以像我的这个程序那样代表你的电路板了

它是一个基于三值的数字矩阵。电路板是一个9位数字,其中每个数字有3个可能值中的一个:0表示空,1表示x,2表示o

这种方法非常适用于minimax,因为电路板可以在单个整数中设置!矩阵的形式为:

int suc[TOTAL][2]={ { 0, 10000}, { 1, 20001}, { 10, 20010}, { 12, 1012}, { 21, 1021},
    { 100, 20100}, { 102, 100102}, ...
其中,每对数字对应于(a)当前位置,以及(b),通过极大极小值预先计算的下一个更好的位置。因此,如果电路板为空(suc[0][0]==0),下一个更好的位置是将“x”放在位置5,即中心(suc[0][1]==000010000)

实际上,这个程序甚至不需要创建一个极小极大值,因为这个程序已经计算了ad-hoc矩阵中所有可能的答案。选择下一步最重要的功能是查看suc(继任者)矩阵:

/*查找并返回给定板terno后的下一块板*/
内移(内移)
{
int i;
对于(i=0;i如果还有人对此感兴趣

我最终使用了两种不同的数据结构:

  • 用于折叠节点的经典tic tac趾板(3x3矩阵)
  • 纠缠节点的图列表。每个图的节点都是板坐标(在3x3矩阵中),并且图是完全连接的
当我们缠绕节点A和B时:

  • 如果两者都不在现有图中,请创建一个新图[a,B](新建图)
  • 其中一个(例如A)在现有图中[…,A,…](现有图)
    • 如果B不在现有图中,请将B添加到现有的_图中
    • 如果B在一个现有的图中,我们知道我们关闭了一个循环,我们进行了折叠(图从列表中删除,新节点添加到经典板)
#define TOTAL 4520
是tic-tac-toe游戏的有效位置(组合)的总和(始终启动
x
)。
/* find and return the next board after the given board terno */
int move(int terno)
{
    int i;

    for (i=0; i<TOTAL; i++)
        if (suc[i][0]==terno)
            return suc[i][1];
    return 0;
}