优化minimax算法

我已经在JavaFX中制作了TicTacToe和Nine Man's Morris的游戏,并为每个游戏实现了AI。 对于Nine Men's Morris,我还没有实施磨机,因此现在更像是复杂的TicTacToe。 我已经使用了alpha-beta修剪的minimax算法,虽然AI做了相当不错的动作,但Nine Men's Morris的计算动作非常缓慢。 如果我让AI玩整场比赛,那需要几分钟的时间。

对于评估函数,我一直使用评估板上每条线的函数,其中线值为:

100为三合一,

10个用于2合1线,

1用于1-in-a-line,

对于对手细胞为负(-100,-10,-1)

否则为0。

Minimax算法或多或少是相同的,但对于Nine Men's Morris,有16条线需要评估,与TicTacToe中的8条线相反,但AI对于Nine Men's Morris来说要慢得多。

我如何进一步提高我的AI的性能?

我一直在研究这个问题,并且我发现了使用神经网络来集中极小极大搜索或用神经网络替代评估函数的想法。 这些解决方案可以提高我的AI的性能吗?


有许多方法可以在不涉及神经网络的情况下通过alpha beta修剪来改善极小极大值。 此外,在像九个男性莫里斯那样的分支因子相对较低的游戏中,神经网络很可能会伤害您的AI,而不是帮助它。 相反,我会研究不同的方法。 一个有用的选择是使用迭代加深的换位表。 这种技术对于这种类型的游戏非常有用。 以下是有关换位表的文章的链接:https://en.wikipedia.org/wiki/Transposition_table

如果您有更具体的问题涉及实施,国际象棋编程维基有关该主题的文章写得很好。 虽然与国际象棋有关,但应用于任何游戏都应该很容易。

https://chessprogramming.wikispaces.com/Transposition+Table

我已经在国际象棋和连接4中使用了这种技术,并在搜索时间中看到了极大的减少。 如果您想了解如何实施这项技术的更多具体信息,请发表评论。

链接地址: http://www.djcxy.com/p/56403.html

上一篇: Optimizing minimax algorithm

下一篇: beta pruning consecutive moves for same player