是一種以統計抽樣理論為基礎,以計算為手段,通過有關隨機變量的統計抽樣檢檢驗或隨機模擬,以求解問題近似解的一種計算方法。
求解的步驟:
- 統計抽樣
- 隨機模擬
- 計算手段
- 近似解
理論方法:大數定律
與拉斯維加斯算法的區別:蒙特卡洛算法是盡量找到最優解,不要求一定是最優解(挑蘋果問題);而拉斯維加斯算法必須要給出最優解,如果不是最優解,那么所得到的結果就沒有意義(開鎖問題)。
方法舉例:
- 圓周率π的計算
import random if __name__ == "__main__": count = 0 for i in range(100000): x = random.random() y = random.random() if (x - 0.5)**2 + (y - 0.5)**2 <= 0.25: count += 1 pi = 4 * (count / 100000) print("%.2f" % pi)
- 蒙特卡洛方法求定積分
import random if __name__ == "__main__": count = 0 for i in range(100000): x = random.uniform(0, 3) y = random.uniform(0, 9) if x**2 >= y: count += 1 print("%.1f" % (27 * count / 100000))
方法總結: