日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

用Python實現蒙特卡羅模擬的詳細教程

 

> Figure 1: The Monte Carlo Simulation method is used in many industries, from the stock market to finance, energy, banking, and other forecasting models. | Source: Pexels

Python/ target=_blank class=infotextkey>Python 的蒙特卡羅仿真方法和應用程序的深入教程

作者:普拉蒂克·舒克拉,羅伯托·伊里翁多

什么是蒙特卡羅模擬?

蒙特卡羅方法是一種使用隨機數和概率來解決復雜問題的技術。Monte Carlo 模擬(或概率模擬)是一種用于了解金融部門、項目管理、成本和其他預測機器學習模型中風險和不確定性影響的技術。

風險分析是我們幾乎做出的每一個決策的一部分,因為我們不斷面對生活中的不確定性、模糊性和多變性。此外,盡管我們擁有前所未有的信息獲取機會,也無法準確預測未來。

蒙特卡羅模擬使我們能夠查看決策的所有可能結果并評估風險影響,從而在不確定性下做出更好的決策。

在這篇文章中,我們將通過五個不同的例子來了解蒙特卡羅模擬方法。

資源:谷歌科拉布實施 |Github

應用:

  • · 金融
  • · 能源
  • · 制造
  • · 工程
  • · 研發
  • · 保險
  • · 石油和天然氣
  • · 運輸
  • · 環境
  • · 其他

例子:

· 硬幣翻轉示例

· 使用圓和方形估算 PI

· 蒙蒂大廳問題

· 布馮投針的問題

· 為什么莊家總是贏

1. 硬幣翻轉示例:

公平硬幣的正面概率為1/2。然而,有什么辦法我們可以用實驗來證明嗎?在此示例中,我們將使用 Monte-Carlo 方法以 5000 次迭代方式模擬硬幣翻轉,以找出為什么正面或反面的概率始終為 1/2。如果我們重復這個硬幣翻轉很多,很多次,那么我們可以達到更高的精度,一個確切的答案,我們的概率值。

用Python實現蒙特卡羅模擬的詳細教程

> Figure 2: Heads and tails, mathematical representation.

 

翻轉硬幣時:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 3: Formula for heads and tails coin example.

 

接下來,我們將用蒙特卡羅方法以實驗方式證明這個公式。

Python 實現:

· 導入所需的庫:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 4: Import the required libraries for our coin flipping example.

 

1. 硬幣翻轉功能:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 5: A simple function randomizing the results between 0 and 1, 0 for heads, and 1 for tails.

 

2. 檢查函數的輸出:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 6: Running the function of coin_flip()

 

3. 主函數:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 7: Calculating the probability and Appending the probability values to the results.

 

4. 調用主函數:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 8: Calling the Monte Carlo main function, along with plotting final values.

 

如圖 8 所示,我們顯示 5000 次迭代后,獲得反面的概率為 0.502。因此,我們如何使用蒙特卡羅模擬來實驗地找到概率。

2. 使用圓和正方形估算 PI:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 9: Simple area of a circle and of a square.

 

用Python實現蒙特卡羅模擬的詳細教程

> Figure 10: Calculation of the area of a circle and square respectively.

 

為了估計 PI 的值,我們需要正方形的面積和圓的面積。要查找這些區域,我們將隨機在曲面上放置點,并計算落在圓內的點和位于正方形內的點。這將給我們估計他們的面積。因此,我們將使用點計數作為區域,而不是使用實際區域。

在下面的代碼中,我們使用 Python 的海龜模塊來查看點的隨機放置。

Python 實現:

1.導入所需的庫:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 10: Importing required libraries for our π example.

 

2.可視化作圖

用Python實現蒙特卡羅模擬的詳細教程

> Figure 11: Drawing the figures.

 

3. 初始化一些必需的數據:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 12: Initializing data values.

 

4. 主函數:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 13: Implementing the main function.

 

5. 繪制數據:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 14: Plotting the data values.

 

6. 輸出:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 15: π approximations using the Monte Carlo methodology.

 

用Python實現蒙特卡羅模擬的詳細教程

> Figure 16: Data visualization of the values.

 

用Python實現蒙特卡羅模擬的詳細教程

> Figure 17: Data visualization of the values.

 

如圖 17 所示,我們可以看到,在 5000 次迭代之后,我們可以獲得 PI 的近似值。此外,請注意,隨著迭代次數的增加,估計誤差也呈指數級下降。

用Python實現蒙特卡羅模擬的詳細教程

 

通過 Python 中的代碼示例,查看初學者的機器學習算法概述。

3. 蒙蒂大廳問題:

假設你在游戲表演,你可以選擇選擇三扇門之一:一扇門后面是一輛車;在其他門后面,山羊。你選一扇門,讓我們說門1,主人,誰知道門后面是什么,打開另一扇門,說門3,它有一只山羊。然后主人問你:你是要堅持自己的選擇還是選擇另一扇門?[1]

切換您選擇的門對您有利嗎?

根據概率,事實證明,切換門對我們有利。讓我們了解如何:

最初,對于所有三個門,獲得汽車的概率 (P) 是相同的 (P = 1/3)。

用Python實現蒙特卡羅模擬的詳細教程

 

> Figure 18: A simulation of the three gates for our game show, showcasing each of the possible outcomes.

現在假設參賽者選擇門 1。接下來,主人打開第三扇門,它有一只山羊。接下來,主持人問參賽者是否想換門?

我們將了解為什么切換門更有利:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 19: A figurative outcome for the door gameshow.

 

在圖 19 中,我們可以看到主機打開車門 3 后,最后兩扇門有車的概率增加至 2/3。現在我們知道第三扇門有一只山羊,第二扇門有車的概率增加到2/3。因此,切換門更有利。

 

Python 實現:

1.導入所需的庫:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 20: Importing required libraries for our game show example.

 

2. 初始化某些數據:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 21: Initializing the doors and empty lists to store the probability values.

 

3. 主函數:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 22: Implementing the main function with a Monte Carlo Simulation method.

 

4. 調用主函數:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 23: Calling the main function of our game show example, and interesting 1000 times.

 

5. 輸出:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 24: Approximate winning probabilities to sticking with your choice or switching doors.

在圖 24 中,我們顯示 1000 次迭代后,如果我們切換門,獲勝概率為 0.669。因此,我們相信,在此示例中切換門對我們的優勢是管用。

4. 布馮投針的問題:

1777年[2][3],法國貴族喬治-路易斯·勒克萊克(Comte de Buffon)發布了以下問題。

假設我們把一根短針掉在有橫條的紙上——針頭躺在穿過其中一條線的位置的概率是多少?

概率取決于被統治紙張的線之間的距離 (d),它取決于我們掉落的針的長度 (l),或者更確切地說,它取決于比率 l/d。對于此示例,我們可以將針頭解釋為 l ≤ d。簡而言之,我們的目的是針不能同時穿過兩條不同的線。令人驚訝的是,布馮的針頭問題的答案涉及PI。

在這里,我們將使用布馮的針頭問題的解決方案,以實驗方式使用蒙特卡羅方法估計PI的價值。然而,在進入之前,我們將展示解決方案是如何派生的,使其更有趣。

定理:

如果將長度為 l 的短針掉到以相同距離 d ≥ l 的相等空間線裁定的紙張上,則針位于穿過其中一條線的位置的概率為:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 25: Buffon's needle problem theorem.

 

可視化投針問題

用Python實現蒙特卡羅模擬的詳細教程

> Figure 26: Visualizing Buffon's needle problem.

 

接下來,我們需要計算穿過任何垂直線的針數。對于要與其中一條線相交的指針,對于 theta 的特定值,以下是針與垂直線相交的最大值和最小可能值。

1.最大可能值:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 27: Maximum possible value.

 

2. 最小可能值:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 28: Minimum possible value.

 

因此,對于 theta 的特定值,針位于垂直線上的概率為:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 29: Probability for a needle to lie on a vertical line formula.

 

上述概率公式僅限于一個值;在我們的實驗中,theta 的值范圍從0到pi/2。接下來,我們將通過集成它來查找實際概率,以結合所有 to 的值。

用Python實現蒙特卡羅模擬的詳細教程

> Figure 30: Probability formula by integrating all possible values for theta.

 

用Python實現蒙特卡羅模擬的詳細教程

> Figure 31: PI estimation.

 

使用布馮投針問題估算 PI:

接下來,我們將使用上述公式來實驗找出PI的值。

用Python實現蒙特卡羅模擬的詳細教程

> Figure 32: Finding the value of PI.

 

現在,請注意,我們有 l 和 d 的值。我們的目標是首先找到 P 的值,以便獲得 PI 的值。要找到概率P,我們必須需要打針和總針的計數。由于我們已經有總針的計數,我們現在唯一需要的東西是打針的計數。

下面是我們如何計算命中針數的可視化表示。

用Python實現蒙特卡羅模擬的詳細教程

> Figure 33: Visual representation to calculate the count of needles.

 

Python 實現:

1.導入所需的庫:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 34: Importing the required libraries for our problem.

 

3. 主函數:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 35: Implementing the Monte Carlo Simulation method to our Buffon problem.

 

3. 調用主函數:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 36: Calling the Monte Carlo Method's main function to our Buffon's problem.

 

4. 輸出:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 37: Data visualization of 100 iterations using the Monte Carlo Method.


用Python實現蒙特卡羅模擬的詳細教程

> Source: Pexels

 

5. 為什么莊家總是贏?

賭場如何賺錢?訣竅很簡單——"你玩得越多,他們賺得越多。讓我們看一下這如何與一個簡單的蒙特卡羅模擬示例。

考慮一個假想的游戲,玩家必須從一袋籌碼中選擇籌碼。

規則:

· 袋子里有1~100個不等的籌碼。

· 用戶可以投注偶數或奇數籌碼。

· 在這個游戲中,10 和 11 是特殊數字。如果我們在偶數上下注,則 10 將計為奇數,如果我們下注賠率,則 11 將計為偶數。

· 如果我們賭上甚至數字, 我們得到 10, 然后我們輸了。

· 如果我們賭奇數, 我們得到 11, 然后我們輸了。

如果我們押注賠率,我們獲勝的概率是49/100。莊家獲勝的概率為 51/100。因此,對于奇怪的賭注,莊家 邊緣是 = 51/100×49/100 = 200/10000 = 0.02 = 2%

如果我們押注均數,用戶獲勝的概率為 49/100。莊家獲勝的概率為 51/100。因此,對于一個奇怪的賭注,莊家的邊緣是 = 51/100×49/100 = 200/10000 = 0.02 = 2%

總之,每1美元的賭注,0.02美元去的會被莊家贏走。相比之下,輪盤賭的最低莊家邊緣為2.5%。因此,我們確信,你將有更好的機會贏得我們想象中的游戲輪盤賭。

Python 實現:

1.導入所需的庫:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 38: Importing the required libraries for our casino problem.

 

2.初始化

用Python實現蒙特卡羅模擬的詳細教程

> Figure 39: Placing bets for odds and even numbers.

 

3. 主函數:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 40: Applying the Monte Carlo Methodology to our casino problem.

 

4. 最終輸出:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 41: Calculating and displaying the final values.

 

5. 運行 1000 次迭代:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 42: Running our function 1000 times.

 

6. 投注數量 = 5:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 43: Data visualization of results when the number of bets equals five.

 

7. 投注數量 = 10:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 44: Data visualization of results when the number of bets equals ten.

 

8. 投注數量 = 1000:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 45: Data visualization of results when the number of bets equals 1000.

 

9. 投注數量 = 5000:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 46: Data visualization of results when the number of bets equals 5000.

 

10. 投注數量 = 10000:

用Python實現蒙特卡羅模擬的詳細教程

> Figure 47: Data visualization of results when the number of bets equals 10000.

從上面的實驗中,我們可以看到,如果玩家在這些游戲上下注較少,他們有更好的盈利機會。在某些情況下,我們得到負數,這意味著玩家失去了所有的錢和累積的債務,而不是盈利。

請記住,這些百分比是我們的模擬游戲,他們可以修改。

結論:

與任何預測模型一樣,仿真將只像我們估計得一樣好。重要的是要記住,蒙特卡羅模擬只代表概率,而不是確定性。然而,蒙特卡羅模擬可以是一個有價值的工具,當預測一個未知的未來。

詳細介紹我們的神經網絡教程,詳細介紹 Python 代碼和數學

免責聲明:本文所表達的觀點是作者的觀點,并不代表卡內基梅隆大學的觀點。這些著作并不打算成為最終產品,而是反映當前思維,同時成為討論和改進的催化劑。

引用:

[1] 概率問題報價, 21 電影, https://www.imdb.com/title/tt0478087/characters/nm0000228#quotes

[2] 喬治-路易斯·勒克萊克,布馮伯爵,維基百科,https://en.wikipedia.org/wiki/Georges-Louis_Leclerc,_Comte_de_Buffon

[3] 布馮投針問題,維基百科,https://en.wikipedia.org/wiki/Buffon%27s_needle_problem

 

(本文翻譯自Towards AI Team的文章《Monte Carlo Simulation An In-depth Tutorial with Python》,參考:https://medium.com/towards-artificial-intelligence/monte-carlo-simulation-an-in-depth-tutorial-with-python-bcf6eb7856c8)

分享到:
標簽:蒙特 卡羅 模擬 Python
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定