- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试通过蒙特卡罗树搜索解决 2048 的变体。我发现 UCT 是一种在探索/开发之间进行权衡的好方法。
我唯一的问题是我见过的所有版本都假设得分是胜率。我怎样才能让它适应一个游戏,其中分数是最后一个状态的棋盘值(value),因此从 1-MAX 开始而不是胜利。
我可以通过除以 MAX 使用常数 c 来标准化分数,但是它会在游戏早期过重探索(因为你的平均分数很差)并在游戏后期过重开发。
最佳答案
事实上,大多数文献都假设您的游戏是 输或赢并给予评分 0 或 1 ,这将变成 胜率当平均超过玩的游戏次数时。然后探索参数 C 通常设置为 sqrt(2),这对于强盗问题中的 UCB 是最佳的。
要了解什么是好的 C 语言,您必须退后一步,看看 UCT 真正在做什么。如果你的树中的一个节点在它的一次部署中得分特别差,那么漏洞利用表明你不应该再次选择它。但是你只玩过一次那个节点,所以它可能只是 倒霉 .为了承认这一点,你给那个节点一个奖金。多少?足以使它成为一个可行的选择 即使它的平均分数是最低的,而其他节点的平均分数可能是最高的 .因为如果有足够的播放次数,可能会发现您的坏节点的一次推出确实是侥幸,而该节点实际上非常可靠,得分很高。当然,如果你得到更多糟糕的分数,那么它可能不是运气不好,所以它不值得更多的推出。
因此,对于从 0 到 1 的分数,sqrt(2) 的 C 是一个很好的值。如果您的游戏有最高可达到的分数,那么您可以 标准化您的分数 通过除以最大值并将您的分数强制为 0-1 范围以适应 sqrt(2) 的 C。或者你不标准化分数而是 将 C 乘以您的最高分 .效果是一样的:UCT 探索奖励足够大,可以让你的劣势节点进行一些推广,并有机会证明自己。
还有另一种方式动态设置 C 这给了我很好的结果。在玩游戏时,您可以跟踪您在每个节点(和子树)中见过的最高和最低分数。这是分数范围可能,这给了你一个暗示 C 应该有多大,以便给没有充分探索的失败节点一个公平的机会。每次我下降到树中并选择一个新的根时,我都会将 C 调整为 sqrt(2) * 分数范围 为新根。此外,随着部署完成并且他们的分数变成新的最高或最低分数,我以相同的方式调整 C。通过在演奏时以这种方式不断调整 C 以及在选择新根时,您可以保持 C 收敛所需的大小 但是 尽可能小以快速收敛 .请注意,最低分数与最高分数一样重要:如果每次推出至少会产生某个分数,那么 C 将不需要克服它。只有最大值和最小值之间的差异才重要。
关于artificial-intelligence - 带有评分系统的 MCTS UCT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36664993/
所以我使用 UCT 在蒙特卡洛树搜索算法中实现了一个转置表。这允许保留游戏状态的累积奖励值,无论在何处以及在整个树中遇到多少次。这提高了在特定游戏状态下收集的信息的质量。 唉,我注意到这会在 UCT
你能解释一下如何构建树吗? 我非常了解节点是如何选择的,但是更好的解释确实会帮助我实现这个算法。我已经有一个代表游戏状态的棋盘,但我不知道(理解)如何生成树。 有人能给我指出一个评论很好的算法实现吗(
我正在尝试通过蒙特卡罗树搜索解决 2048 的变体。我发现 UCT 是一种在探索/开发之间进行权衡的好方法。 我唯一的问题是我见过的所有版本都假设得分是胜率。我怎样才能让它适应一个游戏,其中分数是最后
我正在尝试转换使用 Pandas 的 pd.to_datetime() 将 '11/09/2011 11:33:00 PM +0000' (对象)转换为日期时间变量: df['Datetime'] =
我是一名优秀的程序员,十分优秀!