1

我需要在我的代码中生成随机数,但我想根据当前场景更改分布的参数。该应用程序可以作为单线程或多线程应用程序运行。

我的问题是,我应该RandomGenerator在我的类的构造函数中初始化对象,然后使用该RandomGenerator对象来(重新)初始化NormalDistributionBetaDistribution或任何其他AbstractRealDistribution重复对象,还是在我需要更新参数后初始化我的分布对象。

就生成良好的随机数和最优性而言,哪个是更好的选择?

情况1:

class Test {
    protected RandomGenerator rng;
    public Test() {
        rng = new Well19937c();
    }
    private void someFunction(double mean, doube std_dev) {
        NormalDistribution norm = new NormalDistribution(this.rng, mean, std_dev);
        while (condition is met) {
            // do some calculation, create some random numbers, get new mean and std_dev
            norm = new NormalDistribution(this.rng, new_mean, new_std_dev);
        }
    }
}

案例二:

class Test {
    private void someFunction(double mean, doube std_dev) {
        NormalDistribution norm = new NormalDistribution(mean, std_dev);
        while (condition is met) {
            // do some calculation, create some random numbers, get new mean and std_dev
            norm = new NormalDistribution(new_mean, new_std_dev);
        }
    }
}
4

1 回答 1

0

您应该重用RandomGenerator跨调用。生成具有不同分布参数的随机值的最简单方法是使用包RandomDataGenerator中的类random

RandomDataGenerator generator = new RandomDataGenerator(new Well19937c());
// Unit normal
double normDev = generator.nextGaussian(0, 1);
// mean = 0.5, std dev = 2
double normDev2 = generator.nextGaussian(0.5, 2);
// exponential, mean = 1
double expDev = generator.nextExponential(1);
于 2015-04-13T20:28:46.143 回答