【问题标题】:Choose between various options using probabilities使用概率在各种选项之间进行选择
【发布时间】:2016-02-28 23:49:34
【问题描述】:

我一直在尝试确定如何在具有定义概率的各种给定选项之间进行选择,我正在研究的是生成一个介于 0 和 100 之间的随机数,然后与概率进行比较,但是我有很多概率具有相同的百分比。例如:程序包含一场棒球比赛,我必须按概率选择球员击球的结果。

无预付款:.04
飞球:0.04
错误:.02
内场单曲:.03

等等。

srand(time(NULL));
double num = rand() % 100;

double Prob = 70;
if( num < Prob)
     cout << num << endl;

这是我一直在使用的代码,它适用于一个概率,但是当涉及到许多概率以及其中一些具有相同值的概率时,它就变得复杂了。

【问题讨论】:

    标签: c++ random probability


    【解决方案1】:

    这里没有理由使用双精度。
    你只需要总结这些值(更一般地说,它是离散的 CDF):

    int num = rand() % 100;
    if(num < 4) { /*no advance*/ }
    else if(num < 8) { /*fly ball*/ }
    else if(num < 10) { /*error*/ }
    else if(num < 13) { /*infield single*/ }
    else ...
    

    除此之外,不要使用rand(),它不会产生好的随机数。
    请参阅 &lt;random&gt; 标头,尤其是 Mersenne Twister,以获得更好的选择
    (然后,您甚至可能想使用double

    【讨论】:

    • 我们不知道其余的概率,所以 int 可能不够。
    • @JBentley 但是 rand() 生成整数。检查&lt;10.5 或类似的东西不会比检查&lt;10 更好。
    • 嗯,是的,但是正如您所说,还有其他生成随机数的替代方法,其中包括生成除 int 以外的类型的方法。不过,在 OP 的示例中,您的观点是有道理的。我只是指出这一点,所以 OP 知道 int 可能还不够。
    猜你喜欢
    • 1970-01-01
    • 2013-02-23
    • 2016-11-06
    • 2011-03-26
    • 1970-01-01
    • 2013-10-15
    • 1970-01-01
    • 2019-09-27
    • 2011-10-20
    相关资源
    最近更新 更多