【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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/130345.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20.5 OpenSSL 套接字RSA加密传输

RSA算法同样可以用于加密传输,但此类加密算法虽然非常安全,但通常不会用于大量的数据传输,这是因为RSA算法加解密过程涉及大量的数学运算,尤其是模幂运算(即计算大数的幂模运算),这些运算对于计…

Openlayers--自定义修改天地图颜色

自定义修改地图颜色 前言效果图1、给titleLayer设置className2、给class设置样式 前言 本篇文章讲解怎样调整地图颜色 效果图 调整前 调整后 1、给titleLayer设置className const arcGISLayer new TileLayer({className:blueLayer,//增加className属性source: new XYZ(…

LV.12 D16 轮询与中断 学习笔记

一、CPU与硬件的交互方式 轮询 CPU执行程序时不断地询问硬件是否需要其服务,若需要则给予其服务,若不需要一段时间后再次询问,周而复始 中断 CPU执行程序时若硬件需要其服务,对应的硬件给CPU发送中断信号&#xff0c…

订单业务和系统设计(一)

一、背景简介 订单其实很常见,在电商购物、外卖点餐、手机话费充值等生活场景中,都能见到它的影子。那么,一笔订单的交易过程是什么样子的呢?文章尝试从订单业务架构和产品功能流程,描述对订单的理解。 二、订单业务…

python自动化运维——模拟键盘鼠标重复性操作Pyautoui

一、程序样式展示 将程序与cmd.xls文件放在同一文件夹,每一步的截图也放在当前文件夹 通过图片在屏幕上面进行比对,找到点击处进行自动化操作 自动化rpa测试 二、核心点 1.Pyautoui模块:主要针对图片进行定位pyautogui.locateCenterOnScree…

Ubuntu系统HUSTOJ 用 vim 修改php.ini 重启PHP服务

cd / sudo find -name php.ini 输出: ./etc/php/7.4/cli/php.ini ./etc/php/7.4/fpm/php.ini sudo vim /etc/php/7.4/cli/php.ini sudo vim /etc/php/7.4/fpm/php.ini 知识准备: vim的搜索与替换 在正常模式下键入 / ,即可进入搜索模式…

竞赛选题 深度学习实现行人重识别 - python opencv yolo Reid

文章目录 0 前言1 课题背景2 效果展示3 行人检测4 行人重识别5 其他工具6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的行人重识别算法研究与实现 ** 该项目较为新颖,适合作为竞赛课题方向&#xff0c…

树莓派结合Nginx,轻松搭建内网穿透服务实现远程访问内部站点

文章目录 1. Nginx安装2. 安装cpolar3.配置域名访问Nginx4. 固定域名访问5. 配置静态站点 安装 Nginx(发音为“engine-x”)可以将您的树莓派变成一个强大的 Web 服务器,可以用于托管网站或 Web 应用程序。相比其他 Web 服务器,Ngi…

(自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载

(自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载 带后台系统PbootCMS内核开发的网站模板,该模板适用于新闻博客网站、自媒体运营网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可&#…

公会发展计划(GAP):经过实战考验的 Web3 任务模式

2020 年 12 月,Yield Guild Games 踏上了一段征程,以表彰兢兢业业的 Web3 游戏玩家所付出的时间和努力,同时为他们提供利用自己的技能促进个人成长的机会。这一旅程的第一步是于 2022 年 7 月推出的公会发展计划(GAP)。…

智慧工厂人员定位系统及uwb定位技术在现代工厂安全管理中的应用【uwb定位系统源码】

uwb定位系统源码 智慧工厂人员定位系统源码 定位系统源码 随着经济的高速发展,现代制造业规模不断扩大,生产车间面积广阔,生产设备日益繁多,生产工人数量多且分散作业,难以进行有效管理和实施全方位风险管控。现代工厂…

基于动力学模型的机械臂pid控制

参考资料: 一、如何实现机械臂的控制 在最常见的对机械臂动力学实现控制的问题中,我们会有一段机械臂末端的期望轨迹S,希望通过对机械臂关节处电机转矩的控制实现末端沿期望轨迹的完美运动。控制问题主要分为镇定和跟踪两种,上面…

使用php打印时间精确到毫秒及毫秒转成11位时间戳

在PHP中,可以使用microtime函数来获取当前时间,包括毫秒。以下是示例代码: // 获取当前时间戳(秒) $time microtime(true); // 将当前时间戳转换为毫秒 $milliseconds round($time * 1000); // 输出当前时间&#…

Android开发知识学习——Kotlin基础

函数声明 声明函数要用用 fun 关键字,就像声明类要用 class 关键字一样 「函数参数」的「参数类型」是在「参数名」的右边 函数的「返回值」在「函数参数」右边使用 : 分隔,没有返回值时可以省略 声明没有返回值的函数: fun main(){println…

怎么测量直线模组的精度?

直线模组是一款比较多变的一种产品,适合多种行业,同时它也适合比较多的环境,是一种比较全面的直线运动的装置。直线模组是非常精密的自动化机械设备,在实践中,应该要严格把握具体精度,并且在必要的时候&…

【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试

本篇文章介绍了使用Keil来对STM32F103C8芯片进行初始工程搭建,以及开发与工程调试的完整过程,帮助读者能够在实战中体会到Keil这个开发环境的使用方法,了解一个嵌入式工程从无到有的过程,并且具备快速搭建一个全新芯片对应最小软件…

基于元学习神经网络的类人系统泛化

Nature 上介绍了一个关于AI在语言泛化方面的突破性研究。科学家们创建了一个具有人类般泛化能力的AI神经网络,它可以像人类一样将新学到的词汇融入现有词汇,并在新环境中使用它们。与ChatGPT 相比,该神经网络在系统性泛化测试中表现得更好。 …

17、Flink 之Table API: Table API 支持的操作(1)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

vite安装Tailwind CSS

安装 - Tailwind CSS 中文网 (nodejs.cn) 这是官网,平常我练习一般会用vite脚手架 我们选择这个vite模块 可选择React和Vue版本的,这里选择react的按照操作,没问题的话就要出问题了 1、在npm run dev的时候我是出现了这么个问题&#xff0c…

234. 回文链表、Leetcode的Python实现

博客主页:🏆看看是李XX还是李歘歘 🏆 🌺每天分享一些包括但不限于计算机基础、算法等相关的知识点🌺 💗点关注不迷路,总有一些📖知识点📖是你想要的💗 ⛽️今…