我在JavaFX中制作了Tictatcoe和Nine Men's Morris的游戏,并分别实现了AI。对于Nine Men's Morris,我还没有实施移除磨坊,所以现在更像是复杂的Tictatcoe。我使用了带有alpha-beta剪枝的minimax算法,虽然人工智能做了相当不错的移动,但九人莫里斯的移动计算速度非常慢。如果我让AI玩整个游戏,需要几分钟。
对于评估函数,我一直在使用评估板上每一行的函数,其中行值为:
3-in-a-line为100,
10对于2-in-a-line,
1为一列中的1,
负(-100,-10,-1)对于对手单元格,
0否则。
极小值算法或多或少是相同的,但是对于九个人的莫里斯,有16行要评估,而TicTacToe有8行,但是人工智能对于九个人的莫里斯要慢得多。
如何进一步提高AI的性能?
我一直在做这方面的研究,我发现了使用神经网络来关注极小极大搜索或用神经网络代替评估函数的想法。这些解决方案能否提高我的AI的性能?
有很多方法可以在不涉及神经网络的情况下通过αβ修剪来提高极小值。此外,在像九人莫里斯这样分支因子相对较低的游戏中,神经网络可能会伤害你的人工智能,而不是帮助它。相反,我会研究不同的方法。一个有用的选择是使用具有迭代深化的换位表。这种技术对这种类型的游戏非常有用。下面是一篇关于换位表的文章的链接:https://en.wikipedia.org/wiki/Transposition_table
如果您有关于实现的更具体的问题,chess programming wiki有关于这个主题的好文章。虽然与国际象棋有关,但它应该很容易应用于任何游戏。
https://chessprogramming.wikispaces.com/Transposition表
我在国际象棋和连接4中都使用了这种技术,并看到搜索时间的惊人减少。如果您想要更多关于如何实现此技术的具体信息,请发表评论。