【发布时间】:2009-06-10 18:24:12
【问题描述】:
您能告诉我任何生成非均匀随机数的方法吗?
我使用的是 Java,但代码示例可以是任何你想要的。
一种方法是通过将两个均匀随机数相加(即掷 2 个骰子)来创建偏态分布。
【问题讨论】:
-
这取决于你想要的分布。
标签: artificial-intelligence random
您能告诉我任何生成非均匀随机数的方法吗?
我使用的是 Java,但代码示例可以是任何你想要的。
一种方法是通过将两个均匀随机数相加(即掷 2 个骰子)来创建偏态分布。
【问题讨论】:
标签: artificial-intelligence random
尝试生成均匀分布的随机数,然后将倒置非均匀 cumulative distribution function 应用于每个随机数。
【讨论】:
你想要什么样的偏差分布?
这是一种总是有效的技术,但并不总是最有效的。累积分布函数 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 库定义了大量常用分布(例如正态、对数正态、指数、卡方等),并具有计算 CDF (Distribution.LeftProbability) 和逆 CDF (Distribution.InverseLeftProbability) 的函数)。
适用于对特定分布快速的专业技术,例如正态分布偏差的 Box-Muller 技术,请参阅 Numerical Recipies 一书。
【讨论】:
如果您使用的是 Java,那么我的 Uncommons Maths 库可能会引起您的兴趣。它包括为均匀分布、高斯分布、泊松分布、二项分布和指数分布生成随机数的类。 This article 展示了如何使用这些分布。
【讨论】: