在这种情况下,树数据类型是我需要的吗?[TicTacToe游戏]



我正在尝试一种算法,该算法可以对自己进行ticTacToe游戏,并从获胜条件中学习。当它获胜时,它会再次检查它所做的所有动作,并增加下次出现相同情况的可能性。我以前从未做过这样的事。所以我的想法是,我需要所有可能的动作组合。

在第一轮中,PC必须从9个元素的列表中进行选择,每个元素代表游戏中的一个瓦片。然后其他玩家可以从8中进行选择。但是:必须有9个不同的名单玩家两个可以选择。当玩家一选择数字2时,玩家二可以从不包括数字2的元素列表中进行选择。

因此,我需要在第一行列出9个元素。在第二节中,我需要9个列表,每个列表包含8个元素,依此类推

这变得相当大,所以我需要自动创建这些组合。我的想法是创建包含更多列表或可供选择的元素的列表。然后我可以浏览这些列表,告诉玩家从哪个列表(或大列表中的路径(中进行选择。我真的不确定是否有一种简单的方法可以做到这一点,尤其是创建这些列表。我还找不到路。然后我看到了树数据类型,它似乎很强大,但我不确定这是否是我搜索的正确数据类型。希望你能给我建议

编辑:为了清楚起见,我知道有一个minmax算法等。我想做的是让游戏与自己进行很多对抗,让它找到自己的学习方式。只要知道他赢与否的结果。

您计划采用的方法可能被视为蚁群算法。正如你的描述所指出的,这个想法是根据一些启发式方法探索可用的路径,并回溯所遵循的路径,以增加/减少在后续迭代中再次采用相同路径的概率,从而有效地加权图的边(在这种情况下是TicTacToe的状态树(。在这个过程结束时,获胜的路径将比失败的路径具有更大的重量,这将使您的发动机能够通过遵循最重的边缘来很好地发挥TicTacToe。如果你感兴趣,这里有一些链接:维基,研讨会幻灯片。

IMO算法的性质需要某种树/图数据结构来简化回溯和邻居发现,我个人会这样做,而不是使用列表列表。为此,您可以尝试NetworkX库。

另外,我同意@martin-wettstein的评论,即利用董事会对称性将减少需要考虑的董事会状态的数量,并将以稍微复杂的逻辑为代价提高性能。

事实上,我前段时间实现了和你相同的方法,这真的很有趣,所以祝你好运

最新更新