有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使java随机数生成朝某个数字倾斜

在Java中,如何生成一个随机数,但使该随机数向特定数字倾斜。例如,我想生成一个介于1和100之间(包括1和100)的数字,但我希望该数字向75倾斜。但我仍然希望得到范围内其他数字的可能性,但我更希望得到接近75的数字,而不是仅仅得到整个范围内的随机数。谢谢


共 (2) 个答案

  1. # 2 楼答案

    问题有点老了,但如果有人想在不进行特殊案例处理的情况下执行此操作,您可以使用以下函数:

        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;
        }
    

    这些参数执行以下操作:

    • 最小-可能的最小倾斜值
    • 最大-可能的最大倾斜值
    • 歪斜-值围绕分布模式聚集的程度;较高的值意味着更紧密的聚类
    • 偏差-模式接近最小值、最大值或中点值的趋势;正值偏向最大值,负值偏向最小值