当前位置: 首页 > 知识库问答 >
问题:

使用 MPI 并行生成和搜索跳棋游戏树

傅星光
2023-03-14

我试图在C中实现一个最优的跳棋游戏。

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

并且,为游戏树中存在的所有叶节点计算启发式值,该值被定义为棋盘中剩余的机器棋子数减去玩家对手棋子数,因为国王比棋子拥有更强大的能力,启发式将每个国王计算为两个正常棋子,使用该值进行αbeta搜索。

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

我的想法是独立生成树的第一层,并将子节点分布在可用的处理器中,以便使用MPI进一步执行?

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

如果效率不高,请建议我如何实施它的其他方法。谢谢。

共有1个答案

甄永年
2023-03-14

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

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

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

 类似资料:
  • 错误消息: 我正在尝试用java构建一个跳棋游戏(目前在控制台中)。我有6门课: > 板:显示并跟踪板。它是一个名为mySquare的Square对象的2d数组。 CheckerMobile:包含来自X、fromY、toX、toY和布尔isAJump的变量。在Play中,我创建了一个CheckerMobile对象数组来找出哪些移动是有效的。 单件:单个棋盘格件。每个玩家都有一个由12件物品组成的数

  • 嗨,我正在尝试构建一个跳棋游戏,但在计算如何用单个棋子填充2D阵列游戏板时遇到了问题。任何帮助都将不胜感激。 我有两个独立的类RedPiece和BlackPiece来实现接口块。在额外的类板中,我试图将块放在一边,但我遇到了一个问题,在构建新板时找不到可变块: 这是我到目前为止为SetBoard()所做的: 有什么想法吗?谢谢。

  • 我正在为一项任务做一个跳棋游戏。除了一件奇怪的事之外,整个事情都在按它应该的方式运行。这是我的黑板: 我通过给出源行和列,然后是目标行和列来移动。 如果我试图将一个工件移动到无效的位置(不是对角线),我应该打印出一个错误。所以如果我试着从5.2- 对于大多数情况,它都可以工作,但如果我尝试直接向下移动一个空间(例如,2 3- 我卡住了!你知道为什么会这样吗?如果需要,我可以发布更多代码。

  • 五子棋(Gomoku)是一款经典的线上五子棋游戏,5 子连成一线者胜。  

  • 我正在为跳棋电脑游戏做最后一年的机器学习项目。 在这个游戏中,我自动化了一个玩家(随机移动),我希望第二个玩家学习随机性,并通过更多的游戏和试验变得聪明。 正如我所说,第一个玩家是自动化的,所以它工作得很好,但是说到第二个玩家,我对它的动作有些问题。 我正在使用目标函数作为 > v(b)=w0 w1x1 w2x2 w3x3 w4x4 w5x5 w6x6 其中x1=白色碎片数量x2=黑色碎片数量x3

  • 本文向大家介绍原生js实现五子棋游戏,包括了原生js实现五子棋游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了js实现五子棋游戏的具体代码,供大家参考,具体内容如下 html: css: script: 更多有趣的经典小游戏实现专题,分享给大家: C++经典小游戏汇总 python经典小游戏汇总 python俄罗斯方块游戏集合 JavaScript经典游戏 玩不停 javascr