gpt4 book ai didi

javascript - 使用 Node.js 根据特定分布生成 1 到 100 之间的随机变量

转载 作者:行者123 更新时间:2023-11-28 19:59:36 31 4
gpt4 key购买 nike

使用 Node.js,我们试图想出一种生成 1 到 100 之间的随机数的方法。但是,我们可能不想使用像典型的 RAND() 函数那样的标准线性分布,而是使用Weibull(或类似的)分布会产生长尾,并更倾向于较大值的答案 - 例如,80% 的时间可能会生成 75 到 100 的值,将生成 50 到 74 的值15% 的时间,其余 (< 20) 生成 5% 的时间。

我们使用以下公式找到了 Weibul 随机变量函数α*(-ln(1-X))^(1/beta)。假设 X 是从 0 到 1 的标准线性随机数,使用 alpha = 1,并且 beta <= 1 似乎给了我们一个很好的分布,但是我们对如何生成始终落在 1 和 1 之间的单个值感到困惑。 100。

任何想法或建议都将受到赞赏。

最佳答案

好的 - 以防万一有人对我的答案版本感兴趣。使用以下引用资料使我实现了限制 Weibull 结果集的目标:

https://stats.stackexchange.com/questions/30303/how-to-simulate-data-that-satisfy-specific-constraints-such-as-having-specific-m

以下链接也很方便:

http://en.wikipedia.org/wiki/Weibull_distribution

http://mathworld.wolfram.com/WeibullDistribution.html

最后我粗略的 Node,js 代码如下所示:

var desiredMin = 1; //the desired minimum random result 
var desiredMax = 50; //the desired maximum random result
var scale = 1; //Weibul scale parameter (1 provides an inverse result set)
var shape = 10; //Weibul shape parameter (how skewed the result set is)

//given an possible random range of {0,1} value calculate the minimum and maximum Weibull distribution values given current shape and scale parameters
var weibullMin = Math.pow((shape*scale), (-1*shape)) * Math.pow(.000001, shape -1) * Math.exp(Math.pow((.000001/scale), shape));
var weibullMax = Math.pow((shape*scale), (-1*shape)) * Math.pow(.999999, shape -1) * Math.exp(Math.pow((.999999/scale), shape));

//simulate 1000 random weibull values and write results to file
fileStream.once('open', function(fd) {
for(var i = 1; i <= 1000; i++) {
var r = Math.random();
var weibullRandom = Math.pow((shape*scale), (-1*shape)) * Math.pow(r, shape-1) * Math.exp(Math.pow((r/scale), shape)); //generate Weibull random value
var weibullRandomAdjusted = desiredMin + (desiredMax - desiredMin)*((weibullRandom-weibullMin) / (weibullMax - weibullMin)); //adjust Weibull random value so that it constrained into the desired min/max range
fileStream.write(weibullRandomAdjusted + "\n");
};
fileStream.end();
});

我已经运行了不同“形状”值的代码,它为我提供了我需要的结果。

关于javascript - 使用 Node.js 根据特定分布生成 1 到 100 之间的随机变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21892553/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com