蒙特卡洛算法


  是一種以統計抽樣理論為基礎,以計算為手段,通過有關隨機變量的統計抽樣檢檢驗或隨機模擬,以求解問題近似解的一種計算方法。

  求解的步驟:

  1. 統計抽樣
  2. 隨機模擬
  3. 計算手段
  4. 近似解

  理論方法:大數定律

  與拉斯維加斯算法的區別:蒙特卡洛算法是盡量找到最優解,不要求一定是最優解(挑蘋果問題);而拉斯維加斯算法必須要給出最優解,如果不是最優解,那么所得到的結果就沒有意義(開鎖問題)。

  方法舉例:

  • 圓周率π的計算

 

  

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))

  

 

 

  方法總結:

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM