我正在编写一个分布式的Go / Gomoku机器人。
基本上,重点是将树搜索分发到许多计算机上。使用像DFS这样的基本树搜索算法,这将非常简单,因为我可以将搜索空间划分为子树。虽然我宁愿有更高效的东西,比如使用alpha-beta修剪的mini-max - 但从我的理解来看,没有任何共享内存它是毫无意义的。所以我有点卡住了。
任何想法我可以使用哪种算法高效且易于分发? 更重要的是,我在哪里可以找到一些(伪)代码或者实现?
谢谢,
答案 0 :(得分:6)
你需要阅读有关蒙特卡罗树搜索的信息,不是因为它本身更容易分发(它既不比另一个树搜索更容易也更难),而是因为它是最先进的,并且解决这个问题的人是从事该算法的分布式版本。
如果您遇到制作分布式算法的麻烦,则没有理由从较小的算法开始。除非你出于教育原因制作分布式算法,在这种情况下,继续,在分发基本算法的实验中会有一些深刻的教育,并且看到它比非分布式的最先进算法表现更差:)
请参阅Wikipedia page on computer go中的“最新动态”部分。
答案 1 :(得分:2)
尝试Map Reduce方法。例如,请参阅
答案 2 :(得分:1)
DDS*和ABDADA是2个分布式/并行极小极大算法。有些通信是必要的,但这可以通过将某些结果传回控制器来完成。
您提到的更简单的方法就是使用不同的搜索树根进行map reduce。
作为@Pascal Cuoq rightly mentions,蒙特卡洛树搜索是Go中最先进的技术。
在这里,您可以找到对MoGo搜索算法及其并行化方式的详细解释:
http://www.lri.fr/~gelly/paper/nips_exploration_exploitation_mogo.pdf
基于随机游戏的更好结果的节点被更深入地探索。在每个步骤中,选择叶节点用于单层扩展。这可以通过让每台机器选择不同的叶子来扩展。
monte carlo树搜索的一个很好的概述在这里:
http://sander.landofsand.com/publications/Monte-Carlo_Tree_Search_-_A_New_Framework_for_Game_AI.pdf