随机数由算法生成,该算法使用种子值和其他参数生成一系列随机数。这样的一系列随机数称为随机数流。当使用随机数创建模型时,追踪随机数的来源流非常重要。有时候,所有不同过程的随机数可来自于同一个流,而其他时候可能每个过程都需要唯一的流。
ArcGIS 提供了多个不同的数字生成器来创建随机数。在 ArcGIS 中,有三种生成随机值的方式(生成器类型),分别为 Standard C Rand() 函数、ACM collected algorithm 599 及 Mersenne Twister mt19937。可对模型使用随机数生成的结果进行再现。为确保模型中的再现性,可添加种子作为参数。如果针对使用随机数的同一模型的两种不同运行方式指定相同种子,则该模型会产生相同的结果。
随机数生成器既可在环境设置中进行全局标识,也可在任何使用随机值的工具内部进行全局标识,这些工具包括计算值、计算字段、创建随机栅格或创建随机点等。随机数生成器可基于生成器类型和种子生成随机数流。数字是随机确定的,其值介于 0 和 1 之间。也可根据需要创建数字。
大多数情况中,例如使用数值模拟输入数据或模型参数的不确定性时,在工具中添加纯随机值往往不是有效的方法。通常,关于输入数据或模型参数中的不确定性分布存在一些先验信息。创建随机栅格、计算值和计算字段等工具可将数值从随机流中提取出来,并基于在工具中识别的分布情况对这些数字进行变换。例如,当向输入高程表面(精度值范围为 2 英尺左右)添加随机值时,如果模型以一种错误的分析方式运行多次,则添加 0 与 1 之间的值应比添加 1 与 2 之间的值多。使用随机值时,可以指定值的范围、使用的分布模式(例如,正态分布或泊松分布)以及分布参数(例如,标准差)。每个值都独立于其他值。
在使用分布的工具中(例如创建随机栅格、计算值和计算字段),有多种分布模式可用于分配(或转换)随机值。分布一般会产生不同的结果,具体选择哪个分布是由上次使用的分布决定的。所选的分布应该是所模拟过程的最佳表示。
有关可用分布的说明以及常规使用方法,请参阅用于分配随机值的分布。有关每种分布模式的语法及参数信息,请参阅随机值的分布语法。
设置全局随机流
在“环境设置”对话框的“随机数”部分可以设置随机数生成器类型及种子。所有使用随机值的后续工具(其中包括 ArcGIS.Rand()(位于计算值和计算字段中)、创建随机栅格以及创建随机点)均可将值从流中提取出来。当每个工具都需要随机数时,此工具将会从全局随机流中提取下一个值。
针对各个过程创建不同的随机流
有时可能需要为各个过程指定唯一的流,以确保该过程随机独立、不会产生结果偏差或者能够再现输出。可通过设置局部随机数生成器和种子来创建局部流。(例如,在某个工具上单击“环境”按钮,或在“模型构建器”上右键单击某个工具然后单击“属性”) 这样将创建新的随机流,且当该工具需要随机值时,它仅会从这个最新创建的流中提取。若此模型进行迭代,则已指定随机流的工具将随着每次迭代持续从该局部流中提取值。其他工具无法从此流中提取值。
可以根据需要在模型内创建多个局部数据流。还可以采取混合方式,让一些工具从全局流中提取随机值,而其他工具从工具本身的局部流中提取值。
随机更改参数
在“模型构建器”模型中添加参数的随机性需要五个步骤。在以下“模型构建器”示例中,将随机更改 Spatial Analyst 坡度功能的 z 因子。
- 添加“Spatial Analyst 工具”工具箱中的坡度工具。
- 添加“数据管理工具”工具箱中的计算值工具。
- 在计算值工具中输入一个表达式,如果该表达式中已添加了随机性,则将 ArcGIS.Rand() 函数与相应的算术运算输入到表达式(或任何表达式)。在本例中,要处理的表达式为
。arcgis.rand("Normal 2 2") * 2
- 要在计算值的输出与要添加随机性的参数(坡度工具中的 z 因子)之间建立某种关系,请打开坡度工具,然后在“Z 因子”字段中,从下拉列表中选择输出变量名 (output_value)。
- 右键单击坡度工具,单击“属性”,然后将计算值工具的输出设置为坡度工具的前提条件。上一步可确保计算值工具中的表达式(z 因子)始终在运行坡度工具之前进行计算。
- 运行模型。
创建针对随机放置点的随机值
分配随机放置点的随机值需要三个步骤。首先,使用创建随机点工具放置指定数量的点。其次,使用添加字段工具在创建随机点工具生成的输出要素图层中创建新字段。最后,使用计算字段工具将随机值分配给新创建的字段,方法是:直接使用具有某种分布的 ArcGIS.Rand() 函数作为简单表达式,或者在复杂表达式中使用 ArcGIS.Rand() 函数。