如何随机改变概率?
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;
你应该拥有它。
我有一个 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;
你应该拥有它。