【RL系列】蒙特卡罗方法——Soap Bubble
“肥皂泡”问题来源于Reinforcement Learning: An Introduction(2017). Exercise 5.2,大致的描述如下:
用一个铁丝首尾相连组成闭合曲线,浸入肥皂泡液,拿起后,可以发现肥皂泡液以这个闭合曲线为边界形成了一个曲面。如何将这个曲面描述出来,便是肥皂泡问题的核心。
若想使得肥皂泡液形成一个稳固的曲面,肥皂泡上的每一个点所受到的合力均为0,所以这意味着该点所处的位置是周边所有点位置的均值(在这里忽略重力的影响,肥皂泡的密度量级与空气相当)。所以在计算曲面时,可以先将闭合曲线投影到x-y平面上,然后用一个点的高度(坐标z)来表示曲面上该点周边所有点位置的均值(该点位置的x,y值是不变的)。
常用的方法是迭代法,依次迭代求解投影到x-y平面上的闭合曲线包围的点的高度值。不过当计算某一个或某几个点的高度时可以使用Monte Carlo Method提高计算效率。
先来尝试一下迭代法求解,这里直接给出算法流程:
- 投影闭合曲线到x-y平面
- 从闭合曲线内的第一个点开始迭代
- 当前被迭代的点在x-y平面上的位置为(x, y),则高度hight,$ H(x, y) $可用该公式计算:$$ H(x, y) = \frac{1}{4}(H(x + 1, y) + H(x - 1, y) + H(x, y + 1) + H(x, y - 1)) $$
- 到达闭合曲线内的最后一个点,判断高度$ H $是否收敛,如未收敛继续迭代。
我们用这个闭合曲线作为实验对象:
计算得到的曲面图形如下:
迭代法有一个缺陷在于,如果需要计算某一点的高度,则必须计算曲面上所有点的高度。对于只是计算某一点的情况,这个方法无疑是效率低下的。在这种情况下,Monte Carlo Method提供了一种非常高效的计算方案。这里可以运用Monte Carlo方法前提是,曲面上某个点的高度可以等效为边界所有点的高度相关于与之距离的加权平均。所以使用Monte Carlo的关键在于,以需要计算的那一点为起始点,开始随机游走,碰到边界上某个点的概率与起始点和该点的距离相关,距离近则概率高,距离远则概率低。在随机游走的过程中,将所碰到的边界点的高度取平均数,即为起始点高度的估计。Monte Carlo Method的算法流程如下:
- 投影闭合曲线到x-y平面
- 确定起始点(x, y),开始迭代
- 随机选择动作开始游走
- 判断是否碰到边界,如碰到边界,记录边界高度值$ H_b $。未碰到则继续游走。
- 判断是否收敛,未收敛则回到第三步重新开始。
- 起始点高度值的估计可以计算为(Num为迭代次数):$$ H(x, y) = \frac{\sum H_b}{Num} $$
可以比较一下两种方法的高度值收敛曲线,以坐标(10, 10)为例:
可以发现在计算坐标(10, 10)的高度值时,Monte Carlo Method的收敛速度比Iteration Method快很多,但准确度却要差一些。
【RL系列】蒙特卡罗方法——Soap Bubble的更多相关文章
- 【RL系列】从蒙特卡罗方法步入真正的强化学习
蒙特卡罗方法给我的感觉是和Reinforcement Learning: An Introduction的第二章中Bandit问题的解法比较相似,两者皆是通过大量的实验然后估计每个状态动作的平均收益. ...
- 【RL系列】马尔可夫决策过程——状态价值评价与动作价值评价
请先阅读上两篇文章: [RL系列]马尔可夫决策过程中状态价值函数的一般形式 [RL系列]马尔可夫决策过程与动态编程 状态价值函数,顾名思义,就是用于状态价值评价(SVE)的.典型的问题有“格子世界(G ...
- 【RL系列】马尔可夫决策过程中状态价值函数的一般形式
请先阅读上一篇文章:[RL系列]马尔可夫决策过程与动态编程 在上一篇文章里,主要讨论了马尔可夫决策过程模型的来源和基本思想,并以MAB问题为例简单的介绍了动态编程的基本方法.虽然上一篇文章中的马尔可夫 ...
- 【RL系列】Multi-Armed Bandit笔记——UCB策略与Gradient策略
本篇主要是为了记录UCB策略与Gradient策略在解决Multi-Armed Bandit问题时的实现方法,涉及理论部分较少,所以请先阅读Reinforcement Learning: An Int ...
- 增强学习(四) ----- 蒙特卡罗方法(Monte Carlo Methods)
1. 蒙特卡罗方法的基本思想 蒙特卡罗方法又叫统计模拟方法,它使用随机数(或伪随机数)来解决计算的问题,是一类重要的数值计算方法.该方法的名字来源于世界著名的赌城蒙特卡罗,而蒙特卡罗方法正是以概率为基 ...
- VMware Workstation 精致汉化系列 使用方法
http://kuai.xunlei.com/d/QqGABAKChQBwMzxR983 迅雷快传 XP系统之家-温馨提示: VMware Workstation 精致汉化系列 使用方法:1.安装 ...
- MCMC(一)蒙特卡罗方法
MCMC(一)蒙特卡罗方法 MCMC(二)马尔科夫链(待填坑) MCMC(三)M-H采样和Gibbs采样(待填坑) 作为一种随机采样方法,马尔科夫链蒙特卡罗(Markov Chain Monte Ca ...
- 蒙特卡罗方法 python 实现2
如果不考虑作图,这里的两个例子可以改写成下面的样子: 求圆周率 import random ''' 蒙特卡罗模拟 投点法计算圆周率 ''' # 投点游戏 def play_game(): # 圆 r ...
- 蒙特卡罗方法 python 实现
蒙特卡罗(Monte Carlo)方法的精髓:用统计结果去计算频率,从而得到真实值的近似值. 一.求圆周率的近似值,采用 投点法 import numpy as np import matplotli ...
随机推荐
- mysql修改数据表自增步长
可以修改系统变量 auto_increment_increment mysql> SHOW VARIABLES LIKE 'auto_inc%'; +---------------------- ...
- 分享cropper剪切单张图片demo
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...
- 如何快速找到指定端口被哪个程序占用并释放该端口(解决bindException)
首先打开打开任务管理器,选择性能模块,下方有打开资源监视器,或者直接搜索资源监视器 在资源监视器中点击侦听端口模块,即可看到正在使用网络端口的应用程序名和pid,如果被占用可以直接使用命令行关闭即可 ...
- Kubernetes(二)-- 搭建(未完待续)
一.部署前规划 1. 操作系统初始化设置 :需要设置好集群机器,关闭防火墙和selinux 2. 创建ca证书和私钥 :集群间通信要加密,那么肯定要有ca的创建,以后就用这一步创建的ca当作证书颁发机 ...
- PLSQL数据库无选项问题解决
添加如下ORACLE_HOME和OCI library 添加之后,关闭plsql再打开会出现如下界面: 其中database为空. 我当时也是在环境变量里面配置了TNS_ADMIN的环境变量为:如下 ...
- S/4 HANA中发票输出切换回NAST
在S/4 HANA中,新的输出管理Output Management叫做SAP S/4HANA output control(输出控制),是基于BRF+的,而不是原来基于NAST的.关于S4新的输出控 ...
- npm audit fix
执行npm install 出现如下提醒 added 253 packages from 162 contributors and audited 1117 packages in 42.157s ...
- 用DBCC CHECK修复SQL2000的数据库一致性问题
) set @databasename='需要修复的数据库实体的名称' exec sp_dboption @databasename, N'single', N'true' --将目标数据库置为单用户 ...
- opencv移植(一)cmake安装
原文:https://blog.csdn.net/Guet_Kite/article/details/78667175?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文链接 ...
- python3 实现一个多级菜单小功能
记录下一下 #!/usr/bin/env python3 ''' 需求:三级菜单 三级菜单,依次进入子菜单 ''' City = { '北京':{ '大兴区':[ '亦庄','黄村','中信新城',' ...