策略棋类游戏AI的高效棋盘表示

在简化版的类似国际象棋的策略游戏中,如果棋盘位置少于64个,使用位板表示法是否仍然有效,或者使用更简单的基于数组的信箱实现是否更实用?

我们学校的AI课程每年都会举办一次比赛,教授会设计一个棋盘游戏,我们有四个星期的时间来创建一个玩这个游戏的AI。通常,棋子是国际象棋棋子的一部分,规则类似,并且在较小的棋盘上进行游戏,例如8×5、7×7等。我完全不确定使用仅40位与国际象棋的典型64位相比会有什么不同。

我的唯一问题是我对C或C++不太熟悉,我更愿意用Java来实现这个程序。Java中是否有足够的位操作支持,使我能够实现位板表示法,如果这能增加效率,是否值得增加复杂性?学习曲线会不会太陡峭?

我的计划是使用带有AB剪枝的Negamax搜索、静态搜索、置换表、杀手走法等,具体取决于时间。还有其他什么建议可以在这么短的时间内创建一个有竞争力的AI?


回答:

位板确实可以使用,但在我看来,为了正确运行而增加的努力和复杂性并不值得任何可能的后续计算效率提升。

从整体来看,位掩码操作(&|)相对于获取数组元素(甚至是ListMap)的任何效率提升,都将被你打算使用的任何AI或搜索算法所掩盖。

也就是说,一个指数或多项式复杂度的算法仍然需要O(e^n)O(n^d)的时间,而你通过二进制运算而不是指针解引用节省的少量CPU周期将是微不足道的。

此时,最好使用你能使用的、最简单的数据库结构(可能是数组,或任何Collection),并专注于使你的算法正常工作。

之后,如果你有时间,你可以对你的程序进行性能分析,如果你发现数组查找占用了运行时间的20%,那么也许,只是也许,考虑将所有内容重构为位操作。

就我个人而言,我会考虑可能的方式来并行进行解决方案空间的搜索,以最大化利用多个CPU核心,或者更好的是,以一种可以分布在多个计算节点上的方式。是的,如果你发现了真正巧妙的东西,这可能会让你至少获得硕士学位。:)

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注