将java随机数生成偏向一定数量

con*_*kus 10 java random numbers

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

use*_*684 18

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

    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;
    }
Run Code Online (Sandbox Code Playgroud)

参数执行以下操作:

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


Mik*_*uel 7

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

Math.max(1, Math.min(100, (int) 75 + Random.nextGaussian() * stddev)))
Run Code Online (Sandbox Code Playgroud)

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