问题标签 [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 投票
1 回答
47 浏览

mathematical-optimization - 优化战斗机器人

想象一下,您应该为一个机器人编写一个算法,该算法将与其他类似准备的机器人战斗。你的机器人整场战斗有 200 点生命值,每轮获得 12 个能量点的设定值(最多 100 轮)。您的机器人必须每一轮都进行攻击,并且可以但不必保护自己。有4种攻击类型和4种相应的防御。当一个机器人失去所有生命值或您超过 100 轮时,战斗结束,在这种情况下,获胜者是战斗结束后拥有更多 HP 的人。每个防御值 4 能量点,并在一轮中阻止给定类型的所有攻击。有 4 种不同的攻击方式 - 钩踢,价值 4 能量点,造成 10 hp,钩拳,价值 3 能量点,造成 6 hp,上勾拳,价值 2 能量点,造成 3 hp,lowkick,价值 1 交易 1。您可以收集所有先前回合的所有数据(机器人 hp 和能量点、机器人攻击集、机器人防御、造成和接收的伤害)。显然,我不希望任何人提出一个完整的解决方案,但是我无法理解它,我也没有真正看到解决这个问题的方法,所以任何要阅读的建议或相关主题都是真的很有帮助。请注意,这通常与 ML 或 AI 无关。只是一个算法。因此,任何要阅读的建议或相关主题都会非常有帮助。请注意,这通常与 ML 或 AI 无关。只是一个算法。因此,任何要阅读的建议或相关主题都会非常有帮助。请注意,这通常与 ML 或 AI 无关。只是一个算法。

0 投票
0 回答
40 浏览

java - 蒙特卡洛树搜索未能做出最佳移动

我已经尝试了几天来实现这个基本实现蒙特卡洛树搜索井字游戏,但我就是不知道为什么它总是无法选择最佳动作。
例如,在某些情况下,它拒绝选择会导致它在那个回合中获胜的动作 - 所以很明显我在某个地方有错误,但我找不到它。

任何帮助将不胜感激,因为我即将放弃......

其他课程可以在 gitlab 链接上查看,因此如果您想全部下载并进行实验,您可以:https ://gitlab.com/Cryosis7/monte_carlo_learning

0 投票
0 回答
220 浏览

python - 为什么这个蒙特卡洛树搜索算法不能正常工作?

问题 我正在编写一个蒙特卡洛树搜索算法来用 Python 下棋。我用自定义评估函数替换了模拟阶段。我的代码看起来很完美,但由于某种原因表现得很奇怪。它很容易识别即时获胜,但无法识别 2 步棋和 3 步棋的棋局。有任何想法吗?

我尝试了什么 我尝试给它更多的时间来搜索,但它仍然无法找到最好的着法,即使它可以保证在两步中获胜。但是,我注意到当我关闭自定义评估并使用经典的蒙特卡洛树搜索模拟时,结果会有所改善。(要关闭自定义评估,请不要将任何参数传递给 Agent 构造函数。)但我真的需要它来处理自定义评估,因为我正在研究用于董事会评估的机器学习技术。

我尝试打印出搜索结果,看看算法认为哪些动作是好的。它始终将 mate-in-2 和 mate-in-3 情况下的最佳移动列为最差。排名基于探索移动的次数(这是 MCTS 选择最佳移动的方式)。

我的代码 我已经包含了整个代码,因为一切都与问题相关。要运行此代码,您可能需要安装 python-chess (pip install python-chess)。

我已经为此苦苦挣扎了一个多星期,而且越来越令人沮丧。有任何想法吗?

0 投票
1 回答
85 浏览

algorithm - 设置优先队列值以优化找到“礼物”的概率

我有一个“门号”的优先队列。我从优先级队列中得到下一个门号(即对应优先级值最低的门),然后开门。门后,可能有礼物,也可能没有。根据礼物的有无,我更新了这个门号的优先级,并将其放回优先级队列中。然后我重复,让下一个门号码打开,等等。

假设每扇门都有不同的礼物补充率(即有些可能每天都会收到新礼物,有些则根本不会),我应该如何更新优先级值以最大化我找到的礼物数量?也就是说,我想最大化我打开有礼物的门与我打开没有礼物的门的比例。

我应该注意,补货率不能保证随着时间的推移而固定/存在随机变化。但我可以在这里简化假设。

这对我来说几乎像是一个蒙特卡洛问题,除了我越经常探索一个节点(门),它的期望值越低。(当然,没有树要构建;我们只需要计算出 depth-1 节点的值。)

最简单的方法是跟踪最后优先级 (LP) 和当前优先级 (CP),delta = CP - LP。如果我们找到礼物,设置下一个优先级 NP = CP + delta - 1;否则设置 NP = CP + delta + 1。我猜这是可行的,但它的优化似乎相当缓慢。

或者我们可以有一个乘法值:NP = CP + delta * shrink 或 NP = CP + delta * grow,其中 shrink < 1 并且 grow > 1。这就是我目前拥有的,而且几个月来似乎都可以正常工作,但是现在我遇到了一些门被背靠背打开的情况(即打开门 D,找到礼物,放回优先队列,D 现在再次成为最佳选择,当然没有找到礼物,现在放回去在优先级较低的队列中),这似乎很糟糕。作为参考,我使用了收缩 = 0.9 和增长 = 1.3。

是否有一个数学公式(如蒙特卡洛)来表达探索门的最佳方式?

0 投票
0 回答
18 浏览

monte-carlo-tree-search - 蒙特卡洛树搜索的选择功能重复找到相同的节点

我已经为我的应用程序实现了蒙特卡洛树搜索,但是我的选择函数反复找到具有最高预期奖励的相同节点(因为每次它选择相同的节点然后进行扩展、推出和反向传播,所以这个节点肯定会是选择)。我首先从根节点开始,然后完全展开它,然后使用选择功能选择一个具有最高 ucb1 值的子节点,然后进行展开、展开和反向传播,然后再次选择展开展开和反向传播。我的实施有什么问题吗?

0 投票
0 回答
39 浏览

algorithm - 为什么蒙特卡洛树搜索的 UCB 公式中有对数(和平方根)?

我从几个来源研究了蒙特卡洛树搜索 (UCT),如下所示: http: //www.incompleteideas.net/609%20dropbox/other%20readings%20and%20resources/MCTS-survey.pdf

但是,我不明白为什么蒙特卡洛树搜索的 UCB 公式中有对数(和平方根)(第 2.4.2 和 3.3.1 节)。

公式如下:

https://i.stack.imgur.com/lFPTK.png

0 投票
0 回答
14 浏览

reinforcement-learning - 采取行动后没有自然下一个状态的 RL 环境

我在编写自定义 RL 环境时遇到了问题,因为它没有通过采取任何行动从一种状态自然过渡到另一种状态。我必须在每个引入随机性的步骤中采样下一个状态。除此之外,还遵循所有其他 MDP 规则。有没有人看过/读过与这个概念相关的任何有趣的论文/想法?