Monte Carlo 的一些想法

来源:互联网 发布:网络编码器 编辑:程序博客网 时间:2024/04/28 05:11

<The art and science of Java> 里面第六章,练习题3有讲到利用Monte Carlo方法来模拟算出PI。

方法如下:

1.假定有一个靶子,靶子为 2X2 的正方形,里面有一个R=1的圆,那么圆与正方形的面积之比为PI/4。

2.向靶子射飞镖,那飞镖向在圆里面的概率就为PI/4。

3.假定向靶子发射N次飞镖,中在靶子上的次数为M。那么M/N接近PI/4,这样就可以求得PI的近似值。N越大,算出来的PI越接近真实的PI。

从中可以看到计算机可以使用暴力去不断的模拟某一些现实中的模拟情况,并且在题中的情况,有完美的把图形与数值结合在一起了。


这让我想起来工作中的Monte Carlo方法,假定有尺寸A,B,C中间有一个gap。那么Gap = A - B - C. 现在A的尺寸为10+/-1,B的尺寸为 4+/-0.5,C的尺寸为5+/-0.5。那么GAP的分布是什么样的情况,一种办法是采用极端的办法,Gapmin = Amin -  Bmax - Cmax. Gapmax = Amax - Bmin - Cmin. 这样得到的Gap尺寸最极端,设计也相对更加的保守,但带来的成本也最大。因为这样的Gap的分布最广,设计需要考虑的也是越多,成本当然越大。

相对真实一些的设计就是采用Monte Carlo的方法去模拟Gap的分布,并可以求出A,B,C的最优解。

1.给出尺寸链,其实就是gap与A,B,C的关系,在这里是Gap = A - B -C.

2.给出A,B, C的分布,正常情况下一般都是正态分布,即给出A,B,C的均值及方差。

3.系统随机的给出N个A,B,C的值,得到对应N个gap的值,这样可以得到gap的分布情况。


以前只是知道,系统在随机模拟的里面,A,B,C的值是是根据前面输入的A,B,C的均值及方差来模拟,但不清楚系统是怎么模拟。

但现在我个人觉得可以采用以下方法进行模拟。

如下是一个正态分布的曲线,任何一个正态分布的面积是1. 那么可以把这个图形分成按照x轴平均画N条线,那么每条线左边的面积分布即为0~1. 可以使用系统模拟随机0~1的数值,那么得到的数可以根据面积的分布得到x的值,那么得到的x就满足这个分布。这样就可以得到满足正态分布的A,B,C。然后去得到gap的值。

0 0
原创粉丝点击