乱数ジェネレータと乱数ストリーム
乱数を生成するアルゴリズムは、シード値およびその他のパラメータを使用して一連の乱数を生み出します。このような一連の乱数は、乱数ストリームと呼ばれます。乱数を使用するモデルを作成する場合は、どのストリームから乱数を取得するのかを追跡することが重要です。複数のプロセスですべての乱数を同じストリームから取得できる場合もあれば、プロセスごとに固有のストリームが必要となる場合もあります。
乱数を作成する数値ジェネレータには、さまざま種類があります。ArcGIS では、標準 C Rand() 関数、ACM 収集アルゴリズム 599、およびメルセンヌ ツイスタ mt19937 の 3 つの手法(ジェネレータ タイプ)をランダム値の生成に使用します。乱数を使用するモデルから同じ結果の再現が必要となる場合があります。モデルでの再現を保証するには、シードをパラメータとして追加します。同じシードを指定すれば、ランダム値を使用する同じモデルを 2 回別々に実行しても、同じ結果が得られます。
乱数ジェネレータは、環境設定でグローバルに指定されるか、または [値の計算(Calculate Value)]、[フィールド演算(Calculate Field)]、[ランダム ラスタの作成(Create Random Raster)]、[ランダム ポイントの作成(Create Random Points)] などの乱数値を使用するツールの内部に指定されます。乱数ジェネレータは、ジェネレータ タイプとシードに基づいて乱数のストリームを開始します。数値はランダムに決定され、値は 0 ~ 1 の範囲になります。数値は、必要に応じて作成されます。
入力データまたはモデルのパラメータの不確実性をモデル化するために値を使用する場合など、多くの場合、ツールに純粋なランダム値を提供しても有効ではありません。通常、入力データまたはモデル内のパラメータにおける不確実性の分布について、先験的情報が存在します。[ランダム ラスタの作成(Create Random Raster)]、[値の計算(Calculate Value)]、[フィールド演算(Calculate Field)] などのツールは、乱数ストリームから数値を取得し、ツールに指定された分布に基づいて変換します。たとえば、精度が± 2 フィートの入力標高サーフェスにランダム値を追加する際に、モデルが誤差解析で何度も実行される場合は、より現実的な手法により、1 ~ 2 の値ではなく 0 ~ 1 の値を提供する必要があります。ランダム値を使用する場合、値の範囲、使用する分布(正規やポアソンなど)、および分布のパラメータ(標準偏差など)を指定することができます。各値は、他の値に依存しません。
分布を使用するツール(たとえば、[ランダム ラスタの作成(Create Random Raster)]、[値の計算(Calculate Value)]、[フィールド演算(Calculate Field)])で値の割り当て(または変換)に使用できる分布は複数あります。一般に、分布はさまざまな結果を生成します。選択する分布は、最終的な用途によって決定します。モデル化するプロセスに最も適切な分布を選択する必要があります。
使用可能な分布と一般的な使用法については、「ランダム値を割り当てるための分布」をご参照ください。分布ごとの構文とパラメータについては、「ランダム値の分布構文」をご参照ください。
乱数ストリームのグローバルな設定
[乱数の種類] とシードは、[環境設定] ダイアログ ボックスの [乱数] セクションに設定されます。ランダム値を使用するすべてのツールは、このストリームから値を取得します。これらのツールには、ArcGIS.Rand()([値の計算(Calculate Value)] と [フィールド演算(Calculate Field)] で使用)、[ランダム ラスタの作成(Create Random Raster)]、および [ランダム ポイントの作成(Create Random Points)] があります。それぞれのツールは、乱数が必要になると、グローバルの乱数ストリームから次の値を取得します。
プロセスごとに異なる乱数ストリームの作成
プロセスをランダムに独立させて、結果の偏りを防いだり、出力を再現したりするために、プロセスごとに固有のストリームを使用することがあります。ストリームをローカルに作成するには、乱数ジェネレータとシードをローカルに設定します(たとえば、ツールの [環境] ボタンをクリックするか、ModelBuilder でツールを右クリックし、[プロパティ] をクリックします)。ツールに新しい乱数ストリームが作成され、そのツールがランダム値を必要とした場合は、常にこの新しく作成されたストリームから値を取得します。モデルが反復処理される場合、乱数ストリームが割り当てられたツールは、その後も反復のたびにローカルのストリームから値を取得します。他のツールが、このストリームから値を取得することはありません。
モデル内で必要な数のローカル ストリームを開始することができます。いくつかのツールを組み合わせてグローバル ストリームからランダム値を取得すると同時に、他のツールでそれぞれの独自のローカル ストリームから値を取得することもできます。
パラメータのランダムな変更
ModelBuilder のモデルでパラメータにランダムさを加えるには、5 段階のプロセスを実行します。次の ModelBuilder の例では、Spatial Analyst の傾斜角機能の Z 値の倍率がランダムに変更されます。
- [Spatial Analyst ツール] ツールボックスから [傾斜角(Slope)] ツールを追加します。
- [データ管理ツール] ツールボックスから [値の計算(Calculate Value)] ツールを追加します。
- [値の計算(Calculate Value)] ツールに式を入力します。式にランダムさを追加する場合は、何らかの算術演算(任意の式)とともに式に ArcGIS.Rand() 関数を入力します。この例で処理される式は、arcgis.rand("Normal 2 2") * 2 です。
- [値の計算(Calculate Value)] の出力とランダムさが追加されるパラメータ([傾斜角(Slope)] ツールの Z 値の倍率)との間にリレーションシップを作成するには、[傾斜角(Slope)] ツールを開き、[Z 値の倍率] フィールドで、ドロップダウン リスト(output_value)から出力変数名を選択します。
- [傾斜角(Slope)] ツールを右クリックして [プロパティ] をクリックし、[値の計算(Calculate Value)] ツールからの出力を [傾斜角(Slope)] ツールの前提条件にします。この最後のステップにより、[傾斜角(Slope)] ツールが実行される前に必ず、[値の計算(Calculate Value)] ツールの式、つまり、Z 値の倍率が計算されるようになります。
- モデルを実行します。
ランダムに配置されたポイントのランダム値の作成
ランダムに配置されたポイントにランダム値を割り当てるには、3 段階のプロセスを実行します。最初に、[ランダム ポイントの作成(Create Random Points)] ツールを使用して指定された数のポイントを配置します。2 番目に、[フィールドの追加(Add Field)] ツールを使用して、[ランダム ポイントの作成(Create Random Points)] ツールの出力フィーチャ レイヤに新しいフィールドを作成します。3 番目に、[フィールド演算(Calculate Field)] ツールを使用して、新しく作成したフィールドにランダム値を割り当てます。これを行うには、簡単な式で分布を指定した ArcGIS.Rand() 関数を直接使用するか、複合式で ArcGIS.Rand() 関数を使用します。