Ley de los números grandes: en un gran número de ocurrencias repetitivas de eventos aleatorios, a menudo existe una ley casi inevitable, que es la ley de los números grandes. En términos sencillos, este teorema consiste en repetir la prueba muchas veces bajo la condición de la misma prueba, y la frecuencia de eventos aleatorios es similar a su probabilidad. Existe una cierta necesidad en el accidente.
Comprensión personal: Monte Carlo es una idea que calcula continuamente los resultados en función de la incertidumbre según las reglas establecidas.
Apuesta única: la
apuesta sigue siendo la misma cada vez que apuesta, y sigue apostando. El código es el siguiente
import random
import matplotlib.pyplot as plt
def rollDice():
roll = random.randint(1,100)
if roll == 100:
return False
elif roll <= 50:
return False
elif 100>roll>50:
return True
def simple_bettor(funds,initial_wager,wager_count):
value = funds # 资金
wager = initial_wager # 赌注
wX = [] # wager X
vY = [] # value Y
currentWager = 1
while currentWager <= wager_count:
if rollDice():
value += wager
wX.append(currentWager)
vY.append(value)
else:
value -= wager
wX.append(currentWager)
vY.append(value)
currentWager += 1
plt.plot(wX,vY) # 画图
# 分类
if value<=0:
return "broke"
elif value<funds:
return "lose"
elif value>funds:
return "win"
elif value==funds:
return "equal"
x = 0
# 赌博人数
people = 100
# funds 赌金
funds = 10000
# 赌注
initial_wager = 100
# 模拟赌博次数
count = 1000
num_win = 0
num_lose = 0
num_broke = 0
num_equal = 0
while x < people:
result = simple_bettor(funds,initial_wager,count)
x += 1
if result == 'win':
num_win += 1
elif result == 'lose':
num_lose += 1
elif result == 'broke':
num_broke += 1
elif result == 'equal':
num_equal += 1
print("%d people are betting"%people)
print("people betting %d times"%count)
print("num_win:",num_win)
print("num_lose:",num_lose)
print("num_equal:",num_equal)
print("num_broke:",num_broke)
print("broken rate:",num_broke/people)
plt.ylabel("money in hand")
plt.xlabel("betting Count")
plt.show()
Análisis de resultados: De acuerdo con el teorema de los números grandes, la apuesta simple perderá durante mucho tiempo.
Método de la doble apuesta:
descifre el teorema de los números grandes y utilice la doble apuesta
. Si pierde durante el proceso de apuesta, duplique su apuesta.
Por ejemplo, si se pierde la primera apuesta de 10 yuanes, la segunda ronda de apuestas es de 20 yuanes y la segunda ronda de apuestas
es de 40 yuanes. (Si gana, recuperará lo que perdió antes). ¿Es este realmente un buen enfoque cuando los recursos son limitados?
import random
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(10,10))
# 赌博人数
sampleSize = 100
# 赌资
startingFunds = 10000
# 每次赌金
wagerSize = 100
# 赌博次数
wagerCount = 30
def rollDice():
roll = random.randint(1,100)
if roll == 100:
return False
elif roll <= 50:
return False
elif 100>roll>=50:
return True
def double_bettor(funds,initial_wager,wager_count):
global double_busts
global double_lose
global double_profits
value = funds # 资金
wager = initial_wager # 赌注
wX = [] # wager X
vY = [] # value Y
currentWager = 1
previousWager = 'win'
previousWagerAmount = initial_wager
while currentWager <= wager_count:
if previousWager == 'win':
if rollDice():
value += wager
wX.append(currentWager)
vY.append(value)
else:
value -= wager
previousWager = 'loss'
previousWagerAmount = wager # 前一次赌注
wX.append(currentWager)
vY.append(value)
if value < 0:
double_busts += 1
break
elif previousWager == 'loss':
if rollDice():
wager = previousWagerAmount * 2
if(value - wager) < 0: # 钱不够时
wager = value
value += wager
wager = initial_wager
previousWager = 'win'
wX.append(currentWager)
vY.append(value)
else:
wager = previousWagerAmount * 2
if(value - wager) < 0:
wager = value
value -= wager
previousWager = 'loss'
previousWagerAmount = wager
wX.append(currentWager)
vY.append(value)
if value <= 0:
double_busts += 1
break
currentWager += 1
plt.plot(wX,vY) # 画图
# 分类
if value>funds:
double_profits += 1
elif value<funds:
double_lose += 1
def Print_result():
print("总赌金:",startingFunds)
print("开始每次赌金:",wagerSize)
print("赌博次数:",wagerCount)
print("赌钱人数:",sampleSize)
print("Doubler Bettor Bust Chances:",(double_busts/sampleSize)*100.00)
print("Doubler Bettor Profit Chances:",(double_profits/sampleSize)*100.00)
print("Doubler Bettor Lose Chances:",(double_lose/sampleSize)*100.00)
x = 0
double_busts = 0.0
double_profits = 0.0
double_lose = 0.0
while x < sampleSize:
double_bettor(startingFunds,wagerSize,wagerCount)
x += 1
plt.axhline(0,color='r')
plt.ylabel("Account Value")
plt.xlabel("Wager Count")
Print_result()
plt.show()
Análisis de resultados:
a primera vista, parece un buen método, ¿es cierto?
Se puede ver que a medida que aumenta el número de veces, la tasa de quiebras se dispara
Se demuestran conjuntamente dos métodos:
import random
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(10,10))
# 赌博人数
sampleSize = 100
# 赌资
startingFunds = 10000
# 每次赌金
wagerSize = 100
# 赌博次数
wagerCount = 30000
def rollDice():
roll = random.randint(1,100)
if roll == 100:
return False
elif roll <= 50:
return False
elif 100>roll>=50:
return True
def double_bettor(funds,initial_wager,wager_count,color):
global double_busts
global double_profits
value = funds # 资金
wager = initial_wager # 赌注
wX = [] # wager X
vY = [] # value Y
currentWager = 1
previousWager = 'win'
previousWagerAmount = initial_wager
# 开始下注
while currentWager <= wager_count:
if previousWager == 'win':
if rollDice():
value += wager
wX.append(currentWager)
vY.append(value)
else:
value -= wager
previousWager = 'loss'
previousWagerAmount = wager # 前一次赌注
wX.append(currentWager)
vY.append(value)
if value < 0:
double_busts += 1
break
elif previousWager == 'loss':
if rollDice():
wager = previousWagerAmount * 2
if(value - wager) < 0: # 钱不够时
wager = value
value += wager
wager = initial_wager
previousWager = 'win'
wX.append(currentWager)
vY.append(value)
else:
wager = previousWagerAmount * 2
if(value - wager) < 0:
wager = value
value -= wager
previousWager = 'loss'
previousWagerAmount = wager
wX.append(currentWager)
vY.append(value)
if value <= 0:
double_busts += 1
break
currentWager += 1
plt.plot(wX,vY,color) # 画图
# 分类
if value>funds:
double_profits += 1
def simple_bettor(funds,initial_wager,wager_count,color):
global simple_busts
global simple_profits
value = funds # 资金
wager = initial_wager # 赌注
wX = [] # wager X
vY = [] # value Y
currentWager = 1
# 开始下注
while currentWager <= wager_count:
if rollDice():
value += wager
wX.append(currentWager)
vY.append(value)
else:
value -= wager
wX.append(currentWager)
vY.append(value)
if value <= 0:
simple_busts += 1
break
currentWager += 1
plt.plot(wX,vY,color) # 画图
# 分类
if value > funds:
simple_profits += 1
def 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.0
while x < sampleSize:
double_bettor(startingFunds,wagerSize,wagerCount,'c')
simple_bettor(startingFunds, wagerSize, wagerCount,'k')
x += 1
plt.axhline(0,color='r')
plt.ylabel("Account Value")
plt.xlabel("Wager Count")
Print_result()
plt.show()
Resultado operativo:
cuando el número de juegos de azar es grande, la tasa de quiebra de doble apuesta es mayor que la del método de apuesta única, pero en cualquier caso, muy pocas victorias de cada 100 personas, así que valore la vida y manténgase alejado de los juegos de azar.
Modelo Xiaobai, espero que el grandullón critique y señale.
Referencia: https://www.bilibili.com/video/BV17D4y1o7J2?from=search&seid=15046903514947720514