ユニモーダル分布が必要な場合 (たとえば、3 と述べたように、バイアスが数値範囲の特定の値に集中している場合)、andrew cooke が提供する答えは適切です。偏差を非常に正確に微調整します。
ただし、いくつかのバイアスを作成したい場合---たとえば、a、(a+b)/2、および b の数が他よりも頻繁にある三峰分布が必要な場合は、加重ランダム選択を実装することをお勧めします。
このための簡単なアルゴリズムはStackOverflow に関する最近の質問で与えられました。その複雑さは線形です。このようなアルゴリズムを使用すると、最初に {a, a+1, a+2,..., b-1, b} (サイズ b-a+1) を含むリストを維持するだけで済みます。 X へのバイアスを追加するには、X のいくつかのコピーをリストに追加します (どの程度バイアスをかけたいかによって異なります)。次に、リストからランダムに項目を選択します。
より効率的な方法が必要な場合、最も効率的な方法は「Alias メソッド」と呼ばれ、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])