Как казино зарабатывают деньги? Уловка проста - вы играете достаточно долго, увеличивается вероятность проиграть деньги. Давайте посмотрим, как это работает, с помощью простой симуляции Монте-Карло.

Моделирование Монте-Карло - это метод, используемый для понимания влияния риска и неопределенности на финансовые модели, модели управления проектами, затрат и другие модели прогнозирования. Симулятор Монте-Карло помогает визуализировать большинство или все потенциальные результаты, чтобы иметь лучшее представление о риске принятия решения.

Рассмотрим воображаемую игру, в которой наш игрок «Джек» бросает воображаемый кубик, чтобы получить результат от 1 до 100. Если Джек выбрасывает что-нибудь от 1 до 51, дом выигрывает, но если выпало число от 52 до 100, Джек побеждает. Достаточно просто?

Прежде чем моделировать результаты, давайте посчитаем преимущество казино. Преимущество казино показывает преимущество казино при выигрыше ставки. Это средняя прибыль казино от ставки игрока.

Предположим, Джек ставит в этой игре 1 доллар.

Вероятность выигрыша Джека = 49/100

Вероятность выигрыша в казино = 51/100

Ожидаемая прибыль игрока = 1 * (49/100) -1 * (51/100) = -0,02 = -2%

Следовательно, преимущество казино в нашей воображаемой игре составляет 2%. Для сравнения: минимальное преимущество казино в европейской рулетке составляет 2,7%. Короче говоря, у нас больше шансов на победу в нашей воображаемой игре, чем в рулетке.

Теперь давайте смоделируем различные сценарии на Python, чтобы визуализировать различные результаты, если бы игрок продолжал делать ставки непрерывно.

1. Импортируйте необходимые библиотеки

#Import libraries
import random
import matplotlib.pyplot as plt

2. Нам нужен симулятор игральных костей, который выдает значение от 1 до 100 с равномерным распределением вероятностей. Давайте создадим функцию на Python, которая возвращает «True», если игрок выигрывает, и «False», если выигрывает казино.

#Create function for simulating die roll 
#The die can take values from 1 to 100. If the number is between 1 #and 51, the house wins. 
#If the number is between 52 and 100, the player wins.
def rolldice():
    
    dice = random.randint(1,100)
    
    if dice <=51:
        return False
    elif dice >51 & dice <=100:
        return True

3. Создайте функцию, имитирующую ставки. Нам нужно предоставить функции три аргумента:

я. Общая сумма: сумма, с которой игрок начинает (10 000 долларов США).

II. Сумма ставки: сумма ставки игрока в каждой игре (100 долларов США).

iii. Всего воспроизведений: количество раз, когда игрок играл в игру (это значение изменяется для создания различных сценариев).

#Define a function for the play which takes 3 arguments :
#1. total_funds = total money in hand the player is starting with
#2. wager_amount = the betting amount each time the player plays
#3. total_plays = the number of times the player bets on this game
def play(total_funds, wager_amount, total_plays):
    
    #Create empty lists for :
    # 1.Play_number and 
    # 2.Funds available
    # 3.Final Fund
    Play_num = []
    Funds = []
#Start with play number 1
    play = 1
#If number of plays is less than the max number of plays we have set
    while play < total_plays:
        #If we win
        if rolldice():
            #Add the money to our funds
            total_funds = total_funds + wager_amount
            #Append the play number
            Play_num.append(play)
            #Append the new fund amount
            Funds.append(total_funds)
        #If the house wins
        else:
            #Add the money to our funds
            total_funds = total_funds - wager_amount 
            #Append the play number
            Play_num.append(play)
            #Append the new fund amount
            Funds.append(total_funds)
            
        #Increase the play number by 1
        play = play + 1
        
    #Line plot of funds over time
    plt.plot(Play_num,Funds)
    Final_funds.append(Funds[-1])
    return(Final_funds)

4. Наконец, запустите цикл, чтобы вызвать вышеуказанные функции и смоделировать игру для нескольких сценариев. Чтобы быть уверенным в конечных результатах нашей игры, каждый сценарий будет смоделирован 100 раз.

#Call the function to simulate the plays and calculate the remaining #funds of the player after all the bets
#Intialize the scenario number to 1
x=1
#Create a list for calculating final funds
Final_funds= []
while x<=100:
    ending_fund = play(10000,100,5)
    x=x+1
#Plot the line plot of "Account Value" vs "The number of plays"
plt.ylabel('Player Money in $')
plt.xlabel('Number of bets')
plt.show()
#Print the money the player ends with
print("The player starts the game with $10,000 and ends with $" + str(sum(ending_fund)/len(ending_fund)))

5. Давайте визуализируем 7 различных сценариев, используя следующие графики. В каждом сценарии Джек ставит n раз.

Для создания нескольких сценариев используйте блок кода выше (# 4), но измените только выделенный код (показанный ниже), чтобы настроить количество ставок, которые делает игрок.

ending_fund = play(10000,100,5)

Ось x: количество ставок, сделанных Джеком.

Ось Y: баланс счета Джека после каждой ставки.

Каждый график показывает баланс счета Джека, когда он продолжает играть. Кроме того, чтобы узнать конечный баланс Джека, мы вычислим его среднее значение из 100 различных симуляций.

Цель этого эксперимента - ответить на простой вопрос: «Если человек начинает с 10 000 долларов и играет в эту игру n раз (и делает ставку в 100 долларов в каждой игре), в среднем, сколько денег будет в итоге получится игрок? »

Сценарий 1 - ›Количество ставок: 5

Сценарий 2 - ›Количество ставок: 10

Сценарий 3 - ›Количество ставок: 50

Сценарий 4 - ›Количество ставок: 100

Сценарий 5 - ›Количество ставок: 500

Сценарий 6 - ›Кол-во ставок: 1000

Сценарий 7 - ›Количество ставок: 10000

Из имитационного эксперимента мы видим, что у Джека больше шансов получить прибыль (или минимизировать убыток), если он сделает меньше ставок.

Также можно заметить, что сумма проигрыша в каждом сценарии составляет примерно 2% от суммы ставки (то же самое, что и преимущество казино). Например, в нашем последнем сценарии Джек сделал 10 000 ставок по 100 долларов каждая. Таким образом, мы ожидаем, что Джек проиграет примерно (10 000) * (0,02 * 100), что составляет 20 000 долларов.

Более того, в последнем сценарии, когда он сыграл 10 000 раз, средства стали отрицательными, то есть Джек потерял больше денег, чем он начал (в реальной жизни это означает, что Джек потерял все свои деньги).

Короче говоря, ДОМ ВСЕГДА ВЫИГРЫВАЕТ!

Ресурсы:

1. https://pythonprogramming.net/monte-carlo-simulator-python/

2. http://math.info/Misc/House_Edge/

Подключитесь к LinkedIn.

Пожалуйста, найдите записную книжку Python, встроенную ниже: