从离散分布中选择一个随机值

Choosing a random value from a discrete distribution

我在阅读有关 RL 的文章时遇到了以下代码。 probs 向量包含要采取的每个动作的概率。而且我相信给定的循环会尝试从给定的分布中随机选择一个动作。 Why/How 这个有用吗?

  a = 0
  rand_select = np.random.rand()
  while True:
      rand_select -= probs[a]
      if rand_select < 0 or a + 1 == n_actions:
          break
      a += 1
      actions = a

经过类似的code,我意识到“actions”包含要采取的最终行动。

您可以将概率视为直线上从 0.0 到 1.0 的连续部分的分布。

如果我们有 A:0.2,B:0.3,C:0.5 就可以了

0.0 --A--> 0.2
0.2 --B--> 0.5
0.5 --C--> 1.0

总计 1.0.

该算法在 0.0->1.0 之间选择一个随机位置,并通过依次排除部分找出它“着陆”的位置(A、B 或 C)。

假设我们绘制0.73,我们可以像这样“可视化”它(标有*的选择):

0.0 ---------------------------> 1.0
                          *
0.0 --A--> 0.2 --B--> 0.5 --C--> 1.0

0.73 - 0.2 > 0 所以我们减少 0.2 (=0.53) 并剩下:

0.2 --B--> 0.5
0.5 --C--> 1.0

0.53 - 0.3 > 0 所以我们减少 0.5 (=0.23) 并剩下:

0.5 --C--> 1.0

0.23 - 0.5 < 0 所以我们知道我们画的部分是 C.

选择分布与概率相同,算法为 O(n),其中 n 是概率数。