使用Python解决统计问题

问题描述:

我真的迷路了。我怎样才能解决这个问题?使用Python解决统计问题

从1美元的资本开始,你选择一个固定的比例p来投注一个公平的硬币,反复投掷1000次。如果抛球落地,你失去了土地尾巴,你的回报会翻倍。例如,如果p = 0.25,并且第一次投注您的投注为$ 0.25,并且如果头像出现,您赢得$ 0.5,所以您有$ 1.50。第二次尝试时您继续下注0.375美元,如果第二次抛球落地尾巴,您还剩下1.125美元。

假设选择p以最大化1000次翻转后至少10亿美元的机会,那么您成为亿万富翁的可能性有多大?

你如何使用Python来编写这个场景并出来一个答案?

+3

这听起来像家庭作业可疑。如果是这样,请添加'作业'标签。 – 2010-11-08 14:09:44

+4

@Space:[“家庭作业标签,与其他所谓的'meta'标签一样,现在不鼓励。]](http://meta.stackexchange.com/q/10812) – 2010-11-08 14:32:17

+2

从该页面:”不要编辑一个问题来添加作业标签,如果有任何疑问,最好是保持原样,相反,首先添加一条评论,要求提问者澄清情况。“ – katrielalex 2010-11-08 14:34:34

你有任何python的经验吗?如果不是,请阅读tutorial

要解决你的问题,你应该先写下一些伪代码。你的第一次尝试可能是非常普遍的,然后你应该更详细地了解具体的操作,直到最后你真的去实施它。考虑一下细节,比如,你有什么先决条件以及你需要什么后续条件?

显而易见的地方就是编写一些代码,模拟执行1000次硬币掷骰,并在最后为您提供capital的值。这基本上是微不足道的:

def _mc(p): 
    capital = 1.0 
    for _ in xrange(1000): 
     if random.random() < 0.5: 
      capital *= 1 + p 
     else: 
      capital *= 1 - p 
    return capital 

请注意,capital可能最终会变得很小。没关系。

现在这显然严重依赖于随机翻转是什么,这是不好的。因此,您应该通过执行大量的1000个投币链并根据您认为应该做的某种统计数据来计算预期价值。

最后,您希望对p的值的范围做所有这些,可能在00.2之间。您可以使用matplotlib根据预期结果绘制p的图表,以了解p应该是最好的。

请注意,Python可能不是这类事情的最佳语言; C会更快,你也不需要Python的灵活性。

这里有一些提示。由于乘数减少,赢得和亏损的顺序最终不会影响总金额。因此,所有投注后的总金额(以$ 1开始)等于1 * (1+2*p)^(W) * (1-p)^(1000-W),其中W是在1000次投注中赢得的总数(因此1000W是损失数)。这将允许你确定,如果给定数量的胜利W,你获得了超过10亿美元。然而,赢得500 /输500比赢得1000 /输0的方法还多。你可以通过使用binomial coefficient找到在1000次掷骰中获胜的方法数。

如果你把这些想法正确使用,那么你可以找到一个最大化概率的p。但是,你应该注意到,实际上有一系列的p值都可以提供超过10亿美元的平等机会。尽管如此,他们并不都能赚到相同的钱。