使用Python解决统计问题

时间:2010-11-08 14:04:53

标签: python statistics

我真的迷路了。我该如何解决这个问题?

从1美元的资金开始,您选择固定比例的资金来投注一个重复投掷1000次的公平硬币。如果折腾落地并且你失去你的土地尾巴,你的回报会加倍。例如,如果p = 0.25并且第一次投注你的投注$ 0.25,并且如果你看到你赢了$ 0.5,那么你有$ 1.50。你继续在第二次尝试时下注0.375美元,如果第二次投掷落后,你还剩下1.125美元。

假设选择p是为了最大化在1000次翻转后获得至少10亿美元的机会,你成为亿万富翁的可能性是多少?

如何使用Python编写出这个场景的代码并得出答案?

3 个答案:

答案 0 :(得分:1)

你有使用python的经验吗?如果没有,请阅读tutorial

要解决您的问题,您应该先写下某种伪代码。您的第一次尝试可能非​​常一般,然后您应该详细了解具体的操作,直到最后您真正去实现它。考虑一下细节,例如,您有什么先决条件以及您需要什么后置条件?

答案 1 :(得分:1)

以下是一些提示。胜负的顺序最终不会影响总金额,因为乘法通勤。因此,所有投掷(以1美元开始)后的总金额等于1 * (1+2*p)^(W) * (1-p)^(1000-W),其中W是1000次投掷中的总胜数(因此1000-W是损失的数量) 。这将允许您确定,对于给定数量的胜利,W,您是否获得超过十亿美元。然而,有更多的方法来赢得500 /输500比赢得1000 /输0.你可以找到使用binomial coefficient赢得1000次胜利的W的方法。

如果您正确使用这些想法,那么您可以找到最大化概率的p。但是,你应该注意到,实际上有一系列的p都有相同的机会超过10亿美元。然而,他们并没有产生相同数量的金钱。

答案 2 :(得分:0)

明显的起点是编写一些代码,模拟执行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的灵活性。