【问题标题】:How can I modify the following program to simulate a biased coin? [duplicate]如何修改以下程序来模拟有偏见的硬币? [复制]
【发布时间】:2021-07-20 20:42:44
【问题描述】:

问题如下:

模拟掷三个公平硬币并数 X 正面的数量。

  1. 使用您的模拟来估计 P(X = 1) 和 EX。将估计值与根据理论计算得出的真实值进行比较。
  2. 修改上述内容以允许 P(heads)=3/4 的有偏硬币。

我已经能够如下模拟无偏硬币:

import random


SIMULATION_COUNT = 9999999

coin_surface_dictionary = {'H':0.5, 'T': 0.5}

def get_coin_surface():
    return random.choice(['H', 'T'])

def get_three_coin_surface():
    list_vector = []
    list_vector.append(get_coin_surface())
    list_vector.append(get_coin_surface())
    list_vector.append(get_coin_surface())
    return list_vector


if __name__ == "__main__":
    one_head_count_int = 0
    for ch in range(1, SIMULATION_COUNT):
        coin_surface_vector = get_three_coin_surface()
        head_count_int = coin_surface_vector.count("H")
        if head_count_int == 1:
            one_head_count_int = one_head_count_int + 1
        # END if
    # END for loop
    probability = one_head_count_int / SIMULATION_COUNT
    print(probability)

如何通过最小限度地修改此源代码来模拟有偏见的硬币?

【问题讨论】:

    标签: python simulation probability


    【解决方案1】:

    要么保留您的 random.choice,但在 ('H', 'H', 'H', 'T') 之间进行选择,或者只要求在 [0, 1] 之间进行浮点数并与 0.75 进行比较。如果更高,则为尾巴,否则为正面。

    一种比较稳健的使用字典的方法,它考虑了概率和:

    from random import random
    
    SIDE_PROBABILITIES = {'H': 0.75, 'T': 0.25}
    
    
    def prob_of(side: str) -> float:
        return SIDE_PROBABILITIES[side] / sum(SIDE_PROBABILITIES.values())
    
    
    def get_coin_surface() -> str:
        return 'H' if random() < prob_of('H') else 'T'
    
    
    for _ in range(10):
        print(get_coin_surface())
    

    【讨论】:

    • 我可以尝试使用字典吗?
    • 是的。请注意,为了使程序能够合理保证字典中的值的正确性,您需要注意它们的总和,而不仅仅是概率之一。
    【解决方案2】:

    好吧,如果您希望正面有 3/4 的机会,而不是简单地将您的 get_coin_surface() 函数修改为:

    def get_coin_surface():
        return random.choice(['H','H','H','T'])
    

    【讨论】:

    • 我可以尝试使用字典吗?
    猜你喜欢
    • 2014-05-25
    • 2010-10-03
    • 2011-07-22
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    相关资源
    最近更新 更多