生成非均匀随机数

时间:2009-06-10 18:24:13

标签: artificial-intelligence random

你能告诉我任何生成非均匀随机数的方法吗? 我正在使用Java,但代码示例可以是您想要的任何内容。

一种方法是通过将两个统一的随机数加在一起来创建一个偏斜的分布(即滚动2个骰子)。

3 个答案:

答案 0 :(得分:10)

尝试生成均匀分布的随机数,然后将倒置的非均匀cumulative distribution function应用于每个随机数。

答案 1 :(得分:7)

你想要什么样的偏差分布?

这是一种始终有效的技术,但并不总是最有效的。累积分配函数P(x)给出值低于x的时间分数。因此,在x的最低可能值处P(x)= 0并且在x的最高可能值处P(x)= 1。每个分布都有一个唯一的CDF,它以P(x)从0上升到1的方式编码分布的所有属性。如果y是在区间[0,1]上的均匀偏差,那么x满足P(x) )= y将根据您的发行情况分配。为了使这项工作具有竞争力,您只需要一种计算分布的P(x)倒数的方法。

Meta.Numerics库定义了大量常用的distrubtions(例如normal,lognormal,exponential,chi squared等),并具有计算CDF(Distribution.LeftProbability)和逆CDF(分布)的函数.InverseLeftProbability)每个。

对于特定分配快速的专业技术,例如:用于正态分布偏差的Box-Muller技术,请参阅“数字收益”一书。

答案 2 :(得分:1)

如果您使用的是Java,那么我的Uncommons Maths库可能会引起您的兴趣。它包括用于为均匀,高斯,泊松,二项和指数分布生成随机数的类。 This article显示了如何使用这些发行版。