我真的迷路了。我该如何解决这个问题?
从1美元的资金开始,您选择固定比例的资金来投注一个重复投掷1000次的公平硬币。如果折腾落地并且你失去你的土地尾巴,你的回报会加倍。例如,如果p = 0.25并且第一次投注你的投注$ 0.25,并且如果你看到你赢了$ 0.5,那么你有$ 1.50。你继续在第二次尝试时下注0.375美元,如果第二次投掷落后,你还剩下1.125美元。
假设选择p是为了最大化在1000次翻转后获得至少10亿美元的机会,你成为亿万富翁的可能性是多少?
如何使用Python编写出这个场景的代码并得出答案?
答案 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
的一系列值进行所有操作,可能在0
和0.2
之间。您可以使用matplotlib
根据预期结果绘制p
的图表,以了解p
应该最佳的内容。
请注意,Python可能不是这类东西的最佳语言; C会快得多,你也不需要Python的灵活性。