将java随机数生成向某个数字倾斜

在Java中,如何生成随机数,但使该随机数偏向特定数字。 例如,我想生成一个介于1和100之间的数字,但是我希望这个数字倾向于说,75。但是我仍然希望有可能获得该范围内的其他数字,但我想要获得更多的数字更改接近75说,而不是只是在整个范围内得到随机数。 谢谢

试试http://download.oracle.com/javase/6/docs/api/java/util/Random.html#nextGaussian()

Math.max(1, Math.min(100, (int) 75 + Random.nextGaussian() * stddev))) 

选择一个像10这样的stddev并玩游戏直到你得到你想要的发行版。 在1和100处会略多于2或99.如果你想改变它下降的速率,你可以将高斯提升到一个幂。

问题有点旧,但如果有人想在没有特殊情况处理的情况下这样做,你可以使用这样的函数:

  final static public Random RANDOM = new Random(System.currentTimeMillis()); static public double nextSkewedBoundedDouble(double min, double max, double skew, double bias) { double range = max - min; double mid = min + range / 2.0; double unitGaussian = RANDOM.nextGaussian(); double biasFactor = Math.exp(bias); double retval = mid+(range*(biasFactor/(biasFactor+Math.exp(-unitGaussian/skew))-0.5)); return retval; } 

参数执行以下操作:

  • min – 可能的最小偏斜值
  • max – 可能的最大偏斜值
  • skew – 值分布在分布模式周围的程度; 更高的值意味着更紧密的聚类
  • 偏差 – 模式接近最小值,最大值或中点值的趋势; 正值偏向最大值,负值偏向最小值