如何随机改变概率?

how to randomly change a probability?

我有一个 double 值的集合,每个代表一个概率(即 [0-1] 范围)。

我想为这些值添加均匀分布的噪声。修改后的值必须仍然代表概率([0-1]范围)。

此外,我希望能够为每个值独立指定扰动的所需范围:对于某些概率,我想将它们修改一个小百分比,而对于其他概率,我想将它们修改一个大百分比百分比。

我不确定如何进行:我只能想象不同项目之间的交换概率。

我考虑过使用 java.Util.Random 但我没有看到任何可以使用的方法。

谁能说明实现此目的的可能算法?

如果我没理解错的话,您是在尝试向一组值(这些值是概率,因此必须保持在 0 和 1 之间)添加随机、均匀分布的噪音。

假设您的原始值为:

double myProbability;

并且您想添加最大范围的均匀噪声:

double desiredDelta;

您最多可以改变它,使其不会变为 > 1 或 < 0:

double maxDelta = Math.min(myProbability, 1-myProbability);

此时,您需要定义噪声的实际范围:

double actualDelta = Math.min(desiredDelta, maxDelta);

现在您需要在 0 和 actualDelta 之间添加或删除一个随机值:

boolean noiseIsAdded = Math.random() > 0.5; //50% prob add, 50% prob subtract
double noise = Math.random() * actualDelta; //scales down the 0-1 range to 0-actualDelta

double newProbability;
if (noiseIsAdded) newProbability = myProbability + noise;
else newProbability = myProbability - noise;

你应该拥有它。