蒙特卡洛模擬


原文鏈接:這里
0.什么是蒙特卡洛模擬

蒙特卡洛模擬也稱為隨機抽樣法或統計實驗法,是一種以統計理論為指導的風險分析技術,它的實質是按一定概率分布產生隨機數的方法,來模擬可能出現的隨機現象。由於各個自變量參數的狀態概率值是通過大量的客觀統計抽樣得到的,所以又稱客觀概率法

1.原理介紹

在一個簡單的銷售關系中,評價指標Y(假定為總利潤或收益率等)是自變量Xi(X1,X2,X3,……,Xi) (可以分別表示產量,售價,成本,運輸費等等)的多元函數關系。即:

,,,Z=f(X1,X2,X3,……Xi)

根據大量的統計資料,分別確定各個自變量參數的概率分布,並根據每一個自變量的概率分布情況,確定其所產生隨機數的分布,在此基礎上,分別隨機取得各個變量的一個樣本值,來計算一次目標函數。

簡言之就是統計多因素同時變化對於評價指標的影響。

2.工具及方法

使用蒙特卡洛模擬比較有名的工具是Crystal Ball(水晶球),使用水晶球要配合excel,它是excel的一個插件。使用水晶球的主要步驟是:
(1)建立電子表格模型
(2)規定關於概率變量的假設
(3)規定預測單元,即有關輸出變量
(4)設定重復次數
(5)運行模擬
(6)解釋結果

3.蒙特卡洛一些案例

(1)概率類問題

拿最簡單的一個扔色子的案例來解釋一下。假設現在有兩個色子,需要統計同時出現色子為兩個6這個事件N,然后一共投了M次,用N除以M就是結果。在這個例子中,蒙特卡洛會做的是先大量模擬扔色子,並記錄同時出現兩個6的次數。然后用發生次數除以總次數就得出結果了。

(2)數學求近似解

我們求一下f(x)=x3在[0,2]上的積分,我們用蒙特卡洛的方法實現一下,

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2, 1000)
y = x ** 3
plt.plot(x, y)
plt.fill_between(x, y, where=(y > 0), color='red', alpha=0.5)
plt.show()

整個區域在一個2*8的方塊里面,我們用蒙特卡洛方法進行模擬,模擬1000個點,看看有多少點落在紅色里面,(用count表示落在紅色區域的數量,用N表示總數量)

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2, 1000)
y = x ** 3
plt.plot(x, y)
plt.fill_between(x, y, where=(y > 0), color='red', alpha=0.5)
 
 
N = 1000
points = [[xy[0] * 2, xy[1] * 8] for xy in np.random.rand(N, 2)]
plt.scatter([x[0] for x in points], [x[1] for x in points], s=5, c=np.random.rand(N), alpha=0.5)
plt.show()

然后計算紅色區域占的比重

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2, 1000)
y = x ** 3
plt.plot(x, y)
plt.fill_between(x, y, where=(y > 0), color='red', alpha=0.5)
 
 
N = 1000
points = [[xy[0] * 2, xy[1] * 8] for xy in np.random.rand(N, 2)]
plt.scatter([x[0] for x in points], [x[1] for x in points], s=5, c=np.random.rand(N), alpha=0.5)
 
 
count = 0
for xy in points:
if xy[1] < xy[0] ** 3:
count += 1
print((count / N) * (2 * 8))

程序運行10次,結果分別是

4.224  4.112  3.84  3.68   3.872   3.984  3.92  4.192   4.096  3.808

可以看出與正確結果4相差0.2左右。如果模擬次數改成10000次,運行10次結果分別是

4.0544  3.9248  4.0064   3.9072  4.0176  4.1264  4.0256  4.008  4.008 4.0624   

可以看出,隨着模擬次數的增加,模擬答案越來越接近正確值。也就是樣本的數量越大,誤差越小。

 


免責聲明!

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



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