在Java中生成具有最大值,最小值和平均值(平均值)的随机数

2022-09-02 09:59:36

我需要生成具有以下属性的随机数。

最小值应为 200

最大应为 20000

平均值为 500。

可选:第 75 百分位为 5000

当然,它不是均匀分布,也不是高斯分布。我需要给一些左偏度。


答案 1

Java Random可能不起作用,因为它只给你正态(高斯)分布。

您可能正在寻找的是f分布(见下文)。你可以在这里使用distlib库并选择f发行版。您可以使用随机方法获取随机数。

enter image description here


答案 2

Say 是你的目标变量,让我们通过执行 来规范化范围。所以现在你想要一些随机变量,用平均值取值。XY=(X-200)/(20000-200)Y[0,1](500-200)/(20000-200)=1/66

你有很多选择,最自然的选择在我看来是Beta分布,你有一个额外的自由度,你可以选择它来满足最后一个四分位数的要求。Y ~ Beta(a,b)a/(a+b) = 1/66

之后,您只需将 X 返回为Y*(20000-200)+200

要生成Beta随机变量,您可以使用Apache Commons或查看此处


推荐