0

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

我有这样的方法:

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 似乎更喜欢选择较高的值而不是较低的值,或者以某种方式之前的随机双重影响下一个更高的值。

谁能告诉我发生了什么以及(很可能)我在这里做错了什么?

4

0 回答 0