规划问道

地理时空动态模拟工具的基本原理、模型参数的含义及使用方法案例介绍丨城市数据派

地理时空动态模拟工具介绍(上)

地理时空动态模拟系列工具用于模拟土地利用变化过程并预测未来土地利用情景,该工具是由易智瑞公司与中山大学刘小平教授团队合作,基于FLUS模型原理,在GeoScene Pro软件上开发实现的,操作简单,且具有较高的模拟精度。
关于地理时空动态模拟系列工具的介绍将分为上下两篇。上篇主要介绍FLUS模型的基本原理、各模型参数的含义,同时为提高阅读体验,尽量避免涉及相关计算公式;下篇主要介绍地理时空动态模拟工具的使用方法,如果只想快速掌握地理时空动态模拟工具在Pro中如何使用,并评估该工具的精度,可以直接看下篇 。
01
FLUS模型的基本原理

FLUS (Future Land Use Simulation model)是模拟人类活动与自然影响下的土地利用变化以及未来土地利用情景的模型。该模型源自元胞自动机(Cellular Automata),并在传统元胞自动机的基础上做了改进。    

先来看什么是元胞自动机,元胞自动机(以下简称CA)是一种时间、空间和状态都离散的网格动力学模型,它具有模拟复杂时空演化过程的能力。CA由规则的元胞网格组成,散布在规则格网中的每一元胞具有有限的离散状态,依据确定的局部规则作同步更新。
上述文字多少有点晦涩,我们可以理解为CA的研究对象是栅格数据,每一个栅格单元(像元)就是一个元胞,元胞有自己的属性值(有限的离散状态),CA研究的内容就是根据转换规则并结合其周围像元情况,更新研究对象的属性值。

图 转换规则不同,属性值不同


在土地利用及其覆被变化领域(LUCC)中,元胞空间代表所有土地的集合,每个元胞有各自的属性(即土地利用类型),每个元胞在下一时刻的状态由该元胞当前状态、其邻域内元胞状态和转换规则共同决定。FLUS模型最重要的内容就是构建复杂的转换规则来改变像元的属性值,最终得到未来土地分布结果。那么它的实现原理是什么样的呢?来看FLUS的概述。
02
FLUS原理
FLUS模型是在神经网络模型基础上,结合自适应惯性竞争机制建立的未来土地利用变化模拟模型。该模型能够有效耦合社会经济要素和自然环境要素,并通过设计不同用地类型间转化矩阵和轮盘赌机制,实现土地利用变化的模拟,较好地弥补了传统元胞自动机方法中局部转换和参数确定复杂等问题。
FLUS模型大致可以概括为三个步骤:首先需要确定各种地类要达到的目标数量,其次就是计算演变过程中各地类转换的总体概率,用于控制转换过程的整体走向,最后就是根据轮盘赌的原则,推断各地类的分布。过程中通过不断地判断预测结果与目标数量是否一致,迭代调整总体概率,直到预测结果与目标数量为止。

图  FLUS大致流程


第一步预设未来各土地利用类型的数量

该数量是FLUS模型演变的目标。FLUS模型基于初始的土地利用栅格数据,结合制定的转换概率以及预测的各类土地用地需求数量,整体迭代推演出未来不同时期土地利用的分布,直到各地类的数量逼近预设的土地类型数量为止,最终以栅格方式输出各土地利用类型具体的空间分布情况。

图 各地类初始及目标数量

那么未来各土地利用类型数量是如何得来的呢?通常需要根据研究区域的实际发展情况,采用专家经验或土地利用数量预测模型进行预测,常见的土地利用数量预测模型包括SD 模型,马尔科夫链,灰色预测模型,线性回归等等,不在我们本次介绍的范围。

第二步提供各地类转换的总体概率

总体概率组成比较复杂,大致可以分为两部分,一是各像元土地利用类型发生变化的概率即适宜性概率,二是其他可变成分概率(包括各地类之间的转换成本、邻域条件及不同土地利用类型之间的竞争因素等),我们依次介绍这几个因子。
适宜性概率
适宜性概率是指对每一个像元,都计算其上的各种土地利用类型的发生概率,值越高说明这个像元是这种土地利用类型的可能性较高。下图说明当前像元是农用地的可能行比较大。

图 适宜性概率


FLUS模型使用ANN法计算适宜性概率,ANN即人工神经网络模型,模拟人脑神经元的工作方式来处理信息,广泛应用于机器学习和深度学习。
如下图所示,ANN分为训练和预测两步骤,首先对数据进行采样,形成训练集,在训练集上进行训练,不断调整模型权重值,目的是使模型能够学习到数据的模式和规律;其次使用训练好的模型对需要预测的对象进行概率预测。

图 ANN结构


ANN训练部分,大概分为三层,依次为输入层、隐藏层和输出层。在土地利用场景中,输入层需要指定输入变量,隐藏层可以简单理解为是黑盒子,其中是各种不可见的算法,负责提取特征和抽象信息,不停改正模型权重,使其接近输出层,输出层为各类土地利用类型。 
这里需要注意,输入变量为研究对象和影响因子。
研究对象是已知的土地利用分类数据,通常要对该数据进行采样获取训练集,进行训练。
影响因子也叫做驱动力数据,一般为社会、经济、交通和自然等空间变量,为了使模型更加准确,影响因子应当尽量丰富。例如自然地形数据可包括高程、坡度、坡向等,交通区位数据可包含到市中心距离、到城镇中心距离、到高速公路距离、到主干道距离、到铁路距离等多种栅格数据,经济数据可包括人口、GDBP等信息,还需要注意上述影响因子需要进行归一化处理,消除量纲的影响,提高模型的泛化能力。

ANN预测部分则根据训练后的权重计算各类土地利用类型的发生概率。
Pro中ANN输出的结果是一个n波段的概率栅格数据,n为输入土地利用分类数据的类别。
其他可变成分概率
在元胞自动机的运行机制中,每个像元是否会发展成一种特定的土地利用类型,不仅取决于由ANN预测的适宜性概率,还取决于在预测期内不同发展状态下的其他可变成分。因此,FLUS模型将适宜性概率与邻域影响因子、转换成本以及自适应惯性系数进行综合,确定每个像元的土地利用总体转换概率。
我们依次介绍上述三种可变成分。
邻域影响因子是指在邻域范围内,当前像元受其他用地单元的影响。邻域影响因子需要考虑两个因素,邻域大小(即范围,通常是3*3、5*5或其他大小的方形或矩形区域)和邻域权重(代表了各地类的扩张强度,即各用地类型在外界因子驱动下使自身得以扩张的能力。这个参数范围为0-1,越接近1,表明其扩张能力越强。)一般格式如下:

图 邻域权重


邻域权重常基于专家知识和一系列模型试验。
转换成本用于表示不同土地利用类型之间相互转换的难易程度,是一个二值矩阵,用于设置土地利用类型的相互转换关系。当一种土地类型允许向另一种类型转化时,对应的转换成本值设置为1;如果不允许转化,则参数设置为0。可以根据实际情况和研究区域的特点来设置转换成本矩阵。例如,可以规定城市用地和水体不能转换为其他用地,耕地不能转换为果园,果园和林地不能相互转换等,成本矩阵如下图所示。

图 转换成本


PS:转换成本分为为刚性 (取值为0或1) 与柔性 (取值为0~1) 两种。本文中采用刚性方法,即非0即1的选择。
自适应惯性系数用于调整当前土地利用的数量,使其按照预设需求进行发展。自适应惯性系数将在特定的土地利用类型的发展趋势与预设目标存在较大差距时,在下一次迭代中调整该土地利用的发展趋势,从而实现动态增加该土地利用类型的数量。例如,未来规划需要更多的耕地,而上一次迭代中耕地的配置减少,自适应惯性系数将会增加,以保留更多的耕地,并促进其他土地利用类型向耕地转化。自适应惯性系数参与整个迭代过程计算,属于FLUS模型的灵魂,不需要任何设置,模型自动计算自适应惯性系数。
综合上述的适宜性概率、邻域影响因子、转换成本以及自适应惯性系数,即可得到总体转换概率。

图 总体概率


第三步轮盘赌预测
在得到总体转换概率以及目标后,如何推测各土地利用类型的分布呢?很多方法都是将总体概率最高的用地类型优先分配给各像元,但是这种方法仅考虑占主导的土地利用类型,忽略了其他非优势土地利用类型的分配机会。在FLUS模型中,采用了轮盘竞争机制来确定用地类型。由轮盘所占面积代表分配概率,再随机为像元分配用地类型,对于每个像元而言,总体概率高的用地类型被分配的可能性更大,但是较低概率的用地类型仍有机会被分配,该机制的随机特征性使模型能够更好地反映用地模拟的动态性与不确定性。

图 轮盘赌原理


结合上面的所有内容,FLUS模型流程大致如下:

图 flus模型流程

03
精度验证
FLUS模型以及模型中的参数是否能够准确模拟未来的土地利用情景呢?这就需要精度验证,用于衡量模型的准确程度及可靠性。FLUS模型选择使用kappa系数及FoM指标衡量其模型精度。
Kappa系数常用于衡量两个变量的一致性情况,其实现原理可以参考《分类模型评估神器-混淆矩阵》(今日第三篇) 这篇文章, Kappa指数的计算结果为-1~1,通常在0—1之间,且 Kappa值越大表示两个对比变量一致性越好。一般来说,当Kappa值大于0.75时,表示模拟结果与真实值差距较小,模拟精度较好,通常认为模型可用;当Kappa值小于 0.75时,表示模拟结果与真实值的差距较大,模拟精度较差,通常认为模型未达到可应用要求。

FoM指标的计算公式为:

式中:a是实际为变化而预测为不变的误差数量;b是实际与预测均为变化的正确数量;c是实际变化与预测变化不一致的误差数量;d是实际为不变而预测为变化的误差数量。FoM指标范围从0-1,其值越接近1表示模拟精度越高,但具体的阈值并没有固定标准,很多情况下这个指标结果都不会超过0.5。
04
FLUS使用流程
假设我们已经有2010年和2020年的土地利用现状数据以及对应驱动因子,要预测2030年的土地利用情景。可以先用2010年土地利用现状数据预测2020年的土地利用情景;再使用精度验证的方法,比较2020年的土地利用情景和2020年的土地利用现状数据,如果精度可以满足,说明当前使用的FLUS模型以及参数设置能够满足预测的要求,再根据2020年土地利用现状数据预测2030年的土地利用情景,其结果的可信度较高。

以上就是FLUS的基本原理以及使用的流程,下一节我们介绍在GeoScene Pro中如何(见:今日第二篇文章)

地理时空动态模拟工具介绍(下):

地理时空动态模拟工具的使用方法

开头我们提到,GeoScene Pro软件提供了地理时空动态模拟工具箱,用于模拟土地利用变化过程并预测未来土地利用情景。该工具箱就是基于FLUS模型原理实现的。
地理时空动态模拟工具箱包含两个工具,分别是基于人工神经网络的城市发展概率计算工具(ANN)和元胞自动机城市发展模拟工具(CA)。ANN用来计算适宜性概率,CA用于整合总体概率并基于轮盘赌进行预测。
这是FLUS模型最核心的两个工具,除此之外还需要使用混淆矩阵工具计算kappa系数,并使用自定义工具计算FoM指数。本文将依次介绍这4个工具。我们以某地2010年、2020年两年的土地利用数据为例,推测2030年的用地数据分布。
01
数据准备

整个地理时空动态模拟过程中涉及到的输入数据可以大致分类以下几类。


类型

文件名

数据说明

用途

土地利用数据

LUCC2010.tif

2010 年土地利用分类数据

初始年份土地利用数据,模型输入

LUCC2020.tif

2020 年土地利用分类数据

用于验证 FLUS 模型的模拟精度,验证数据

土地利用变化驱动因子

dem.tif

高程

用于计算适宜性概率,代表自然地形影响

slop.tif

坡度

Aspect.tif

坡向

Pre2010.tif

2010年平均降水

用于计算适宜性概率,代表自然环境影响

Pre2020.tif

2020年平均降水

tmp2010.tif

2010年平均气温

tmp2020.tif

2020年平均气温

Road.tif

距公路距离

用于计算适宜性概率,代表交通区位影响

Railway.tif

距铁路距离

River.tif

距河流距离

GDP2010.tif

2010年国内生产总值

用于计算适宜性概率,代表人类活动影响

GDP2020.tif

2020年国内生产总值

pop2010.tif

2010年人口分布

pop2020.tif

2020年人口分布

转换成本

转移矩阵.xls

Excel文件

m*m的矩阵,m表示土地利用类型的个数。取值01

数据说明:
1.针对驱动因子,在实际多类别土地利用变化模拟中,可以考虑更多的其他自然与人类活动的因素的影响。比如:土壤属性的空间分布等等。
2.坡度、坡向数据可以基于高程数据分析得出,公路、铁路、河流等矢量数据可通过欧氏距离等方法得出栅格结果,GDP及人口数据可以通过插值的方式实现。
3. 土地利用分类数据中,用地类型分别为:耕地、林地、草地、水域、城市、未利用地,栅格值依次为1、2、3、4、5、6。
02
数据预处理
由于数据来自不同的渠道,生产方式不同,可能会出现坐标系、数据范围、分辨率等不一致的情况,需要对上述数据进行对应的数据处理。所有数据需要全部裁剪并重采样成相同的分辨率、相同区域、相同坐标系的栅格数据,且图像的行列数要一致。
由于栅格数据与矢量数据处理工具不同,可以考虑分别将针对栅格数据和矢量数据的工具制作成模型构建器,方便批量、快速进行处理。

图 矢量栅格数据预处理示意图

03
ANN工具
在地理处理工具箱中,找到地理时空动态模拟工具箱,双击【基于人工神经网络的城市发展概率计算】工具。

图 基于人工神经网络的城市发展概率计算


【土地利用分类数据 】输入土地利用数据,土地类型编码需要从 1 开始,并且要求类型编码连续。比如,模拟 5 种土地类型的相互变化,那么土地利用数据中 5 种有效土地类型的编号分别为:1,2,3,4,5。NoData Value则可以是这 5 个编号以外的任何值。

【采样率】表示从数据中抽取一定比例的数据,单位是研究区域有效像元数的百分之一,如果选择2,表示从原始数据中抽取2%来参与概率计算。

【隐藏图层】是神经网络训练参数之一,用来构建全连接网络时候的隐藏层节点数目。

【训练次数】是神经网络训练参数之一,表示模型训练的次数。

【影响因子数据 】即驱动因子。

【输出概率图数据 】输出结果为每种土地利用类型的发生概率,即适应性概率。

ANN输出的结果是一个n波段的概率栅格数据,n为输入数据的类别,本例共有六种地类,因此为6波段,每个波段代表每种土地利用类型的发生概率。


04
CA工具

在地理处理工具箱中,找到地理时空动态模拟工具箱,双击【元胞自动机城市发展模拟】工具。工具中的参数数量较多,为便于理解,我们将工具参数顺序进行调整,依次介绍。


图 元胞自动机城市发展模拟


【土地利用分类数据】参数与ANN工具中的数据一致。


【目标】表示目标像元数,即未来各类土地利用类型的面积。目标值的输入以分号分开,分号隔开的个数和土地利用数据类别相等。当计算结果达到目标时,程序计算完毕。通常根据需要研究区域的实际地区的实际发展情况,采用专家经验或土地利用数量预测模型预测出未来各类土地的需求。即上篇提到的FLUS模型中的目标数量。(这里我们使用2020 年土地利用分类数据中的统计结果)


【概率数据】表示各类用地的分布概率,即ANN工具计算的结果。


【邻域大小】窗口大小,表示以当前像素为中心所影响的范围。比如邻域大小为9,表示窗口的大小为9*9。


【邻域矩阵权重】参数表示各地类的扩张强度,范围为 0~1,越接近 1代表该土地利用类型受邻域的影响更大。以逗号隔开,如0.9;1;0.3;1;1。邻域权重用分号隔开的个数和土地利用数据类别相等,即和目标对应。


PS:【邻域大小】和【邻域矩阵权重】组成邻域影响因子,表示在邻域范围内,当前像元受其他用地单元的影响。


【转换矩阵】用于表示不同土地利用类型之间相互转换的难易程度。以excel文件的形式提供,转移矩阵是一个m*m的矩阵,m表示土地利用类型的个数。类别编码的值必须从1开始,依次类推,直到m。当一种土地类型允许向另一种类型转化时,对应的转换成本值设置为1;如果不允许转化,则参数设置为0。


格式如下:

图 转换矩阵


结合上文提到的用地类型,上图表示水域和城市用地无法转换成其他用地类型,林地和草地无法转换成水域。


适宜性概率、邻域影响因子、转换成本以及自适应惯性系数(无需输入),即可得到总体转换概率。


【最大迭代次数 】当程序运行的结果达到目标期望时,程序停止继续迭代,也就是说程序运行的次数可能会小于该值。


【加速值 】当模拟的图像范围比较大时,模型运行较慢。可以将因子设为一个较大的值(0 到 1 之间)以加快土地利用变化的转化速率。


【有无约束数据】是可选参数,如果选择了约束数据,表示禁止限制区域内的土地类型相互转化,例如保护区、宽阔水面等限制不可变化的区域。


05
Kappa系数计算

使用《分类模型评估神器-混淆矩阵》文章中提到的混淆矩阵工具,对预测的数据进行评估。

图 混淆矩阵


其结果如下:

图 混淆矩阵属性表


Kappa系数为0.757,总体精度为0.83。

06
Fom指数计算

GeoScene Pro中没有直接提供Fom指数计算的工具(后续版本中将会增加),可以根据Fom指数的计算公式实现,其公式如下

式中:a是实际为变化而预测为不变的误差区域;b是实际与预测均为变化的正确区域;c是实际变化与预测变化不一致的误差区域;d是实际为不变而预测为变化的误差区域。

这里提供一个简单的小工具(识别如下二维码进行下载)。

下载工具  fom指数.tbx

链接: https://pan.baidu.com/s/1m3bAB6DVw0mIfURtWmdnDw?pwd=u2an


图 fom系数


运行结束得到fom指数。

图 fom系数结果


该工具后续会集成到GeoScene 软件中。

07
模型评估

根据上两步可以得出Kappa系数大于0.75,总体精度在83%,fom指数为0.254,FLUS 模型的模拟精度较高,即能够较好地呈现真实的土地利用发展形态,因而将其应用于预测未来用地发展的可靠性也较高。

08
后续预测

判断模型可靠性后,就可以继续使用ANN和CA工具预测2030年的土地利用发展情况了。这里记得对于人口、GDP、道路数据等影响因子及时更新,并使用专家评估或者马尔科夫链等方法预测目标数量。

图 ANN计算2020年概率


09
常见问题

常见问题

1. 运行ANN工具时,报No module named ‘rasterio’错误。

问题原因:缺少对应的依赖包。

解决方法:在菜单栏【工程】|【包管理器】,对python环境进行克隆。手动克隆方法可以参考https://zhihu.geoscene.cn/article/4009。

并设置克隆后的环境为活动环境。在列表中搜索rasterio,进行安装。

2. ANN工具运行,出现WARNING:TensorFlow 警告,工具执行失败。

问题原因:TensorFlow版本问题,GeoScene 4.1之后不再报错。

解决方法:直接忽略,工具实际是执行成功的。

3.ANN工具,报工具无法打开的错误。


解决方法:重启Pro软件或重启机器。

4.CA工具运行报ValueError: invalid literal for int() with base 10: ”  错误。

问题原因:输入的目标或邻域权重矩阵中“;”号不是半角,或者输入数据有空格。

5.CA工具报目标和邻域权重数据个数不匹配错误。

问题原因:土地利用分类数据的类型与邻域矩阵权重数量不一致,或土地利用分类数据的NoData值异常。

排查以下情况

  1. 土地利用分类数据在统计数据中是否最低值为1。

2. 栅格信息中NoData值是否为空。

3. 概率数据的波段信息是否与土地利用分类数据类型数量一致。

4. 目标数量是否与土地利用分类数据类型数量一致。

5. 转换矩阵M*M结构,M是否与土地利用分类数据类型数量一致。

6. 邻域矩阵权重数量是否与土地利用分类数据类型数量一致。

解决方法

  1. 首先使用识别工具,确定0值实际代表的是NoData。且在栅格信息NoData值为空或者其他数值。确定符合上述条件,再使用下方工具。


方法1:使用栅格计算器


构建新的栅格,将0值设置为NoData。

在内容列表中找到该栅格,右键导出栅格,NoData值设置为0.


方法2:

在python环境中输入如下代码

ras=arcpy.Raster("landuse2010.tif")ras.noDataValue=0ras.save("D:\nodata2010.tif")

2. 在内容列表中找到该栅格,右键导出栅格,NoData值设置为0.

3. 重新计算概率数据。

4. 修改目标个数,并确保用分号分隔。

5. 确保修改转换矩阵确保M数量与分类数量一致,且没有表头等信息。

6. 修改邻域矩阵权重个数,并确保用分号分隔。
最近有朋友问我们:为什么没有及时看到推文?因为微信改了推送规则,没有点“赞”在看,没有把我们“星标”,都有可能出现这种状况。
“星标”,不迷路!看完文章顺手点点“赞”在看,就可以准时与我们见面了~

原文始发于微信公众号(城市数据派):https://mp.weixin.qq.com/s/zjETmzByumWpzPfLDPrCqQ

赞(0)