Javascript 基于概率的变量选择
对不起,我的英语不是很好。这对我来说是一个新的主题(我的意思是我第一次用英语谈论它:),所以我会犯一些错误) 所以问题来了 例如,我有3种变体。概率是:例如0.5,0.2,0.3。我现在如何选择要选择的变体?我想我可以这样做: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
谢谢。这是正确的方法,您可以让它像这样工作:
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;
}
}