随机数生成器和流
随机数由算法生成,该算法使用种子值和其他参数生成一系列随机数。这样的一系列随机数称为随机数流。当使用随机数创建模型时,追踪随机数的来源流非常重要。有时候,所有不同过程的随机数可来自于同一个流,而其他时候可能每个过程都需要唯一的流。
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 因子字段中,从下拉列表中选择输出变量名(输出值)。
- 右键单击“坡度”工具,然后单击“属性”,之后再使“计算值”工具的输出作为“坡度”工具的前提条件。上一步可确保“计算值”工具中的表达式(z 因子)能始终在运行“坡度”工具之前计算。
- 运行此模型。
创建针对随机放置点的随机值
分配随机放置点的随机值需要三个步骤。首先,指定数量的点由“创建随机点”工具进行放置。其次,“添加字段”工具用于在由“创建随机点”工具生成的输出要素图层中创建新字段。最后,“计算字段”工具用于将随机值分配给新创建的字段,方法是:直接使用具有某种分布的 ArcGIS.Rand() 函数作为简单表达式,或者在复杂表达式中使用 ArcGIS.Rand() 函数。