1. 程式人生 > >[數學建模]蒙特卡羅方法

[數學建模]蒙特卡羅方法

多少 有用 src 兩個 之前 result 之間 矩陣 條件

1.概念

蒙特卡羅方法(隨機取樣法)是一種計算方法。原理是通過大量隨機樣本,去了解一個系統,進而得到所要計算的值。

2.兩個應用例子

例子1:求π的值。

正方形內部有一個相切的圓,它們的面積之比是π/4。現在,在這個正方形內部,隨機產生1000000個點(即1000000個坐標對 (x, y)),計算它們與中心點的距離,從而判斷是否落在圓的內部。如果這些點均勻分布,那麽圓內的點應該占到所有點的 π/4,因此將這個比值乘以4,就是π的值。

技術分享

MATLAB實現:

N=1000000; %隨機點的數目

x=rand(N,1); %rand 生成均勻分布的偽隨機數。分布在(0~1)之間

y=rand(N,1); %矩陣的維數為N×1

count=0;

for i=1:N

if (x(i)^2+y(i)^2<=1)

count=count+1;

end

end

PI=4*count/N

例子2:計算積分

計算函數 y = x^2 在 [0, 1] 區間的積分,就是求出紅色曲線下面的面積。這個函數在 (1,1) 點的取值為1,所以整個紅色區域在一個面積為1的正方形裏面。在該正方形內部,產生大量隨機點,可以計算出有多少點落在紅色區域(判斷條件 y < x^2)。這個比重就是所要求的積分值。

技術分享

MATLAB實現:

clear

clc

N=10000;

x=rand(N,1);

y=rand(N,1);

count=0;

for i=1:N

if (y(i)<=x(i)^2)

count=count+1;

end

end

result=count/N

3. 與拉斯維加斯方法的比較

(1)蒙特卡羅算法:假如筐裏有100個蘋果,讓我每次閉眼拿1個,挑出最大的。於是我隨機拿1個,再隨機拿1個跟它比,留下大的,再隨機拿1個……我每拿一次,留下的蘋果都至少不比上次的小。拿的次數越多,挑出的蘋果就越大,但我除非拿100次,否則無法肯定挑出了最大的。——盡量找好的,但不保證是最好的。

特點:采樣越多,越近似最優解;

(2)拉斯維加斯方法:假如有一把鎖,給我100把鑰匙,只有1把是對的。於是我每次隨機拿1把鑰匙去試,打不開就再換1把。我試的次數越多,打開(最優解)的機會就越大,但在打開之前,那些錯的鑰匙都是沒有用的。——盡量找最好的,但不保證能找到。

特點:采樣越多,越有機會找到最優解。

4.更深度的應用

蒙特卡洛樹搜索---深度學習,強化學習

[數學建模]蒙特卡羅方法