如果您想要一个单峰分布(其中偏差仅集中在您的数字范围的一个特定值中,例如,正如您所说的 3),那么 andrew cooke 提供的答案是好的——主要是因为它允许您非常准确地微调偏差。
但是,如果您希望做出几个偏差——例如,您想要一个三峰分布,数字 a、(a+b)/2 和 b 比其他数字更频繁,那么您最好实施加权随机选择。
在 StackOverflow 最近的一个问题中给出了一个简单的算法;它的复杂性是线性的。使用这样的算法,您只需维护一个列表,初始包含 {a, a+1, a+2,..., b-1, b}(大小为 b-a+1),当您需要要添加对 X 的偏见,您可以将 X 的多个副本添加到列表中——这取决于您想要偏见的程度。然后从列表中选择一个随机项目。
如果您想要更高效的方法,最有效的方法称为“别名方法”,它由 Denis Bzowy 在 Python 中非常清楚地实现;一旦你的数组被预处理,它就会在恒定时间内运行(但这意味着一旦你完成了预处理,你就不能再更新偏差了——或者你会重新处理表格)。
这两种技术的缺点是,与高斯分布不同,偏向 X,也不会偏向 X-1 和 X+1。要模拟这种效果,你必须做一些事情,比如
def addBias(x, L):
L = concatList(L, [x, x, x, x, x])
L = concatList(L, [x+2])
L = concatList(L, [x+1, x+1])
L = concatList(L, [x-1,x-1,x-1])
L = concatList(L, [x-2])