メソッドを呼び出すたびに、返される数値が以前に返された数値よりも大きい、ランダムな分布からサンプリングされた数値を返すメソッドを作成する必要があります。
または、言い換えると、ランダム値のソートされたリストのイテレータが必要です。
残念ながら、リストが大きすぎて全体としてメモリ内に作成できません。私が思いついた最初のアイデアは、値空間をバケットに分割することです。各バケットには、ある範囲 [a, b) の値が含まれます。私のリストに N 個の要素があるとします。バケットを作成するには、ディストリビューションを N 回サンプリングし、範囲 [a, b) の各値をバケットに入れます。そのバケット外の値は破棄されます。
このようにして、最後のバケットを繰り返すたびに新しいバケットを作成し、メモリ消費を低く抑えることができました。
それでも、私は統計の専門家ではないので、これがどういうわけか私が得た数字を台無しにするのではないかと少し心配しています. これは適切なアプローチですか?各バケットにまったく同じ分布ジェネレーター (org.apache.commons.math3.distribution.RealDistribution のインスタンス) を使用することは重要ですか?
更新:私が話している乱数の種類を説明するのに悪い仕事をしたようです。
私の数値は、たとえば平均が m で分散が v の正規分布、または一様分布または指数分布のようなランダム分布のサンプルを形成します。
これらの数値を使用して、シミュレーションでいくつかの動作をモデル化します。時々イベントをトリガーしたいとします。何十億ものイベントをスケジュールする必要があり、それらのイベントがトリガーされる時間は、ランダム分布のサンプルを形成する必要があります。
したがって、前の数値に乱数を追加して次の数値を導出すると、実際には一連の乱数が増加しますが、数値は分布のサンプルを形成しません。