根据概率随机从一系列值中选取一个数字

时间:2013-04-01 18:16:03

标签: c# probability

假设我有一系列从1到10的值。我想根据某种高斯概率从该范围中随机选择一个数字。因此,有更高的机会获得约4,5,6的值。获得1分和10分仍有机会,但机会较小。它不需要完全遵循高斯分布,因为那时1和10的值几乎不可能得到。我希望至少改变和扭曲获得极值的机会,同时传播获得其他价值的机会。通过倾斜,我的意思是有时候我希望有机会得到10超过1.所以分布可能不一定是对称的。

我尝试使用Random类播种随机浮点值并将该值乘以10,但可能仍然是线性的。我想不出我怎么能这样做。有没有一种简单的方法来实现这一目标?

2 个答案:

答案 0 :(得分:2)

在C#中,来自Random的值具有均匀分布,因此将它们乘以某个常量只会改变值的范围。

但是,使用Box-Muller变换,您可以使用两个均匀随机变量创建高斯分布。

查看this question的答案以了解实施情况。

答案 1 :(得分:1)

这可能会对您有所帮助:

将概率函数应用于值1到10.然后获得它们的频率。现在创建一个数值为1到10的数组,每个数组根据它的频率重复。 e.g:

int[] values = { 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 10 };

现在,您可以使用Random变量并获取0到values.Length之间的数字(索引)。最后返回值[index]。