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

使java随机数生成朝某个数字倾斜,java,random,numbers,Java,Random,Numbers,在Java中,如何生成一个随机数,但使该随机数向特定数字倾斜。例如,我想生成一个介于1和100之间(包括1和100)的数字,但我希望该数字向75倾斜。但我仍然希望得到范围内其他数字的可能性,但我更希望得到接近75的数字,而不是仅仅得到整个范围内的随机数。谢谢试试看 选择一个类似于10的STDEV,然后四处玩,直到你得到想要的发行版。不过,1和100的数量将略多于2或99。如果你想改变它下降的速率,你可以将高斯函数提高到一个幂次方。这个问题有点老了,但如果有人想在没有特殊情况处理的情况下这样做,你

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

试试看


选择一个类似于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;
    }
这些参数执行以下操作:

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

你想要整数还是实数?@belisarius我很好奇这种方法会以可伸缩的方式发生怎样的变化。+1表示“虽然在1和100时会比在2或99时稍微多一些”,但从技术上讲,重新滚动永远不能保证完成。不太可能不会,但是。。。可能不会!这正是我想要的,我有点认为它与nextGaussian()有关,但我很难弄清楚它的头绪。非常感谢!好的,请确保我的回答正确,1是可能的最小值,100是最大值,75是将数字倾斜到的值,对吗?@belisarius哦,别担心-厄运可能会输掉这场战斗,但它永远会赢得这场战争!这这是我多年来发现的对生成艺术最有用的东西。非常感谢。有消息来源吗?不客气!这只是我从我的一个辅助项目中提取的代码片段。它不在github上或任何东西上,但它似乎适合这个问题。
    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;
    }