0

嗨,我已经重新搜索,我相信当我结束这个线程时,我的方向是正确的:

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 概率。

我真的希望这是有道理的。如果没有,请让我知道有什么不清楚的地方,我会尽力修复它。感谢您的任何帮助。

4

1 回答 1

4

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

共有三个事件(或您称之为级别),LOW, MED, HIGH,每个事件都具有一定的非零概率,所有概率的总和恰好为 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其中一个间隔并返回相应的事件(或级别)。

于 2012-12-07T09:55:20.947 回答