4、一步一步教你软件建模(2)

测试

反复测试、修改,直到你认为它达到预定目标为止。陶在朴认为,模型测试是一个持续的过程,包括机械错误测试、强健性测试、敏感性测试与情景测试、极端条件测试以及回测数据检验等。约翰·斯特曼教授认为,系统动力学建模测试包括边界充分测试、结构评估测试、量纲一致性测试、参数评估、极端条件测试、积分错误测试、行为重现测试、行为异常测试、家族成员测试、惊异行为测试、敏感性分析、系统改进测试等12种。

下面,我将主要的测试项目分别做简要介绍:

(1)基本错误检查

基本错误指的是许多非结构、非逻辑性的表面错误,诸如方程式两端的单位不同、量纲不一致、计算符号错误、不允许或不可能为负数的存量出现负数(如不论需求有多大,库存都不可能降为负数),或某些变量无限增长,有悖物理规律(如物质守恒定律等),等等。

检查基本错误靠的是细心,可以把计算结果用图表形式输出,然后进行仔细观察和甄别。

(2)边界充分性检查

测试目的是确定系统模型的边界是否适当。检验标准包括:第一,用来描述问题的重要概念是否被当作内部变量;第二,当边界假设被放宽时,模型的行为是否变动剧烈;第三,当边界假设被扩展时,有关政策的建议是否会发生变化。

该项测试可使用因果关系图、存量流量图、多重原因图、实体关系图等工具,并直接检查模型的方程,修改部分构成变量,观察系统的过程。同时,可通过面谈、研讨会等方式听取专家的意见,获取文献资料。

(3)强健性测试

强健性(Robustness)测试指的是检验模型能否经得住不同情况或各种变化的冲击,也被称为“鲁棒性”测试。可用方法包括:第一,在一些关键变量方程中加上诸如阶跃或脉冲之类的函数(STEP或PULSE),使流量突然加大并由此观察存量能否维持合理的状态;第二,检视某些关键变量的动态反应是否有异常现象,并根据试验的反应进行相应调整。

(4)现实性检验(极端条件测试)

陶在朴认为,对系统的极端状况了解愈多,对系统行为的理解愈深。同时,模型应该在极端条件下依然可靠。这意味着,不管输入值或加载模型上的政策多么极端,模型的表现都应该符合现实。所谓极端条件,指的是模型发展趋势的极限值,例如最终产品的库存为0等。通过极端条件的测试,可以发现模型结构的“裂缝”,或找出遗漏的变量或挑出流量、存量不能自圆其说的瑕疵。

极端条件测试可以两种方式进行:通过对模型方程的直接检查和通过模拟进行。第一种方式是,在检查模型方程时,询问一下自己,在方程的每个输入值取其最大或最小值时,决策的输出是否依然可行而合理;第二种方式是,在模拟过程中测试一些极端情况,例如公司产品价格上升10亿倍或开除所有的工人,然后观察相关变量的变化情况。在前一种情况下,对公司产品的需求应立即降为0;在后一种情况下,生产也应该立即降为0。这种测试也被称为“现实性检验”。

(5)敏感性测试和情景测试

一般情况下,系统模型并不因参数变化而改变系统的动态,换言之,只要模型的参数或表函数设计正确,模型对参数的变动并不敏感。敏感性测试就是通过寻找能使系统行为改变的敏感参数(含外部参数),并逐个测试,观察模型行为的变化,以便找到模型的参数设置和影响关系。

对于外部变量,设置不同的参数,对它们的数值变化做敏感性测试而产生的行为便是情景测试。

(6)回测数据检验

回测即回顾的“预测”,将预测的时间变量取负值,以回测的数据与实际的历史数据相比较,来检验模型的质量。

当然,测试并不用以证明模型是否正确。正如约翰·斯特曼所说,事实上,模型完全的有效性和检验是不可能的。但是,测试对于发现错误的假设或缺陷,提高模型的适用性和有用性,具有重要价值。

读书导航