连接4数据集评估算法

时间:2012-11-15 15:11:29

标签: algorithm artificial-intelligence

我正在开发一个连接4人工智能,并看到许多人正在使用this数据集,其中包含8层的所有法律职位及其最终结果。

我正在使用带有alpha / beta修剪的标准minimax作为我的搜索算法。看起来这个数据集可能对我的AI非常有用。但是,我正在努力寻找实现它的最佳方法。我认为最好的方法可能是处理列表,并使用board状态作为最终结果(win,loss,draw)的哈希值。

设计AI以使用这样的数据集的最佳方法是什么?我的想法是散列电路板状态,并在正确的轨道上使用传统搜索算法(例如minimax)吗?还是有更好的方法?

更新:我最终将大型移动数据库转换为普通的测试格式,其中1表示X和-1 O.然后我使用了一个字符串状态的字符串,一个表示最终结果,并将其放入std::unsorted_map(请参阅Stack Overflow With Unordered Map以了解我遇到的问题)。地图的表现非常出色。它构建得很快,查找速度很快。但是,我从未完全正确地进行搜索。当游戏中的回合次数小于8时,是解决问题的正确方法,然后切换到常规的alpha-beta?

1 个答案:

答案 0 :(得分:3)

您的方法似乎是正确的。

对于前8个移动,使用alpha-beta算法,并使用查找表来评估深度为8的每个节点的值。
一旦你“耗尽”了桌面(游戏中超过8个动作) - 你应该切换到常规的alpha-beta算法,以终端状态结束(在游戏树中留下)。

这非常有用,因为:
请记住,搜索树的复杂性为O(B^d) - 其中B是分支因子(每个州可能移动的数量),d是到最后所需的深度。
通过使用这种方法,您可以有效地减少Bd的最大等待时间(需要计算的最长移动),因为:

  1. 您的最大深度显着缩小至d-8(仅适用于最后一次移动),实际上会减少d
  2. 在一些动作之后,分支因素本身在这个游戏中趋于缩小(许多动作变得不可能或导致失败并且不应该被探索),这会减少B
  3. 在第一步中,您也缩减了已开发节点的数量 到B^8而不是B^d
  4. 因此,由于这些原因,使用这种方法可以显着减少最长等待时间。


    另请注意:如果您发现优化不够 - 您可以随时扩展查找表(至9,10,......首先移动),当然它会以指数方式增加所需空间 - 这是一个权衡需要检查并选择最符合您需求的东西(如果主内存不够,甚至可以将整个游戏存储在文件系统中)应该考虑。