基于概率python的随机数



嗨,我已经完成了重新封装,我相信当我到达这个线程时,我的方向是正确的:

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概率在做什么。

假设x=0.90

在我的列表中,第二个列表条目出现的几率是0.60,那么,由于x(小于)概率是False(我不太确定如果x(小于"概率会发生什么),代码转到n=n-概率。

我真的希望这是有道理的。如果没有,请告诉我不清楚的地方,我会尽力解决。感谢您的帮助。

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

有三个事件(或您所称的级别),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]),则发生第三个事件

您询问的代码只是将x与其中一个间隔匹配,并返回相应的事件(或级别)。

最新更新