Skip to content

January 17, 2020

2

用凯利判据玩转前文中的“一个有趣的小数学游戏”

作者: physixfan

在《为什么频繁交易的人大多数在股市上都赔钱了?一个有趣的小数学游戏也许可以解答 》中我写道了如下有趣的小数学游戏:

假设有这么一家赌场提供了这么一个你可以玩无穷多次的游戏:扔一个硬币,若正面向上,则你的资产变成当下的 1.2 倍;若反面向上,则你的资产变成当下的 0.83 倍。你会选择玩这个游戏吗?

在那篇文章中,我做了个简单的模拟,验证了一下这个游戏会出现的结果:绝大多数玩家玩到最后都归零了,只有极少数玩家能够赢得超过本金的钱,而赢得最多的那个人的最终资产远远超过其他人很多很多。

但若改动一个游戏条件,这个游戏就变得更加有趣了:若玩家可以自己选择投注金额呢?玩家应该如何投注才是最佳方案?

直观的想:如果每次都押注100%金额,那其实就回到了一开始那个不能自己选投注金额的游戏,虽然每次玩收益很大,却有非常大的风险最后归零;如果每次都押注太小,那显然回报会很低。最佳的投注比例一定是平衡了这二者的。事实上这个新的游戏的最佳玩法,正是大名鼎鼎的凯利判据 (Kelly Criterion)阅微堂对凯利判据的讲解也很不错)。凯利判据就是通过最大化资金的log函数的期望而得到的投注比例。证明过程就略过了,基本上就是对这个函数求导就可以。最后得到的凯利判据 (Kelly Criterion)公式为:

K = (pW-qL)/WL

其中p为赢的概率 (0.5),q=1-p为输的概率 (0.5),W为赢的情况下的收益 (0.2),L为输的情况下的损失 (0.17)。在我们这个游戏中,计算得知最佳投注比例 K 约为 0.44。

于是我改动了一下模拟代码,来看看现在用凯利判据投注的话结果如何!

import numpy as np
import matplotlib.pyplot as plt
 
P = 100 # Number of players
N = 30000 # Total times played for one player
win = 1.2
lose = 0.83
Num_of_winner = 0
Money_of_the_luckiest_winner = 0.0
 
W = abs(win-1)
L = abs(lose-1)
Kelly_percentage = (0.5*W-0.5*L)/(W*L)
print(Kelly_percentage) # is about 0.44 in our case
 
for j in range(P):
    m = np.zeros(N)
    m[0] = 10000.0
    for i in range(1,N):
        if np.random.randint(2):
            m[i] = m[i-1]*win*Kelly_percentage + m[i-1]*(1-Kelly_percentage)
        else:
            m[i] = m[i-1]*lose*Kelly_percentage + m[i-1]*(1-Kelly_percentage)
 
    if m[-1]>m[0]:
        Num_of_winner += 1
    if m[-1]>Money_of_the_luckiest_winner:
        Money_of_the_luckiest_winner = m[-1]
    plt.semilogy(m)
 
 
print(Num_of_winner)
print(Money_of_the_luckiest_winner)
plt.xlabel('Times played')
plt.ylabel('Money')
plt.show()

这下100个玩家全部最终资产大于初始本金了,最幸运的玩家最终的资产都是10^60+这种量级了… 在对数坐标轴下,所有玩家的资产都几乎直线上涨了。

不知你是否有跟我一开始一样的一个疑惑:如果只是选择一个固定的投注比例,似乎只是让这个游戏每次赢的少了点,输的也少了点而已,为什么仅仅如此选择一个投注比例就可以扭转归零的颓势了呢?其实具体把数字计算一下就明白了:原本赢则变1.2倍,输则变0.83倍的游戏,若固定44%的投注比例,就变成了赢则变1.088倍,输则变0.9252倍。1.088*0.9252是多少呢?1.0066176!大于1了!这就解释的通为啥所有玩家的资产都纷纷上涨了。

凯利判据貌似在投资中挺有用的,本文这个简单的小数学游戏也算是给大家一个直观印象了吧!

//感谢zhiqiang提供的宝贵讨论!

Read more from Interesting Maths

Share your thoughts, post a comment.

(required)
(required)

Note: HTML is allowed. Your email address will never be published.

Subscribe to comments