【问题标题】:Solving statistics question using Python使用 Python 解决统计问题
【发布时间】:2010-11-08 14:04:52
【问题描述】:

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

从 1 美元的资本开始,您选择固定比例的资本 p 押注一个公平的硬币,反复投掷 1000 次。如果投掷的头落地而您失去了落地的尾翼,则您的回报翻倍。例如,如果 p=0.25,第一次投掷你的赌注是 0.25 美元,如果出现正面,你赢了 0.5 美元,所以你有 1.50 美元。您在第二次尝试时继续下注 0.375 美元,如果第二次抛掷落在后面,您还剩下 1.125 美元。

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

如何使用 Python 编写此场景并得出答案?

【问题讨论】:

  • 这听起来有点像家庭作业。如果有,请添加homework-tag。
  • 从该页面:“不要编辑问题以添加作业标签。如果有任何疑问,最好保持原样。相反,首先添加评论要求提问者说明情况。”
  • @Roger, @katrielalex:吸取的教训,将适用于未来的疑似家庭作业案例。
  • @Jill:到目前为止你尝试过什么?问题的哪个具体部分让您感到困惑?

标签: python statistics


【解决方案1】:

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

要解决您的问题,您应该首先写下某种伪代码。你的第一次尝试可能很笼统,然后你应该更详细地了解具体的操作,直到最后你真正去实现它。想想细节,例如,你有什么前置条件和你需要什么后置条件?

【讨论】:

    【解决方案2】:

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

    如果您正确使用这些想法,那么您可以找到最大化概率的 p。但是,您应该注意,实际上存在一个 p 范围,它们都有相同的机会超过 10 亿美元。不过,它们的收益并不相同。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-11
        • 1970-01-01
        • 1970-01-01
        • 2023-04-06
        • 1970-01-01
        • 2021-05-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多