【Algorithm】最容易理解的蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)算法

news/2024/10/20 3:31:36/

看了不少解读和笔记,本文把最容易理解的解读做个总结。

1. 蒙特卡洛方法

蒙特卡洛方法(Monte Carlo method),是一种“统计模拟方法”。20世纪40年代,为建造核武器,冯.诺伊曼 等人发明了该算法。因赌城蒙特卡洛而得名,暗示其以概率作为算法的基础。

假设我们要计算一个不规则形状的面积,我们只需在包含这个不规则形状的矩形内,随机的掷出一个点,每掷出一个点,则N+1,如果这个点在不规则图形内则W+1。落入不规则图形的概率即为 W/N。当掷出足够多的点之后,我们可以认为:不规则图形面积=矩形面积*W/N。

例如:计算如下红色图形的面积:
在这里插入图片描述

# -*- coding: utf-8 -*-import numpy as np
import matplotlib.pyplot as plt
import mathdef func(x):a = 0.1 * x ** 1.0/3b = np.sin(x / math.pi)y = a + (b + 0.1 * x) * x ** 2 + xreturn ydef integral():n = 20000000x_min, x_max = 0, 2.0y_min, y_max = 0, 6.0# count = 0, 随机抛点x = np.random.uniform(x_min, x_max, size=(n, 1))y = np.random.uniform(y_min, y_max, size=(n, 1))yy = func(x)c = np.sum(yy > y)ratio = c / float(n)res = ratio * 2.0 * 6.0print(res)integral()# 3.6831354000000003

2. 蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)算法

了解了上面 蒙特卡洛方法 不是MCTS就行,MCTS只是在一定程度上借用了上面的原理,看一百篇静态的文章都不如看一篇动态的视频(一定重点理解视频中的示例变化过程):
b站-AI如何下棋?直观了解蒙特卡洛树搜索MCTS!!!

2.1 几个重要笔记

在这里插入图片描述
重点:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
这里的终结指的是整个算法的终结,可以给出具体action了
simulation中(即rollout),如何确定terminal state以及terminal state的价值是另外一个话题(见下)。

2.2 几个注意点

如何确定terminal state以及terminal state的价值?

  1. 对于一般胜负类的游戏,可简单粗暴的用胜利或者失败作为游戏结局,胜利价值为1,失败价值为0
  2. 对于其他更复杂的场景,可以自行定义价值函数,比如用的步骤越多价值越低。

MCTS是如何利用蒙特卡洛方法思想的?

当重复的次数多了以后,每个节点的ucb值其实就代表了它价值的真实值(这个值是一个相对概念,相对于同层的其他节点,值越大,就代表越好),这样就能指导采用哪个节点行动了。

参考

蒙特卡洛树搜索最通俗入门指南
蒙特卡罗方法、蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)初探
【最佳实战】蒙特卡洛树搜索算法
面向初学者的蒙特卡洛树搜索MCTS详解及其实现
【详细原理】蒙特卡洛树搜索入门教程!
git-MCTS代码

b站-AI如何下棋?直观了解蒙特卡洛树搜索MCTS!!!
b站-【强化学习】规划与学习-蒙特卡洛树搜索 MCTS


http://www.ppmy.cn/news/1192190.html

相关文章

[ 云计算 | AWS 实践 ] 使用 Java 列出存储桶中的所有 AWS S3 对象

本文收录于【#云计算入门与实践 - AWS】专栏中,收录 AWS 入门与实践相关博文。 本文同步于个人公众号:【云计算洞察】 更多关于云计算技术内容敬请关注:CSDN【#云计算入门与实践 - AWS】专栏。 本系列已更新博文: [ 云计算 | …

Spring - 手写模拟Spring底层原理

手写Spring 定义配置类AppConfig ComponentScan("com.spring.zsj") public class AppConfig {Beanpublic ApplicationListener applicationListener() {return new ApplicationListener() {Overridepublic void onApplicationEvent(ApplicationEvent event) {System…

【flink】flink获取-D参数方式

参考官网 一、idea 本地运行 使用Flink官方的ParameterTool或者其他工具都可以。 二、集群运行flink run/run-application (1)ParameterTool 获取参数 以-D开头的参数: ParameterTool parameter ParameterTool.fromSystemProperties()…

大厂信息泄露-漏洞复现

目录 大唐电信AC简介 资产收集 漏洞复现 修复建议 免费领取安全学习资料包!(私聊进群一起学习,共同进步)​编辑 大唐电信AC简介 大唐电信科技股份有限公司是电信科学技术研究院(大唐电信科技产业集团&#xff09…

XSAN数据恢复-存储空间架构迁移时误格式化存储系统的XSAN数据恢复案例

XSAN数据恢复环境: 昆腾存储,MAC OS操作系统,存放视频类数据(MXF、MOV等格式文件)。 XSAN故障&检测: 将存储空间从XSAN架构迁移到STORNEXT架构后,存储空间中数据全部丢失。 故障存储中一共…

MATLAB野外观测站生态气象数据处理分析实践应用

1.基于MATLAB语言 2.以实践案例为主,提供所有代码 3.原理与操作结合 4.布置作业,答疑与拓展 示意图: 以野外观测站高频时序生态气象数据为例,基于MATLAB开展上机操作: 1.不同生态气象要素文件的数据读写与批处理实现 …

MySQL 权限表db、tables_priv、columns_priv和procs_priv

db表 db 表比较常用,是 MySQL 数据库中非常重要的权限表,表中存储了用户对某个数据库的操作权限。表中的字段大致可以分为两类,分别是用户列和权限列。 用户列 db 表用户列有 3 个字段,分别是 Host、User、Db,标识从…

文件字符流的使用

文件字符输入流 概述 文件字符输入流:FileReader。 作用:以内存为基准,把磁盘文件中的数据以字符的形式读取到内存中去。 为什么要用? 字节流读取中文时为了避免乱码需要一次性读到字节数组里,如果文件很大的话&a…