単純に思えますが、次のような式 (.net が望ましい) が必要です。
与えられた数値、たとえば 1.5 に対して、式は乱数を出力します。この乱数の系列は平均で約 1.5 になります...したがって、0.1、1.2、7.1、2.5、.2 などになる可能性がありますが、平均値は1.5 に近づく。
明確化: 数値が正であることを望みます。
それを行う方法はたくさんあります。常に正であるこれらの 1 つは、指数分布の値を生成することです。指定された平均で指数確率変量を生成するアルゴリズムは次のとおりです。
public static double ExpRV(double mean, Random rnd) {
return -mean * Math.Log(rnd.NextDouble());
}
[編集者注: C# に変換されました。]
それらの束をクランクアウトすると、平均は にかなり近くなるはずmean
です。
個々の値に境界のある範囲が必要な場合は、別の分布が必要になりますが、それを制約として指定しなかったため、これでうまくいくはずです。
numPoints、targetAvg、および targetAvg からの maxDist の 3 つのパラメーターがあると思います。
(2, 2*maxDist) の範囲でランダムに numPoints ポイントを選択します。
平均を計算します。
すべてのポイントに targetAvg-avg を追加してシフトします。
これにより、ターゲットの平均値に近いポイントが得られます(浮動小数点数が許す限り)。