圣彼得堡彩票,概率蟒蛇,

时间:2015-07-16 22:25:06

标签: python probability

以下问题引用Project Euler Problem 499,可在此处找到。简而言之,这就是问题所在:一个赌徒以美元开头,他可以用一美元来赌博。一旦他开始玩,他就向经销商支付m美元,他获得1美元的底池。然后他翻了一个公平的硬币。如果硬币落在头上,他的底池加倍,他又玩了。如果硬币落在尾巴上,赌徒将占据整个底池,并且他必须再次向经销商支付m美元的起始费用以获得他的底池。对于m = 2 $和s = 2 $,他从未用完钱的概率是多少?

我的策略是创建一个带有分支概率树的python脚本,该树将告诉我某个分支上的所有可能结果(例如,25次掷币后的所有可能性)。这是脚本:

!

我认为随着树上层数的增加,答案会越来越准确。在测试这个理论时,我惊讶地发现2磅成本和2磅初始量的失败率稳定在35.4%左右,而不是问题给我的预期的25.2%。

一些可能的原因可能是我假设给定线路上的所有非故障将永远继续,但我不知道如何解释这一点而不添加另一个分支,从而重复问题。任何见解将不胜感激。

1 个答案:

答案 0 :(得分:0)

对于P2(2),对于起始财富为2的游戏,付费2,我使用一种梯度下降方法来达到示例给出的答案。

l={x:1.0/2**27 for x in range(1,31)}
l[1]=1
l[28]=(2.0/3)**27
l[29]=(2.0/3)**28
l[30]=(2.0/3)**29

count = 1
while count <1000:
    for i in range(2,28):
        a = 4
        l[i] =2.0/3*l[i-1]
        index = 1
        while i-2+a <= 30:
            l[i] += 1.0/(2**index * 3)*l[i-2+a]
            index += 1
            a = 2**(index+1)
    count +=1
    if count % 10 == 0: print 1-l[2]

可以看出,答案很快收敛。这也给出了P2(5)的答案。然而,对于一个大的起始财富,这种方法不太可能