Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于概率的变量选择_Javascript_Algorithm_Language Agnostic - Fatal编程技术网

Javascript 基于概率的变量选择

Javascript 基于概率的变量选择,javascript,algorithm,language-agnostic,Javascript,Algorithm,Language Agnostic,对不起,我的英语不是很好。这对我来说是一个新的主题(我的意思是我第一次用英语谈论它:),所以我会犯一些错误) 所以问题来了 例如,我有3种变体。概率是:例如0.5,0.2,0.3。我现在如何选择要选择的变体?我想我可以这样做: 创建间隔[0;1] 以较小的间隔将其分开(在我的示例中为3)。[0;0.5],[0.5,0.7],[0.7,1] 生成从0到1的随机数(浮点,双精度) 检测数字所属的间隔 例如,生成了0.3,所以是第一个间隔,所以是第一个变量 这是正确的方法吗 如何使用JavaScrip

对不起,我的英语不是很好。这对我来说是一个新的主题(我的意思是我第一次用英语谈论它:),所以我会犯一些错误)

所以问题来了

例如,我有3种变体。概率是:例如0.5,0.2,0.3。我现在如何选择要选择的变体?我想我可以这样做:

  • 创建间隔[0;1]
  • 以较小的间隔将其分开(在我的示例中为3)。[0;0.5],[0.5,0.7],[0.7,1]
  • 生成从0到1的随机数(浮点,双精度)
  • 检测数字所属的间隔
  • 例如,生成了0.3,所以是第一个间隔,所以是第一个变量

  • 这是正确的方法吗
  • 如何使用JavaScript编写代码,或者至少用伪代码显示它
  • 附言:我每次都有动态数量的变体


    谢谢。

    这是正确的方法,您可以让它像这样工作:

    var rand = Math.random();
    
    if (rand < 0.5) {
        // first variant
    } else if (rand < 0.7) {
        // second variant
    } else {
        // third variant
    }
    

    嗯。是的,但我有变量的动态数量:))在第一个循环中,在105秒时,将有5个变量。这就是问题:)看。在您的示例中,不能选择任何间隔,因为间隔中的最后一个值不是1。如果将生成0.95呢?在您的示例中,程序永远不能选择间隔。1必须是间隔中的最后一个值。您有一些概率。你必须把它们放入数组中,这样新的一个将等于最后一个+当前一个。所以1将是最后一个,所有的都会很好地工作。乍一看可能不是这样,但这正是代码在例外情况下所做的-你是对的,数组的最后一项必须是1,因为你提到的原因d、 但是如果你简单地加上它,这就行了。我的数组表示区间[0,0.1],[0.1,0.25],[0.28],表示概率10%,15%和3%(缺少最后一个区间)。
    var intervals = [0.1, 0.25, 0.28] // note that the array has to be sorted for this to work
    
    var rand = Math.random();
    
    for(i in intervals) {
        if (rand < intervals[i]) {
            // i-th variant
            break;
        }
    }