对于我的AI课程,我必须使用alpha-beta修剪进行quantum tic-tac-toe游戏。
我正在考虑表示董事会状态的最佳方式 - 我的第一个直觉是使用一种邻域矩阵,即9x9矩阵,而M[i,j]
上的整数表示(tic-tac-toe)正方形i
和j
被标记的移动(如果没有这样的连接 - M[i,j]
为零)。如果方M[i,i]
折叠,则i
不为0。然后,我将创建一个这样的矩阵的游戏树,并使用经典的minimax与alpha-beta修剪。
然而,这种方法似乎相当昂贵 - 会有一个相对较大的分支因子加上每个节点的基本操作 - 检查周期并找到9x9矩阵的所有等效状态。
我觉得必须有一个更聪明的解决方案 - 也许就像将量子游戏视为一套经典的tic-tac-toe游戏并使用一种通用的极小极大搜索一样,所以它会全部回归到(小)一套经典的tic-tac-toe问题?我看不出它是如何工作的。
有没有人有这个(或类似的)问题的经验,你能指出我正确的方向吗?
答案 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)
如果仍然有人对此感兴趣
我最终使用了两个单独的数据结构:
当我们缠绕节点A和B时: