【问题标题】:Coin tossing simulation unexpected probabilities抛硬币模拟意外概率
【发布时间】:2018-04-04 21:01:34
【问题描述】:

这是我为模拟抛硬币游戏而编写的脚本,该游戏以给定的固定结果序列结束(抛硬币为 1 或 0)。这个固定的顺序是游戏的特征。例如,coin_series('01') 模拟了一系列抛掷,最终以 01 结尾;有效结果是x01,其中x 是一串零和不包含01 模式的字符串。

脚本给出了结束两场比赛所需的投掷次数,0111,这些应该有相同的结果,因为硬币不是有偏差的(结果为 0 或结果为 1 的机会相同)折腾)。

但事实并非如此,我的输出分别为 6 和 4,其中只有第一个是正确的。所以我的脚本肯定有错误。

我的问题是:我怎样才能使脚本更简洁,因为我希望这将有助于找到错误;其次,除了我之外,还有其他人都知道的错误吗?

import numpy as np
class coin_series(object):
    def __init__(self,win_state):    #win_state is a string of ones and zeroes
        self.win_state=win_state
        self.d=self.draw()
        self.series=[self.d.next() for i in range(len(self.win_state))]
        self.n=len(self.win_state)
        while not self.check():
            self.play()
    def draw(self):
        while True:
            t=np.random.rand()
            if t>=0.5:
                yield 1
            else:
                yield 0
    def check(self):
        return(self.win_state==''.join(map(str,self.series)))
    def play(self):
        self.series=self.series[1:]+[self.d.next()]
        self.n+=1
if __name__=='__main__':
    print np.mean([coin_series('11').n for i in range(100000)])
    print np.mean([coin_series('01').n for i in range(100000)])

【问题讨论】:

  • 顺便说一下,如果你有一个 两人 游戏,如果他们的序列先出现,一个玩家获胜,那么谁拥有优势比谁的序列需要更长的时间更复杂平均上来。

标签: python simulation coin-flipping


【解决方案1】:

这不是错误,您的代码运行良好!

当你掷硬币时,如果你的目标是0,然后是1,然后你得到了0,但1最终变成了另一个0,那么你已经成功了一半,您只是希望再次获得1

另一方面,如果您的目标是 1,然后是 1 并制作 1,那么如果您没有制作第二个 1,那么您现在是 @987654332 @然后返回等待第一个1

所以换一种说法,在第一种情况下,如果你失败了,你只会在中途重置,但在第二种情况下,如果你失败了,那么你会重新开始 - 从而增加平均抛出去得到它们。

查看this redit post 以获得其他解释。

【讨论】:

  • 你为什么编辑你的链接?现在你告诉人们什么都不看。
  • @user2357112 对不起!我在写解释时编辑错误!
  • 这回答了我的问题。我对比赛的理解不够充分。非常感谢你。我发现该链接非常有用,但也许您的解释不需要阅读它。协议现在是否将其标记为答案?
  • 是的!点击答案旁边的灰色勾号,它会变成绿色,标记未来的访问者这对你有用(所以也可能对他们有用!)
  • 谢谢。使脚本更符合最佳实践的任何 cmets 也将非常有用!
【解决方案2】:

没有错误。您需要生成 单独的翻转对 以使这些值相等。如果你生成一个连续的翻转序列并查看重叠对,11 平均需要比01 更长的时间。

【讨论】:

  • 谢谢你,见上文,你让我的游戏更清晰了。我想将此标记为答案,但不知道如何。如果我遗漏了什么,或者此评论是否结束了问题,请告诉我。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-02
  • 2012-06-24
  • 2014-05-25
  • 2018-07-08
  • 1970-01-01
  • 2019-10-28
  • 2017-07-02
相关资源
最近更新 更多