蒙特卡羅模擬

2021-08-21 12:21:16 字數 1465 閱讀 5267

最優化問題的計算方法是很重要的,因為很多最優化的問題難於解析地解出來,對於動態模擬,通常人們能夠解析地確定定常態的行為,但是關於瞬態行為的研究則需要計算機模擬,概率模型更加複雜,不具有時間動態特性的模擬有時能夠解析地求解出來,且對於簡單的隨機模型,定常態的結果通常是可用的,但是對於許多情況,概率模型是用模擬的方法解出的。下面我們將討論概率模型中一些最常用的模擬方法。

隨機過程中包含有瞬時或時變的行為的問題通常是很難解析地解出的。蒙特卡羅模擬是有效地解決這一類問題的一般建模技術。模型直觀且易於解釋,同時也是對許多複雜的隨機系統進行建模的僅有的辦法。它是基於諸如拋硬幣這類簡單的隨機化處理的辦法,但通常使用了計算機的偽隨機發生器。由於包含隨機元素,所以每次重複會得到不同的結果。

例:假期即將到來,氣象局預報假期中每天的降雨概率是50%,請問連續3天都下雨的概率是多少?

使用五步分析法。

第一步提出問題。在這個過程中我們選定一些重要的變數,同時明確我們關於這些變數的假設。第一步的結果列於下圖。

第二步選擇建模方法,我們使用蒙特卡羅模擬的方法。蒙特卡羅模擬是可以用於任何概率模型的技術。乙個概率模型包含有若干個隨機變數,必須明確每乙個隨機變數的概率分布。蒙特卡羅模擬使用隨機化的裝置按照™的概率分布給出每個隨機變數的值。因為模擬的結果依賴於隨機元素,所以接連重複同樣的模擬會產生不同的結果,通常蒙特卡羅模擬會被重複若干次,以便於確定平均數或期望的結果。第三步,推導模型的數學表示式。下面給出雨天問題的蒙特卡羅模擬的演算法偽**。

第四步求解問題,我們在計算機上執行上述程式,令引數p=0.5,n=100.看輸出結果。結果顯示100週中有63周下雨超過連續的3天。第五步,你的長達一周的假期到了,你發現氣象台預報每天的降雨概率為0.5,則假期中降雨超過連續3天的概率為60%左右。因此,你要做好不能出去浪的心理準備!最後進行靈敏性分析。對降雨概率p進行分析。對p=0.3,0.4,0.5,0.6,0.7的每一種情況分別進行模擬。結果彙總在下表。

p  0.3

0.40.5

0.60.7

s  可見降雨的週數是隨p的增加而單調遞增的。提高第t天的降雨概率就意味提高了連續3天降雨的概率。我們的模型關於p是相當穩健和靈敏的。

注意:本模型演算法的實現是通過c++來程式設計實現的,由於c++沒有專門的隨機數生成器,而是通過rand()生成偽隨機數,與真正的隨機數有差別。因此結果會有所出入。

c++實現**:

#include#include#include#includeusing namespace std;

int main()

for (k = 1; k <= n; k++)

if (t > 7 && c < 3)

y = 0;

else

y = 1;

s += y;

} cout << n << " 周模擬實驗中有" << s << " 周連續降雨超過等於3天" << endl;

cin >> p;

return 0;

}

蒙特卡羅模擬 蒙特卡羅模擬案例1演示

案例1 在座標象限 中,選取橫座標軸0 1區域和縱座標軸0 1區域形成乙個面積為1的正方形。在這個正方形區域內,隨機產生乙個散點,使它以等可能性隨機出現在區域內任何乙個位置。解決方法 為了隨機產生案例1中要求的散點,先分別定義兩個隨機變數x和y,使得它們都服從 0,1 均勻分布,即對x和y的隨機抽樣...

蒙特卡羅模擬 python實現

基本原理 蒙特卡羅方法通過抓住事物運動的幾何數量和幾何特徵,利用數字方法來加以模擬,即進行一種數字模擬實驗。它是以乙個概率模型為基礎,按照這個模型所描繪的過程,通過模擬實驗的結果,作為問題的近似解。主要步驟如下 1.構造或描述概率過程 2.實現從已知概率分布抽樣 3.建立各種估計量 示例一 值的計算...

蒙特卡羅演算法

蒙特卡羅演算法並不是一種演算法的名稱,而是對一類隨機演算法的特性的概括。說 蒙特卡羅演算法打敗武宮正樹 這個說法就好比說 我被乙隻脊椎動物咬了 是比較火星的。實際上是zen的演算法具有蒙特卡羅特性,或者說它的演算法屬於一種蒙特卡羅演算法。那麼 蒙特卡羅 是一種什麼特性呢?我們知道,既然是隨機演算法,...