Q122:PBRT-V3,提高Monte Carlo积分计算效率的方法——Russian Roulette和Splitting(13.7章节)
来源:互联网 发布:移动端网页聊天室源码 编辑:程序博客网 时间:2024/05/30 19:34
提高Monte Carlo积分计算效率的本质:
减少那些对结果贡献小的采样点的数目!
特别声明:“提高效率”的前提是不能影响计算结果的精确度。
一、Russian Roulette
以“路径形式的光传播方程”为例来进行说明。
方程截图如下:
这个结果是由“无数条长度分别为1、2、3、……的路径上返回的光”累加而成。
咱用beta(n)表示长度为n的路径上返回光的比例(或者说“效率”吧);Le(n)表示长度为n的路径最终打到的光源的光的辐射率。
这样,长度为n的路径上贡献的光P(n)=beta(n)*Le(n)
根据能量守恒:路径的长度越长,该路径上返回的光(能量)越少(即,对计算结果的贡献越小)。
即:beta(1)>beta(2)>beta(3)>……>beta(n-1)>beta(n)>……
这个时候,就考虑“扔掉”那些贡献小的路径。当然,不能直接“扔掉”,这样肯定会影响计算结果。咱得以一种“不会影响计算结的”方式来扔掉。
假设咱想“扔掉”长度>=n的路径。
Russian Roulette方法是怎么做的呢?
这个长度>=n的路径要不要扔掉,咱给这件事情设定个概率q:
有q的概率,扔掉,P(n)=0;
有(1-q)的概率,不扔掉,P(n)=P(n)/(1-q);
既然是想扔掉,那么q的值应该相对比较大嘛(不然怎么会有这种想法呢?)。
那么怎么设定这个q呢?
前面,不是提到是因为beta(n)很小了,所以才有“扔掉”的想法啦。
那么,就选q=1-beta(n)。
(这样,在beta(n)很小的情况下,对应路径被扔掉的可能性就比较大啦,从而提高了计算效率)
Russian Roulette方法,设事件为F;称q为“终止概率”;终止时赋值c(前面例子中c=0);未终止时赋值(F-qc)/(1-q),使用Russian Roulette方法之后的事件为F’。即:
Russian Roulette方法可以提高计算效率,但是不改变结果的“期望”。
二、Splitting
Russian Roulette减少了贡献小的成分的计算(即,减少相应的采样数目)。
Splitting的本质也是一样的,但是针对的使用情形不一样。
针对这中积分:
对积分的各个维度分别(Splitting)采样。
- Q122:PBRT-V3,提高Monte Carlo积分计算效率的方法——Russian Roulette和Splitting(13.7章节)
- 蒙特卡洛(Monte Carlo)积分的入门
- R语言由Monte Carlo方法计算积分
- Monte Carlo(蒙特卡洛积分)
- PBRT学习笔记:利用Monte Carlo算法模拟积分
- 蒙特卡洛(Monte Carlo)法求定积分
- Monte Carlo方法的基本思路
- 蒙特卡洛方法(Monte Carlo)
- Q133:PBRT-V3,BSSRDF的采样(15.4章节)
- 蒙特卡罗方法(Monte Carlo method)
- 蒙特卡罗方法(Monte Carlo method)
- 蒙特卡洛方法(Monte Carlo Method)
- 蒙特卡罗(Monte Carlo)方法
- 蒙特卡罗(Monte Carlo)方法
- Monte Carlo方法
- 俄罗斯轮盘(Russian Roulette)
- Q130:PBRT-V3,非均匀介质的采样(11.3.3章节、15.2.2章节)
- 数学建模(7)——蒙特卡罗算法(Monte Carlo)
- Base64编码原理分析
- stm32 printf 死机
- xcode模拟器默认弹出默认键盘
- android应用与Linux内核驱动数据交互
- wampserver修改默认端口80问题
- Q122:PBRT-V3,提高Monte Carlo积分计算效率的方法——Russian Roulette和Splitting(13.7章节)
- opecncv之运动物体检测
- 分割List集合
- 多个servlet间跳转技术的细节
- Hbase 查询过程详解(基于hbase0.98版本后分析的)
- 多个脚本调用同一个函数的方法
- Sublime text!行首,行尾,批量编辑!
- android之APP模块编译
- CodeForces697C【LCA】