1

我正在尝试在 C 中实现一个最佳的跳棋游戏。

为了找到机器可以做出的棋盘的最佳移动,我通过固定深度,基于棋盘的当代状态,使用 C 中的 (GLib)生成了一个n 元博弈树。

并且,为游戏树中存在的所有叶节点计算启发式值,该值定义为棋盘中剩余的机器棋子数减去玩家对手的棋子数,因为国王比棋子具有更强大的能力,启发式计数每个国王作为两个普通棋子,使用它应用 alpha beta 搜索。

更有可能的是,增加游戏树的深度最终会产生优化的移动,如果我尝试增加深度,它会花费大量时间来生成树并进行启发式搜索。

我的想法是独立生成树的第一级并在可用处理器之间分配子节点,以便使用 MPI 进一步执行

可能吗?如果是,我如何使用 MPI 并行化树生成和启发式搜索?

如果它效率不高,请向我建议一些其他方法来实现它。谢谢。

4

1 回答 1

0

好吧,它可以并行化,问题是,你期望得到多少改进。您可能正在循环中生成初始状态的儿子 - 在第一级,它可以通过在线程之间拆分n儿子的创建来并行化。k由于这些任务对计算的要求很高(递归地创建更多的子树),因此它应该是相当高效的线程。

但是,由于您的树的分支因子可能大于核心数(或类似数量),即使您的并行化是线性有效的(并且不会),您也只能多生成一层.

你使用 alpha-beta 修剪吗?我相信它会带来比这种并行化的东西更大的好处。

于 2013-12-21T09:58:57.583 回答