【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 ...
随机推荐
- Notes 20180309 : String第一讲_char的可读序列
实际上在写本文之前,我曾考虑是先探讨面向对象,还是先选择String和Arrays,最后还是选择了后者,并非是面向对象对我们不重要,相反它是Java的灵魂所在,之所以这样的安排是因为这两个是在是我们程 ...
- Activiti6.0 spring5 工作流引擎 java SSM流程审批 项目框架
1.模型管理 :web在线流程设计器.预览流程xml.导出xml.部署流程 2.流程管理 :导入导出流程资源文件.查看流程图.根据流程实例反射出流程模型.激活挂起 3.运行中流程:查看流程信息.当前任 ...
- Java中的类与对象
一.类与对象的概念 1.类:类是一组相同属性.方法的对象的集合:对象是类的具体化. 2.对象具有类所有的特征,类拥有的,对象就拥有. 3.类与对象他们的关系是相对的. 类有什么特点 1) 类是对象的类 ...
- 一次“Error Domain=AVFoundationErrorDomain Code=-11841”的调试
一次"Error Domain=AVFoundationErrorDomain Code=-11841"的调试 起因 最近在重构视频输出模块的时候,调试碰到AVAssetReade ...
- canvas制作的烟花效果
最近感觉canvas挺有意思的,在业余时间没事研究了一下,参考过网上一些思路,话不多说,开始啦. github地址:https://github.com/aWhiteBear/fireworks 演示 ...
- 解决 SSH 不能输入中文的问题
有些应用的进程名称可能是中文,还有一些应用创建的目录可以也会是中文,在 SSH 上使用 debugserver 没有办法输入中文的进程名称,也没办法在 SSH 上操作中文的目录,网上试了一些方法,不过 ...
- centos6.9下安装python3.7
说明 以下所有操作都基于centos6.9 python3.7依赖openssl1.0.2,首先更新系统自带的openssl 建议 升级系统到centos7(系统openssl已升级到1.0.2) 升 ...
- docker swarm实现java项目的发布/滚动更新/回滚/镜像管理
使用docker swarm滚动更新java项目,部署集群,这一切的前提是使用Jenkins+maven进行项目打包,分发等功能 具体可以参考我的另外三篇文章 https://www.cnblogs. ...
- BurpSuite—-Repeater模块(中继器)
一.简介 Burp Repeater 是一个手动修改并补发个别 HTTP 请求,并分析他们的响应的工具.它最大的用途就是和其他 Burp Suite 工具结合起来.你可以从目标站点地图,从 Burp ...
- 用GO写一个连接比特币JSONRPC接口的程序
比特币钱包默认是不开启JSONRPC接口的,要在比特币区块文件夹下新建bitcoin.conf这个文件,并写入以下内容 server=1 rpcuser=xxmm rpcpassword=1234 ...