问题标签 [monte-carlo-tree-search]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
221 浏览

python - 并行化蒙特卡洛树搜索

我有一个需要优化的蒙特卡洛树搜索实现。所以我考虑并行化推出阶段。怎么做?(是否有代码示例)。您会推荐任何python模块等吗?

如果这不是发布此内容的正确位置,我深表歉意。

0 投票
2 回答
2152 浏览

python - 如何让我的 AI 算法玩 9 局井字游戏?

为了方便其他人帮助我, 我将所有代码都放在这里https://pastebin.com/WENzM41k 它将从 2 个代理相互竞争开始。

我正在尝试实现蒙特卡洛树搜索以在 Python 中玩 9 板井字游戏。游戏规则类似于常规井字游戏,但有 9 个 3x3 子板。最后一块的放置位置决定了放置你的一块的子板。这有点像终极井字游戏,但如果其中一个子板获胜,则游戏结束。

我正在尝试学习 MCTS,我在这里找到了一些代码:http: //mcts.ai/code/python.html

我在网站上使用了节点类和 UCT 类,并添加了我的 9 板井字游戏状态类和一些其他代码。所有代码都在这里:

运行代码,它将在 2 个代理相互竞争时启动。但是,代理不能很好地玩游戏。糟糕的比赛是不能接受的。例如,如果 ai 在子棋盘中连续获得 2,并且再次轮到他,则他不会下获胜棋步。我应该从哪里开始改进以及如何改进?我试图更改 Node 类和 UCT 类的代码,但没有任何效果。

更新:如果棋盘处于以下状态,则轮到我的 AI(打 X)在棋盘 8(第三排中间子棋盘)上棋。我应该编写特定的代码让 AI 不玩 1 或 5(因为那样对手会赢)还是应该让 AI 来决定。我尝试编写代码告诉 AI,但这样我必须遍历所有子板。

0 投票
0 回答
274 浏览

algorithm - 蒙特卡洛树搜索随机洗牌游戏

我正在尝试为游戏Ticket to Ride编写 AI 。我对人工智能编程比较陌生,所以我需要一些帮助来规划我的 MCTS 实施。

与井字游戏或国际象棋等许多非概率游戏不同,Ticket to Ride 是一款向玩家提供大量未知信息的游戏。此外,由于随机事件(包括游戏中间的牌组洗牌),很难通过延长的比赛来确定未知信息。

这在我的扩展阶段造成了一个主要问题,因为如果在实际游戏中以不同的方式洗牌,我扩展的游戏树可能无法准确地描述游戏的状态。

那么在实现蒙特卡洛树搜索时,如何解决扩展不准确的问题?

0 投票
1 回答
145 浏览

go - 如何运行以下 Golang MCTS 示例?

我试图掌握这个实现的流程并弄清楚如何运行这个 MCTS 实现:https ://github.com/int8/gomcts/blob/master/README.md 。

采取的步骤:我已按照自述文件进行操作,但出现错误。我在 Github 存储库上发布了一个问题,但没有收到任何回复。我浏览了 Golang 文档,但没有什么让我感到兴奋。

任何人都可以快速启动我,以便我可以启动代码并通过控制台打印输出慢慢制定程序流程吗?

我的一些背景知识:我对 Golang 的了解是新的,编程经验最近才刚刚开花。我有一些 Python 经验和 JavaScript 经验。

谢谢你的时间!我会在研究时添加更多内容,如果我最终可以概括这个问题以帮助其他人,我会的。

0 投票
0 回答
77 浏览

neural-network - Leela Zero(新国际象棋引擎)如何工作?

像我这样的傻瓜有简单的解释吗?我知道 Leela 有一个源代码,我听说它使用带有 MCTS(加上 UCT)的神经网络,但是还有很多困难的事情。我需要自己通过运行来训练 Leela 吗?还是我需要从 Internet 下载一些东西?(所谓的训练数据?)如果是这样,我是否需要不断更新这些数据?它在每场比赛中都表现得更强吗?

非常感谢您的提前。

0 投票
1 回答
228 浏览

monte-carlo-tree-search - 什么是神经网络中的 Monte Carlo Beam Search?

Monte Carlo Beam Search 在神经网络和强化学习研究中经常被引用。它是什么以及它与蒙特卡洛搜索有何不同。

0 投票
0 回答
65 浏览

deep-learning - 为什么阿尔法零不会耗尽内存

在阅读了 Deep Mind 的 Alpha Zero 论文后,我了解到我们正在构建一棵树,并且每次看到一个新节点时都会向树中添加一个新节点。对于像围棋(甚至国际象棋)这样具有如此巨大的状态空间和如此长的训练时间的游戏,我们绝对应该超过这样一棵树的任何实际内存大小。但据我所知,这些算法已经实际实现了。我的理解差距在哪里?

0 投票
1 回答
201 浏览

montecarlo - 计算前一个 bestMove 时的蒙特卡洛树是否应该用于提供下一个蒙特卡洛搜索?

我在网上看到了一些 MCTS 实现以及它们是如何在游戏中使用的。根据当时的状态计算每个移动的最佳移动。如果您在人和计算机之间的游戏中有一系列动作,例如:

turn_h(i)=human, turn_c(i)=computer and i 玩家的第 i 步(人/计算机)。

并且对于每台计算机的轮到 i,都有一个相应的状态,用于确定MCTS的第 i 个最佳移动

问题:第(i-1)轮(bestmove)中构建的树是否应该用于第i轮(MCTS bestmove)?

我的意思是,是否应该将作为状态 (n-1) 中最佳移动结果的树用作确定第 i 个状态的最佳移动的输入?

换句话说,我可以重新使用之前回合/最佳移动计算中已经构建的树节点,这样我就不需要再次构建整个树了吗?

我在伪代码中创建了一系列转弯,只是为了弄清楚我使用第 (i-1) 个状态(树)来提供下一个 MCST bestmove 的含义。(当然在现实世界中,下面的逻辑将被实现为迭代/循环构造):

0 投票
1 回答
586 浏览

algorithm - 分数在 0 和 n 之间时蒙特卡罗树搜索的 UCB 公式

我正在使用蒙特卡罗树搜索实现一个播放 2048 的 AI。根据维基百科https://en.wikipedia.org/wiki/Monte_Carlo_tree_search和我在扩展步骤中检查的所有其他来源,您应该使用 UCB 公式来确定要访问的节点wi/ni + c*sqrt(ln(N)/ni)。当最后的分数是01(赢或输)时,这个公式很有效,但是,这个公式在 2048 年不起作用,因为分数是一个介于0n我们想要最大化的值。

当分数介于两者之间时,有谁知道哪个是 MCTS 中用于 UCB 的最佳公式0n所以我可以在 2048 游戏中使用它?

谢谢你。

0 投票
0 回答
73 浏览

python - ValueError: 数组的真值...但它只是一个 int

我有一个整数数组self.N,我正在尝试写self.N[node] +=1,但是每当我写self.N[node]它时,它都会给我一个值错误,因为它有多个元素,它不能。

我希望这self.N[node] += 1只会增加self.Nat index的值node

我在调试器中发现键似乎有问题,但我不知道是什么。

并且节点比较器似乎也不起作用,但我不知道为什么:

我还发现,就在它引发错误之前,调试器说:

尽管它显然一直有效到这一点

board 是一个包含 [6,7] 数组和填充它的方法的节点

一个最小的例子:

但我无法通过另一个 TyepError 来显示上面的错误

这很奇怪,因为节点也不是可迭代的(来自调试) TypeError: 'Node' object is not iterable