奇怪的RNG行为

时间:2016-06-30 10:41:34

标签: java random black-box-testing

我正在尝试制作一个黑盒方法来测试我的项目是否正常工作,但我遇到了随机数生成的一些问题。

我有这样的方法:

public static MathObject generateBlackBoxObject() { 
        double functionChance = 0.5;
        double maxValue = 10;
        double minValue = -10;

        if (rng.nextDouble() < functionChance)
        {
            double random = rng.nextDouble();

            if (random < 1/3)
            {
                return Add.apply(Utility.generateBlackBoxObject(), Utility.generateBlackBoxObject());
            }
            else if (random < 2/3)
            {
                return Multiply.apply(Utility.generateBlackBoxObject(), Utility.generateBlackBoxObject());
            }
            else
            {
                return Exponentiate.apply(Utility.generateBlackBoxObject(), Utility.generateBlackBoxObject());
            }
        }
        else
        {
            double random = rng.nextDouble();

            if (random < 1/2)
            {
                return Constant.create(rng.nextDouble() * (maxValue - minValue) + minValue);
            }
            else
            {
                return Variable.create(rng.nextDouble() * (maxValue - minValue) + minValue);
            }
        }
    }

它使用单个java.util.Random,但我遇到的问题是它最有可能选择Variable.create ...路径,然后选择Exponentiation.apply ...路径。它不太可能适用于Multiply和永远(!)来电Add.applyConstant.create

看起来rng喜欢更频繁地选择更高的值,或者以前的随机双倍影响下一个更高的值。

任何人都可以从中了解发生了什么,并且(很可能)我在这里做错了什么?

0 个答案:

没有答案