Репликация критерия Келли Теоретический результат в Python - PullRequest
0 голосов
/ 01 января 2019

Я пытаюсь определить оптимальную ставку в игровой комнате, чтобы проверить, могу ли я подтвердить теоретический оптимальный размер ставки критерия Келли.Вот игра.Вы подбрасываете монету N Times.Если у вас голова, вы выигрываете в 2 раза больше своей ставки.Если хвосты, вы теряете свою ставку.Согласно критерию Келли, оптимальный размер ставки составляет 0,25 от вашего банковского крена.Мой код показывает ошибочные значения.

См. Слайд 5 ниже: http://people.math.gatech.edu/~shenk/OptionsClub/kellyOptionTalk1.pdf

Чтобы решить эту проблему, я провел N симуляций по N бросков монет в каждом.Кажется, что Центральная предельная теорема мне здесь не помогает.Я провел 1000 симуляций и бросил 1000 монет, и в некоторых случаях я получаю оптимальные размеры ставок около 1.

Есть ли скрытая проблема с моей логикой?

import random
import matplotlib.pyplot as plt
import pandas as pd

#this program simulates a parlor coin game. You flip a coin N times. You 
#always pick Heads. If you bet heads and win your return is 2x your bet. If 
#you bet heads and lose, you lost your bet (not double your bet)

coin_value = ['H','T']
simulations = 10 #number of simulations of the N coin toss game
coin_tosses = 10 #number of times you flip a coin per simulation

game_result = []
for x in range(0,100):

    bet_size = (x/100) #set the bet percentage

    for sim in range(0, simulations): #we run N simulations, which play N 
    #coin tosses per simulation

    bank_roll = 100 #starting bank roll for each simulation

    for coin_toss in range(0, coin_tosses): #we toss the coin N times

        outcome = random.choice(coin_value)

        if outcome == 'H':
            profit_loss = 2 * (bet_size * bank_roll) #Double your bet and 
            #add that to bankroll
            result = 'W'
        elif outcome == 'T':
            profit_loss =  -(bet_size * bank_roll) #Loss your bet and add 
            #that to bankroll
            result = 'L'

        bank_roll = bank_roll + profit_loss 

        #below I create a dataframe which has columns below
        game_result.append([bet_size, result, bank_roll, sim, coin_toss])
     #this is your ending bankroll for each simulation

df = pd.DataFrame(game_result, columns = ['Bet_Size','result','Bankroll', 
'sim', 'coin_toss'])
df = df[df['coin_toss'] == (coin_tosses - 1)] #this selects the last  coin 
#toss for each simulation. Effectively, this is your ending balance after N 
#coin tosses.

x = df.groupby(['Bet_Size'])['Bankroll'].mean() #calculated E[V] by bet 
size by averaging the simulations based on bet size

x.plot(x= 'Bet Size', y = 'Expected Value')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...