使java随机数生成朝某个数字倾斜
在Java中,如何生成一个随机数,但使该随机数向特定数字倾斜。例如,我想生成一个介于1和100之间(包括1和100)的数字,但我希望该数字向75倾斜。但我仍然希望得到范围内其他数字的可能性,但我更希望得到接近75的数字,而不是仅仅得到整个范围内的随机数。谢谢试试看使java随机数生成朝某个数字倾斜,java,random,numbers,Java,Random,Numbers,在Java中,如何生成一个随机数,但使该随机数向特定数字倾斜。例如,我想生成一个介于1和100之间(包括1和100)的数字,但我希望该数字向75倾斜。但我仍然希望得到范围内其他数字的可能性,但我更希望得到接近75的数字,而不是仅仅得到整个范围内的随机数。谢谢试试看 选择一个类似于10的STDEV,然后四处玩,直到你得到想要的发行版。不过,1和100的数量将略多于2或99。如果你想改变它下降的速率,你可以将高斯函数提高到一个幂次方。这个问题有点老了,但如果有人想在没有特殊情况处理的情况下这样做,你
选择一个类似于10的STDEV,然后四处玩,直到你得到想要的发行版。不过,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;
}
这些参数执行以下操作:
- 最小-可能的最小倾斜值
- 最大-可能的最大倾斜值
- 歪斜-值围绕分布模式聚集的程度;较高的值意味着更紧密的聚类
- 偏差-模式接近最小值、最大值或中点值的趋势;正值偏向最大值,负值偏向最小值
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;
}