在python3.2中使用montecarlo方法寻找某个骰子输出的特定概率

2024-06-17 10:38:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个统计课上,我们经常会遇到各种各样的限制条件的“骰子问题”。这是一个概率问题,我需要用蒙特卡罗方法来评估事件的概率。我知道我可以整合我的方法,但是我想写一个程序,允许我简单地修改约束条件,比如我有多少个骰子,我做了多少个骰子,这些骰子有多少个边。在

这是我正在研究的问题之一。更简单,因为我不想被我写代码的“能力”冲昏头脑。在

假设一个骰子有9个面。估计当你掷5个骰子时,至少有3个骰子的值相同。在

这是我们给出的问题的一般模板: 掷X个数的n边骰子,每个边的边数从1到n。估计我们得到3个或更多相同结果的骰子的概率。在

我想为样本问题写一个函数,比方说,它以一个整数n作为输入,它是每个骰子中的面数,并计算出3个或更多个骰子具有相同值的概率。我最大的问题是“五分之三”的限制。 我在Stackoverflow上看过其他类似的问题,但没有一个真正触及我的基本问题。如何编写约束的代码? 我使用的是python3.2。在

class Die(object):
  def __init__(self, sides = 9):
    self.sides = sides

  def roll(self):
    return randint(1, self.sides)

我被困在这里了。任何意见都是有用的,谢谢!在


Tags: 方法代码self程序模板def事件能力
2条回答

只需多次使用骰子类:

^{1}$

然后根据需要分析您的分布:

^{pr2}$

编辑:我知道这个解决方案不能解决你的家庭作业问题,但希望它能为你提供掷骰子和数骰子所需的工具。你很可能需要一次对多个骰子进行上述操作,并有一种方法来比较它们在每次掷骰子时的相等程度。在

我想我不需要在这里上课。你只需生成骰子掷骰子,然后检查骰子掷骰子是否应该计数。在本例中,我将使用Counter进行计数,以使代码更干净:

^{1}$

在我看来你有10%的机会。蒙特卡洛的诀窍在于确定你是否已经收敛。您可以使用不同数量的ntries多次执行此操作。你的make ntries越大,输出中的价差就越小。最终,当价差足够小的时候,你说你已经在解决方案上收敛了。在

相关问题 更多 >