这一步最常犯的错误是过多考虑不必要的细节。若过多关注细节,研究者就不得不为此收集大量的数据,这样会大大增加对数据可靠性控制和处理的难度,从而给模型的正确性校验和有效性验证带来巨大的困难。换句话说,这也意味着很难从研究中得出有效的结论。正如与真实世界最相吻合的是真实世界本身一样,但这种逼真对科学认识来说毫无意义。
一旦一个模型被设计出来,那么就可以着手去架构它。这一步可能需要自己动手编写一些程序,或利用一些方便开发建模软件开发工具库或“模型机床”(已开发的方便模型架构的软件),甚至仅仅是在别人做好的测试框架中填充些自己的数据。使用一些第三方提供的开发工具通常比自己动手从零开始设计要容易得多,因为许多在开发工具中已经被考虑的问题都需要自己重新考虑。比如,数据统计和图表显示的功能,自己开发是一件很费时间的工作,而在大多数工具包中都已经提供了这些接口以方便变量的输出显示。至少这其中的一些可能错误在很多人的共同使用中被发现和更正(尽管我们无论什么时候都不应假定这里不再存在任何错误)。
使用工具包不好的方面在于,每一种工具包都有自己内在的框架假设,这限制了它的功能特性,从而也限制了程序设计的自由度和它适用的范围。这里有不同的软件,每一种有各自适合的应用条件,但没有哪一种可以包容或完全取代其他工具的,本书的第四章将对不同的软件工具及其特性进行比较详细的介绍。
当正确性验证通过后,剩下来的工作就是效用检验。
效用检验即模型的有效性检验,这一步所关心的问题是,在研究者关注的输入输出行为关系表现上,这个模型是否与实相吻合。如果一个模型能够反映出实相的行为,那么就可被认为是可靠的、有效的。效用检验可通过比较计算机的输出和实际调查研究的统计结果来进行。
在形成一个可运行的仿真后,下一步就是检验模型是否真的按照我们的期望在运行(参见「11])。对复杂的模型来说,刚开始能运行的模型,输出的更可能是一个错误的结果。因此需要准备很多测试案例,进行各种各样的边界测试。模型中随机数的应用增加了排错和正确性验证的难度。比如,在一个人工社会的仿真研究中,如果有一个参数控制社会的规模(比如人口数),那么可以从最小规模的社会人手开始检验;如果还有一个参数控制的是社会的复杂度(比如年龄差异、种族类别等),可以先从最小的复杂度开始调试。在一个多参数的仿真中,用逐级构建的方式调试是一个不错的选择。所谓逐级构建,就是分步骤地增加假设条件和模型的复杂度,在有多个变量都是随机数的情况下,可通过先固定别的参数,单独调试一种参数随机变化的情况,然后再从两个组合开始直到完整模型所需要的假设条件全部正确运行,在后面的具体实例介绍中我们将根据实例具体说明。
然而有以下几点需要特别注意。
(1)模型和真实现象在统计分布上都是有随机噪声的(如部分依靠随机参数),不可能期望完全相关。模拟与实验数据之间的偏差是否大得令人怀疑部分取决于输出测量值的期望统计分布。不幸的是,对于仿真来说,很难确定和估计这个偏差。
(2)许多仿真都是路径依赖的,输出依赖于初始条件的精确选择,每次仿真的历史对输出都有影响。换句话说,输出对这个模型的某些假设输入参数非常敏感。
(3)即便仿真的运行结果与实际数据很匹配,还存在另外一种可能,就是实际现象中的另外一些特征仿真并不能重现。比如,曾经有一个世界人口模型,尽管对世界人口未来50年的预测看上去是可信的,但在试图用这个模型重现过去20年人口变化时却失败了,尽管用的是同样的模型,设置的是同样的参数。
(4)必须考虑另外一种可能,即模型正确,而搜集的真实数据却可能不可靠,或者研究者的假设和估计有误。如一个为理解法国两万年前社会复杂度上升的计算模型,该模型采用的数据都来自干考古学的线索,这些经过很多次解释的数据本身是否有效是很值得怀疑的。
(5)版本控制的重要性。不同参数或假设的细微调整可能会带来运行结果上的极大不同,但并非只有最符合建模者期望的才是有价值的,一些表面上背离常识的运行结果也许蕴藏着更深层次的发现,且每一次参数的调整与假设的修正都应该给出理由,并给出调整或修正前后仿真运行变化的合理解释。这样每一次对模型进行细微的调整或者只改变一些参数的多次重复运行的中间状态或最终结果都被称为仿真的一个版本,在研究中应该完整地记录下来。一些专门的建模平台和软件已经很好地为研究者考虑了这点,可以很方便地保存不同的仿真版本(例如,在Starlogo中就有另外保存时自动增加版本序号的功能,参见附录B)。
当模型设计得过于抽象时会导致另外一种困难,即很难把模型中得出的结论与某个具体的实相数据进行比较和对照。如 Sob,lling在1971年做的一个解释人种居住自动隔离过程的模型(参见[121),由于模型非常抽象简单,很难直接用现实的数据去验证它的效用。这个问题在人工社会研究中同样存在,实相或者与模型相差甚远,或者压根就不存在,对于这样的模型来说,就很难说正确性验证和效用验证之间有什么区别。
一旦有了一个效用模型,至少在一些特殊的初始条件和参数输入下模型可以运行了。研究者们接下来很可能希望考虑的问题就是敏感性分析。
在为
社会经济系统
建立多主体模型时,除遵循前面介绍的一般流程外,还应当注意上述流程中的选代性。实际研究中,很难做到完成一次流程就达到了研究的目标,许多时候我们都需要在原始模型的基础上反复重构,不断修正,才能设计出一个好的模型。因此,在设计模型的各阶段中,我们可以遵循以下原则。
(1)尽可能简化真实世界的问题,只保留那些对解答问题必不可少的内容。
(2)设计主体时,重点放在主体行为与交互作用的规则上,其次考虑可能需要的各种随机因素。
(3)应用随机数时,应尝试着换用不同的随机数产生方式或随机数种子,多次运行模型,并从各个运行中收集数据进行统计。
(4)模型结果出来后,要尝试去理解主体的行为简单的规则是如何导致观测到的系统总体的行为现象,特别是模型运行结果反常时,这一点更为重要。
(5)调节系统的参数,确定影响系统行为的关键因素以及不同参数的变化对系统整体行为影响的程度与方式。
(6)如果可能的话,进一步简化模型,或必要时添加新的考虑因素。
(7)如果在研究过程中发现严重的假设错误,则需要对模型全部重构。
任何研究的最后一步就是公开发布研究的结论,对于应用计算机建模方法的研究来说,撰写公开发布的材料有些特殊的困难和要求。因为,发布的目的是与大家分享发现,最理想的效果是读者能够从发布中抓住其中与社会科学研究相关的要点,而不被模型的技术细节所牵累;同时,有兴趣的读者或同行又能根据发布的文档,对模型进行重复验证,这样既可以更精确地理解模型工作的细节,也可以在此基础上进行拓展研究。这两个目标之间存在着非此即彼的矛盾。因为要让读者能够重复仿真,必须描述模型的细节,而传统的刊物一般都不能提供足够的篇幅空间。解决这个问题的办法是,另外在互联网上公布模型的程序代码和相关的使用指导和说明书,或者干脆通过电子期刊发布,因为电子期刊并不限制纸张和空间,不仅可以包括传统的论文格式,还可以包括代码、样本运行的其他材料,结果输出的大量统计图片,甚至动画和别的多媒体资料等。
国外有些电子期刊鼓励研究者发布论文时,把有关的计算机模型作为附件一起发布。中国人民大学经济科学实验室为了积极推动计算机仿真在社会科学中的应用,建立了一个开放式协作研究平台,方便研究者们集中发布模型的程序代码,以期望解决这个问题,同时能最大限度地鼓励这一类研究者们形成一个共同的研究规范,以及一个有利的协同研究的场所。
Science综述:与时俱进的多主体仿真模型
.Science
.2018-4-13
[引用日期2019-03-02]