当前位置: 首页 > news >正文

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

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

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

相关文章:

  • 华纳云:centos系统中怎么查看cpu信息?
  • 【智能座舱系列】- 深度解密小米Hyper OS,华为HarmonyOS区别
  • 【从0到1设计一个网关】过滤器链的实现---实现负载均衡过滤器
  • postgresql|数据库|SQL语句冲突的解决
  • 2023年CCF中国开源大会“大模型时代的智能化软件工程新范式”分论坛成功举行...
  • zookeeper安装配置
  • 基于nodejs+vue客户管理管理系统
  • 天拓四方分享:企业安全生产管控系统的构建、实施与优化
  • ip划分与私公网ip、ip的传递
  • 供应链ERP之合同:创建、修订与模板
  • 【PyQt学习篇 · ⑥】:QWidget - 事件
  • 数据结构详细笔记——二叉树
  • 数据分析师的工作内容、工作目标、必备工具、能力模型
  • linux查看文件夹使用情况以及查看文件大小
  • 【K8S】二进制安装
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • Angular Elements 及其运作原理
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • Elasticsearch 参考指南(升级前重新索引)
  • If…else
  • Linux CTF 逆向入门
  • React-Native - 收藏集 - 掘金
  • redis学习笔记(三):列表、集合、有序集合
  • 从setTimeout-setInterval看JS线程
  • 从零搭建Koa2 Server
  • 翻译--Thinking in React
  • 官方解决所有 npm 全局安装权限问题
  • 聊聊directory traversal attack
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 前端路由实现-history
  • 入门级的git使用指北
  • 数据结构java版之冒泡排序及优化
  • 我的面试准备过程--容器(更新中)
  • 学习JavaScript数据结构与算法 — 树
  • 移动端解决方案学习记录
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • # 数据结构
  • #if和#ifdef区别
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (1)常见O(n^2)排序算法解析
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转)Linq学习笔记
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .NET Core WebAPI中封装Swagger配置
  • .Net Winform开发笔记(一)
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET企业级应用架构设计系列之技术选型
  • .NET企业级应用架构设计系列之开场白
  • .NET中的Exception处理(C#)
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • ??javascript里的变量问题