蒙特卡洛—赌博模型笔记
生活随笔
收集整理的這篇文章主要介紹了
蒙特卡洛—赌博模型笔记
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
大數定理: 在隨機事件的大量重復出現中,往往呈現幾乎必然的規律,這個規律即大數定律。通俗說,這個定理就是在試驗不變的條件下,重復試驗多次,隨機事件的頻率近似于它的概率。偶然中包含某種必然。
個人理解:蒙特卡洛就是一種根據制定好的規則基于不確定性不斷演算得到結果的思想
單倍下注:
每次下注賭注不變,一直賭下去,代碼如下
結果分析:根據大數定理,單倍下注賭久必輸
雙倍下注法:
破解大數定理,使用雙倍下注
在下注過程中如果輸了,則翻倍下注。
比如第一次下注10元輸了,則第二輪下注20元
第二輪輸了則下注40元。(萬一贏了就會把之前輸的賺回來)。在資源有限的情況下,這真是個好方法嗎?
結果分析:
初看貌似是個好方法,真是這樣?
可見隨著次數的增多,破產率猛增
兩種方法聯合演示:
import random import matplotlib.pyplot as pltfig = plt.figure(figsize=(10,10)) # 賭博人數 sampleSize = 100 # 賭資 startingFunds = 10000 # 每次賭金 wagerSize = 100 # 賭博次數 wagerCount = 30000def rollDice():roll = random.randint(1,100)if roll == 100:return Falseelif roll <= 50:return Falseelif 100>roll>=50:return Truedef double_bettor(funds,initial_wager,wager_count,color):global double_bustsglobal double_profitsvalue = funds # 資金wager = initial_wager # 賭注wX = [] # wager XvY = [] # value YcurrentWager = 1previousWager = 'win'previousWagerAmount = initial_wager# 開始下注while currentWager <= wager_count:if previousWager == 'win':if rollDice():value += wagerwX.append(currentWager)vY.append(value)else:value -= wagerpreviousWager = 'loss'previousWagerAmount = wager # 前一次賭注wX.append(currentWager)vY.append(value)if value < 0:double_busts += 1breakelif previousWager == 'loss':if rollDice():wager = previousWagerAmount * 2if(value - wager) < 0: # 錢不夠時wager = valuevalue += wagerwager = initial_wagerpreviousWager = 'win'wX.append(currentWager)vY.append(value)else:wager = previousWagerAmount * 2if(value - wager) < 0:wager = valuevalue -= wagerpreviousWager = 'loss'previousWagerAmount = wagerwX.append(currentWager)vY.append(value)if value <= 0:double_busts += 1breakcurrentWager += 1plt.plot(wX,vY,color) # 畫圖# 分類if value>funds:double_profits += 1def simple_bettor(funds,initial_wager,wager_count,color):global simple_bustsglobal simple_profitsvalue = funds # 資金wager = initial_wager # 賭注wX = [] # wager XvY = [] # value YcurrentWager = 1# 開始下注while currentWager <= wager_count:if rollDice():value += wagerwX.append(currentWager)vY.append(value)else:value -= wagerwX.append(currentWager)vY.append(value)if value <= 0:simple_busts += 1breakcurrentWager += 1plt.plot(wX,vY,color) # 畫圖# 分類if value > funds:simple_profits += 1def Print_result():print("總賭金:",startingFunds)print("開始每次賭金:",wagerSize)print("賭博次數:",wagerCount)print("賭錢人數:",sampleSize)print("Double Bettor Bust Chances:",(double_busts/sampleSize)*100.00)print("Simple Bettor Bust Chances:",(simple_busts/sampleSize)*100.00)print("Double Bettor Profit Chances:",(double_profits/sampleSize)*100.00)print("Simple Bettor Profit Chances:",(simple_profits/sampleSize)*100.00)x = 0 # 雙倍下注法 double_busts = 0.0 double_profits = 0.0 # 單倍下注法 simple_profits = 0.0 simple_busts = 0.0while x < sampleSize:double_bettor(startingFunds,wagerSize,wagerCount,'c')simple_bettor(startingFunds, wagerSize, wagerCount,'k')x += 1plt.axhline(0,color='r') plt.ylabel("Account Value") plt.xlabel("Wager Count") Print_result() plt.show()運行結果:
當賭博次數很大時,雙倍下注破產率大于單倍下注法,但不管怎么說,100個人中贏的人很少,所以珍愛生命遠離賭博。
模型小白,望大佬批評指點。
參考:https://www.bilibili.com/video/BV17D4y1o7J2?from=search&seid=15046903514947720514
總結
以上是生活随笔為你收集整理的蒙特卡洛—赌博模型笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lua语言实现阴阳师自动脚本(内含可运行
- 下一篇: 卷积神经网络模型之——VGG-16网络结