具有α-β修剪的量子tic-tac-toe - 状态的最佳表示?

时间:2010-11-26 12:27:51

标签: artificial-intelligence tic-tac-toe quantum-computing

对于我的AI课程,我必须使用alpha-beta修剪进行quantum tic-tac-toe游戏。

我正在考虑表示董事会状态的最佳方式 - 我的第一个直觉是使用一种邻域矩阵,即9x9矩阵,而M[i,j]上的整数表示(tic-tac-toe)正方形ij被标记的移动(如果没有这样的连接 - M[i,j]为零)。如果方M[i,i]折叠,则i不为0。然后,我将创建一个这样的矩阵的游戏树,并使用经典的minimax与alpha-beta修剪。

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

我觉得必须有一个更聪明的解决方案 - 也许就像将量子游戏视为一套经典的tic-tac-toe游戏并使用一种通用的极小极大搜索一样,所以它会全部回归到(小)一套经典的tic-tac-toe问题?我看不出它是如何工作的。

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

2 个答案:

答案 0 :(得分:0)

如果您的问题只是Tic-Tac-Toe,那么您可以像我的这个程序那样代表您的董事会http://pastie.org/1715115

这是一个基于三元的数字矩阵。板是一个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)

实际上,使用这个程序你甚至不需要创建一个minimax,因为这个程序已经计算了ad-hoc矩阵中所有可能的答案。选择下一步行动的最重要的功能是简单地查看suc(后继)矩阵:

/* 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;
}

这是量子算法(和嵌入式系统)的好方法。我希望这会对你有所帮助。

小心

答案 1 :(得分:0)

如果仍然有人对此感兴趣

我最终使用了两个单独的数据结构:

  • 折叠节点的经典井字棋牌(3x3矩阵)
  • 缠结节点的图形列表。每个图的节点都是板坐标(以3x3矩阵形式),并且图已完全连接。

当我们缠绕节点A和B时:

  • 如果现有图形中都不存在,则创建一个新图形[A,B](NEW_GRAPH)
  • 一个(例如A)中的
  • 在现有图形[...,A,...]中(EXISTING_GRAPH)
    • 如果B不存在于现有图形中,则将B添加到EXISTING_GRAPH
    • 如果B在现有图形中,我们就知道我们已经关闭了一个循环,然后折叠(将图形从列表中删除,并将新节点添加到经典板中)