【摘要】:但是我们需要注意的是,尽管这些simulate函数之间是各自独立的,但是它们却会同时去修改整棵博弈树,包括博弈树的生长和每个节点访问次数及获胜次数相关信息。因此,需要注意的是避免多个线程同时修改同一个变量,在程序实现上,主要通过每个线程对变量加锁获得对变量的暂时占有来实现。
19.1.2 围棋程序的并行化处理
在蒙特卡洛博弈树搜索中,最明显也是最需要并行化处理的地方就是每次模拟的过程,包括从根节点走到叶子节点并通过评估器对叶子节点进行评估这一整套流程,也就是Listing17.5中的第17~19行的simulate函数,在蒙特卡洛博弈树的引擎中,我们不难发现,尽管该simulate函数被不断地重复执行上万次甚至几十万次,但是每次和每次之间并没有先后顺序和依赖关系,我们完全可以让多个simulate函数同时执行。
但是我们需要注意的是,尽管这些simulate函数之间是各自独立的,但是它们却会同时去修改整棵博弈树,包括博弈树的生长和每个节点访问次数及获胜次数相关信息。因此,需要注意的是避免多个线程同时修改同一个变量,在程序实现上,主要通过每个线程对变量加锁获得对变量的暂时占有来实现。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。