2

假设我有一个从 1 到 10 的值范围。我想根据某种高斯概率从这个范围内随机选择一个数字。因此,有更高的机会获得大约 4、5、6 的值。仍然有机会获得 1 和 10,但机会较小。它不需要完全遵循高斯分布,因为这样几乎不可能得到 1 和 10 的值。我希望至少改变和倾斜获得极端值的机会,同时分散获得其他值的机会。通过倾斜,我的意思是有时我希望得到 10 的机会大于 1。因此分布可能不一定是对称的。

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

4

2 回答 2

2

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

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

查看此问题的答案以获取实施。

于 2013-04-01T18:25:16.330 回答
1

这可能会帮助您:

将你的概率函数应用于值 1 到 10。然后你得到它们的频率。现在制作一个值从 1 到 10 的数组,每个数组根据它的频率重复。例如:

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. 最后返回值[索引]。

于 2013-04-01T18:25:04.727 回答