我将尝试创建一个带有以下签名的函数:
它应该做到以下几点:
我不是数学家,但被告知可以考虑Beta分布作为可能的工具。 我找到了一些拥有“beta”功能的NPM模块,但我不确定如何使用它们来解决这个问题:
function weightedRandom (target, probability) {
// calculate weighted random number that is more likely to be near target value
return value; // number from 0 to 1
}
它应该做到以下几点:
- 生成从0到1之间的随机数,但不包括1
- 在该范围内选择任意给定数字的概率并非均匀分布
- 被选中的数字靠近目标值(目标值也是0到1之间的值)的概率更大
- 概率曲线看起来像钟形曲线,其中目标值具有最高概率,其周围的值逐渐减少,但在0到1范围内的所有值仍然有可能被选中。
- 这种机会的权重可以使用"probability"值进行调整,其中0表示没有对随机性施加任何加权,而1则表示几乎所有选定的数字都将聚集在目标值周围。
weightedRandom(0.8, 0.2)
会产生一个随机值,有20%的可能性聚集在值0.8周围,但可以是从0到1的任何数字。如果概率为0.5,则返回的随机值更多地接近0.8。我认为可能需要另一个参数来定义群集的宽度(标准差?)。我不是数学家,但被告知可以考虑Beta分布作为可能的工具。 我找到了一些拥有“beta”功能的NPM模块,但我不确定如何使用它们来解决这个问题:
setInvTransform(x)
的函数,而不是z
,因为函数体始终使用x
。无论如何还是+1。 - Elias Van Ootegem