在我的数据结构课程中,我们已经分配了一个项目,在该项目中,我们需要制作一个功能齐全的Quantum Tic-Tac-Toe游戏,玩家将面对一个可以赢得胜利的机器人。
教授建议我们在AI中使用游戏树。然而,像往常一样,我正在寻找更具挑战性的东西。
任何人都可以提出一个更好,更先进的方法,我可以研究和实施吗?
我不是在寻找一些完全荒谬的东西,这会使问题变得更加复杂。相反,我正在寻找一种先进的方法 - 比如使用A *算法而不是BFS。
答案 0 :(得分:13)
你学习新事物(甚至是你自己)的愿望是好的。然而,复杂的解决方案通常是not the best solution。
你的教授建议使用游戏树进行人工智能有一个很好的理由。建议这是因为它是适合这项工作的工具。没有更好的方法可以研究,因为这是最好的方法。
您提到您在数据结构类(通常是第一年或第二年级)。我猜你的任务的重点是学习树数据结构。如果你想让事情变得更复杂,首先编写树版本,然后去研究解决同一问题的其他方法。
答案 1 :(得分:4)
评估回合制游戏有两个部分。
游戏树允许您提前播放动作以查看它们将在哪里领先。如果游戏足够复杂,你无法计算所有可能性(http://en.wikipedia.org/wiki/Solved_game),那么你需要一种方法来确定特定棋盘场景的“好”程度。国际象棋的不良效用函数可能只是计算片段值而忽略位置。
您还需要一种有效的遍历游戏树的方法。阅读Minimax,Alpha-beta修剪,Negascout等。
答案 2 :(得分:2)
我现在正在解决这个特定问题:http://www.rickb.com/quantum-tic-tac-toe
我曾考虑过做一些更先进的事情,但我只是坚持使用优秀的'alpha-beta搜索算法。我的主要问题是提出一个好的算法来“评分”每个特定的电路板状态。 QTTT比标准的tic tac脚趾复杂得多,搜索状态的数量呈指数级增长。我在内存中有完整标准的tic tac toe游戏树,我用它来快速查找每个“经典”板状态的分数,但是我必须以某种方式得分叠加状态。状态的数量是如此之大,以至于你不能在树中走得太深,所以必须使用适当的评分函数来提早修剪树。
答案 3 :(得分:1)
要为您的实现提供学习功能,您可以查看Donald Mitchie的MENACE(Matchbox Educable Noughts and Crosses Engine)的模拟器...
修改强>:
在调查中,这已经做了很多,例如在CodeProjet上查看
此外,虽然获取世界的统计模型(或者这里的Tic-Tac-Toe减少的世界)并且将未来行动建立在这样的模型上是智能行为,但是你的教授可能认为它超出了范围,因为没有接触你可能在课堂上涉及的关键概念(知识表示,决策树......)