你能告诉我生成非均匀随机数的任何方法吗?
我正在使用Java,但是代码示例可以使用您想要的任何语言。
一种方法是通过将两个均匀随机数相加(即掷2个骰子)来创建偏斜分布。
你能告诉我生成非均匀随机数的任何方法吗?
我正在使用Java,但是代码示例可以使用您想要的任何语言。
一种方法是通过将两个均匀随机数相加(即掷2个骰子)来创建偏斜分布。
尝试生成均匀分布的随机数,然后将倒数非均匀累积分布函数应用于每个随机数。
你需要哪种偏差分布?
这里有一种技术总是有效的,但并不总是最有效的。累积分布函数P(x)给出了数值低于x的时间比例。因此,当x的可能最低值为0时,P(x)= 0,并且当x的可能最高值为1时,P(x)= 1。每个分布都有一个唯一的CDF,它以P(x)从0上升到1的方式编码了分布的所有属性。如果y是区间[0,1]上的均匀偏差,则满足P(x)= y的x将根据您的分布进行分配。要使其在计算上起作用,您只需要找到计算您分布的P(x)的反函数的方法。
Meta.Numerics库定义了许多常用分布(例如正态分布、对数正态分布、指数分布、卡方分布等),并具有计算每个分布的CDF(Distribution.LeftProbability)和反函数CDF(Distribution.InverseLeftProbability)的函数。
对于特定分布快速的专业技术(例如正态分布的Box-Muller技术),请参见《Numerical Recipies》。