Hello,大家好,我是茶哩,我們來學習一個有意思的演算法,蒙特卡羅方法,
蒙特卡羅法
- 簡介
- 作業原理
- 基本步驟
- 求圓周率π的python實體
簡介
蒙特卡羅法(統計模擬方法)是通過從概率模型的隨機抽樣進行近似數值計算的方法,蒙特卡羅是一個賭場的名字,是一類基于概率的模型的統稱,
作業原理
- 不斷隨機抽樣
- 逐漸逼近結果
一般來說,采樣越多,越近似最優解,而永遠不是最優解,
基本步驟
蒙特卡羅演算法的基本步驟
蒙特卡羅演算法一般分為三個步驟,包括構造隨機的概率的程序,從構造隨機概率分布中抽樣,求解估計量,
1 構造隨機的概率程序
要求解一個確定性的問題,需要事先構造一個概率程序,將其轉化為隨機性問題,即隨機點落在圓內的概率,而π就是所要求的解,
2 從已知概率分布抽樣
由于各種概率模型都可以看作是由各種各樣的概率分布構成的,因此產生已知概率分布的隨機變數,就成為實作蒙特卡羅方法模擬實驗的基本手段,如本例中采用的就是最簡單、最基本的(0,1)上的均勻分布,而亂數是我們實作蒙特卡羅模擬的基本工具,
3 求解估計量
實作模擬實驗后,要確定一個隨機變數,作為所要求問題的解,即無偏估計,建立估計量,相當于對實驗結果進行考察,從而得到問題的解,如求出的近似π就認為是一種無偏估計,
求圓周率π的python實體
將一個單位圓(1x1)放在一個正方形中,通過計算圓的面積和正方形的面積之比,進而得到圓周率,
向該正方形隨機散點,則每個點落在單位圓上的概率為
π
?
0.
5
2
π*0.5^2
π?0.52 /
1
?
1
1*1
1?1=0.25π,假設總散點數為S,落在圓內的點數為N,只要實驗次數足夠多,就越逼近近似值,
因此,當 S 足夠大時,我們可以簡單認為:0.25π = N/S ,即π = 4N/S
import numpy as np
import random
S = [1e4,1e5,1e6,1e7]# 試驗總次數
r = 0.5 #半徑
for i in S:
N = 0 # 落在圓內的試驗點的個數
for j in range(int(i)):
x = random.random() # 獲取0-1之間的亂數
y = random.random() # 獲取0-1之間的亂數
d = np.sqrt((x-0.5)**2+(y-0.5)**2) # 計算試驗點到圓心的歐式距離的平方
if d<=r: # 通過比較試驗點到圓心的歐式距離與圓半徑的大小,判斷該點是否在圓內
N+=1
else:
pass
PI = 4*N/i
print("實驗總次數:{}\tPI:{}".format(i,PI))

參考:
https://zhuanlan.zhihu.com/p/150729238
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/401531.html
標籤:AI
上一篇:國科大高級AI考試證明題整理
下一篇:資料挖掘十八般武藝(一):決策樹
