Notas del modelo de juego de Montecarlo

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.
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquíInserte la descripción de la imagen aquí
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:
Inserte la descripción de la imagen aquía primera vista, parece un buen método, ¿es cierto?
Inserte la descripción de la imagen aquíInserte la descripción de la imagen aquí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:
Inserte la descripción de la imagen aquíInserte la descripción de la imagen aquí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

Supongo que te gusta

Origin blog.csdn.net/weixin_45666249/article/details/114783271
Recomendado
Clasificación