基于概率python的随机数

时间:2012-12-07 09:33:26

标签: python random probability

您好我已经完成了重新调试,我相信当我最终在这个线程时,我最终朝着正确的方向前进:

http://code.activestate.com/recipes/117241/

  
    

基本上我的问题是:链接中的代码是逐行完成的。如果您的解释让我理解链接中的代码在令人满意的程度上做了什么,您可能会忽略我在下面写的所有内容。

  

我相信该链接的代码会生成一个随机数,但随机数与概率直接相关。

在我自己的代码中,我试图获取一个“数字”及其出现的概率,并获得一个输出“数字”,它将根据概率出现。我知道这很令人困惑,但如果你看一下上面的链接,我希望它能清楚我想要做什么。我的下面的代码是参考上面的链接。

所以在我的程序中,这些是我的全局变量:

HIGH= 3
MED= 2
LOW= 1

这是我正在使用的列表:

n= [LOW,lowAttackProb).(MED,medAttackProb),(HIGH,highAttackProb)]
#lowAttackProb,med...,etc. are based on user input are just percents converted to decimals that add up to 1 in every case

这是我按照以上链接实现随机代码的方式:

x= random.uniform(0,1)
for alevel,probability in n:
    if x<probability:
        break
    x=x-probability
return alevel

我不确定for循环中究竟发生了什么,x = x-probability正在做什么。

让我们说x = 0.90

并且在我的列表中,第二个列表输入的可能性是0.60,然后,因为x(小于)概率是False(我不太确定如果x(小于)概率甚至是什么),代码继续进行n = n-probability。

我真的希望这是有道理的。如果没有,请让我知道什么是不清楚的,我会尝试解决它。感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

此代码实现了考虑可能事件概率的事件选择。这是它背后的想法。

有三个事件(或您调用的级别),LOWMEDHIGH,每个事件具有一定的非零概率,所有概率总和精确到1。 Python的标准方法可以生成0到1之间的随机数。那么我们如何将它们“映射”到彼此呢?让我们沿着数字线对齐我们的概率(简称为L,M和H):

0__________________L______________L+M_________________________L+M+H ( = 1)

现在我们可以说我们随机生成的数字x

  1. 如果x位于区间[0,L],则发生第一个事件。
  2. 如果x位于半间隔(L,L + M),则发生第二个事件。
  3. 如果x位于半间隔(L + M,L + M + H),则发生第三个事件。
  4. 您询问的代码只是将x与其中一个区间匹配,并返回相应的事件(或级别)。