【问题标题】:Probability Realization概率实现
【发布时间】:2012-07-14 13:03:55
【问题描述】:

如果我有 x、y 和 z 事件发生的概率,我如何以编程方式实现这三个事件之间的选择?

示例: Pr(x) = 0.3 Pr(y) = 0.2 Pr(z) = 0.5

我想要一个函数来让我实现这些概率,说我应该选择 y 或 z 等。

感谢任何指针或参考。

【问题讨论】:

  • 究竟给了你什么,你想要达到什么目标?你有 P(X),P(Y),P(Z) 吗?你在寻找它们同时发生的概率吗?他们是独立的吗?
  • 是的,我得到了每个事件的概率。说对象U,想在这三个事件中进行选择,只选择一个事件。
  • 我还是没搞懂你,给你概率,你要选什么?可以举个具体的详细例子吗?
  • 对象 x 想选择事件:x、y 或 z,概率为 Pr(x)、Pr(y)、Pr(z),全部给定。如何生成此选择的实现?
  • 这个操作通常被称为“采样”。

标签: math statistics probability


【解决方案1】:

如果你有一个函数rand() 会在[0,1] 中返回一个统一的随机数,那么

float r = rand();
if (rand < Pr(x)) {
    return x;
} else if (rand < Pr(x)+Pr(y)) {
    return y;
} else {
    return z;
}

同样,如果你可以生成一个介于 1 和 100 之间的随机整数,那么

int r = rand();
if (rand < Pr(x)*100) {
    return x;
} else if (rand < (Pr(x)+Pr(y))*100) {
    return y;
} else {
    return z;
}

【讨论】:

  • @Victor: 要么,要么很明显;-)
【解决方案2】:

如果您有事件的概率,请在 [0, 1) 中返回正常分布的函数并检查它落在哪个范围内。如果在 [0, 0.3) 中返回 A,如果在 [0.3, 0.5) 中返回 B,否则返回 C。

【讨论】:

    【解决方案3】:

    在 python 中,您可以编写一个程序,该程序定义一个方法“选择器”,该方法接受两个参数 px 和 py,它们是前两个事件独立发生的概率。该方法将根据需要返回 x,y 或 z,python 代码如下:

    import random 
    
    def chooser(px,py):
        prob = random.randint(1, 10)
        if (prob<=(px*10)):
            return x
        else if (prob<=((px+py)*10)):
            return y
        else:
            return z
    

    【讨论】:

    • 不完全。您需要第二个条件来读取 (px+py)*10 代替 py*10
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 2018-12-11
    • 2019-02-07
    • 2013-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多