我正在尝试制作一个黑盒方法来测试我的项目是否正常工作,但我在随机数生成方面遇到了一些问题。
我有这样的方法:
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.apply
或Constant.create
看起来 rng 似乎更喜欢选择较高的值而不是较低的值,或者以某种方式之前的随机双重影响下一个更高的值。
谁能告诉我发生了什么以及(很可能)我在这里做错了什么?