Я пытаюсь определить оптимальную ставку в игровой комнате, чтобы проверить, могу ли я подтвердить теоретический оптимальный размер ставки критерия Келли.Вот игра.Вы подбрасываете монету 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')