16元序验证与确认体系VVUQ
元序 WorldScript 验证与确认体系(VVUQ)
元序模型可信度的系统性保障框架。回答一个核心问题:我怎么知道模拟的结果是对的?
本文档将 VVUQ(Verification, Validation, Uncertainty Quantification)写进元序语言规范,而非留在路线图待办。
前置阅读:《04元序规则》《05运行时架构》《09对比手册》。
一、为什么 VVUQ 是元序的生命线
元序瞄准的应用场景——政策推演、灾害预警、经济预测、交通调度——全是高风险决策场景。一个没有校准、没有敏感性分析、没有 out-of-sample 检验的推演系统,输出的数字再漂亮也是不可信的。
更危险的是元序的「容错存续」哲学:系统永不崩溃,偏差被静默吸收。如果模型从某个 Tick 起就跑歪了,系统会继续「收敛」到错误的稳态,而你没有任何信号。
因此,VVUQ 不是元序的附加功能,而是与五种核心句式同等重要的语言级能力。
二、VVUQ 四层框架
元序采用 ASME VVUQ 标准框架["https://www.asme.org/getmedia/c9d712f3-cc5b-4326-b6e4-bd53c50ed9a6/asme-vvuq-standards-portfolio-brochure-3-2026_final.pdf","https://matforge.org/verification-vs-validation-in-scientific-simulations-a-practical-guide/"],结合 ABM 领域的经验校准方法论["https://arxiv.org/html/2410.19412v1","https://www.jasss.org/27/1/11.html"],定义四层验证:
┌─────────────────────────────────────────────────────┐
│ L4 不确定性量化 (UQ) │
│ "结果有多可信?" → 置信区间、敏感性、ensemble │
├─────────────────────────────────────────────────────┤
│ L3 模型确认 (Validation) │
│ "我们建对了模型吗?" → 与真实数据对比、out-of-sample │
├─────────────────────────────────────────────────────┤
│ L2 参数校准 (Calibration) │
│ "参数对吗?" → 数据拟合、后验推断、pattern-oriented │
├─────────────────────────────────────────────────────┤
│ L1 实现验证 (Verification) │
│ "代码写对了吗?" → 单元测试、收敛性、回归基准 │
└─────────────────────────────────────────────────────┘
2.1 L1 实现验证(Verification)
回答:我们是否正确地实现了规范?
| 验证项 | 方法 | 通过标准 |
|---|---|---|
| 词法/语法正确性 | 单元测试覆盖所有句式 | 100% 语法构造有测试 |
| 状态场连续性 | 验证单Tick变化≤Δmax | 任意初始状态下成立 |
| 因果强度计算 | 与手工计算对比 | 误差<1e-9 |
| 平滑过渡函数 | 验证收敛到目标值 | 足够Tick后误差<ε |
| 调度器确定性 | 相同输入→相同输出 | 逐位一致 |
| 回归基准 | 固定种子运行标准程序 | 输出与基准快照一致 |
| Tick收敛性 | 不同Δmax下结果趋同 | Δmax→0时结果收敛 |
语言级支持:元序解释器内置 --verify 模式,自动运行上述检查并输出验证报告。
2.2 L2 参数校准(Calibration)
回答:模型参数是否与真实系统吻合?
元序的参数包括:因果规则权重、涌现阈值、状态初始值、演化步长、偏差收敛灵敏度等。
校准方法
方法1:模拟矩匹配(Method of Simulated Moments)
- 选择真实系统的关键统计量(均值、方差、自相关、极值分布)
- 参数空间搜索,使模拟统计量与真实统计量距离最小
- 适用于数据充足的场景
方法2:近似贝叶斯计算(ABC)
- 对参数指定先验分布
- simulate-and-compare 循环:采样参数→运行模拟→与数据比较→接受/拒绝
- 输出参数后验分布,而非单点估计
- 适用于随机系统和似然不可计算的场景["https://metricgate.com/blogs/workflow-for-calibrating-an-agent-based-model/"]
方法3:Pattern-Oriented Modeling(POM)
- 要求模型同时复现多个真实模式(而非单一统计量)
- 例如交通模型需同时复现:流量时变曲线、拥堵空间分布、早晚高峰比例、路段速度分布
- 多模式同时匹配可显著降低过拟合风险["https://arxiv.org/html/2410.19412v1"]
语言级支持:
// 校准声明:指定参数、先验、目标统计量
Calibrate 交通模型:
参数 路段.通行能力 ~ Uniform(0.4, 0.9)
参数 信号.周期长度 ~ Normal(0.6, 0.1)
目标 宏观.平均流量 == 真实数据.平均流量 (容差=0.05)
目标 宏观.拥堵时长分布 == 真实数据.拥堵分布 (容差=0.1)
方法 ABC (样本数=2000, 接受率=0.05)
输出 参数后验分布到 校准结果.json
2.3 L3 模型确认(Validation)
回答:模型是否足够好地代表了真实系统?
确认分两个层次:
描述性确认(In-sample):模型输出能否复现用于校准的数据特征?
- 这是最低标准,仅通过 in-sample 不能证明模型有预测能力
预测性确认(Out-of-sample):模型能否预测未用于校准的数据?
- 将数据分为校准集和验证集
- 用校准集调参,用验证集检验预测精度
- 这是模型可信度的关键检验["https://export.arxiv.org/pdf/2412.16591","https://faculty.sites.iastate.edu/tesfatsi/archive/tesfatsi/EmpValid.htm"]
确认指标:
| 指标 | 定义 | 适用场景 |
|---|---|---|
| NMSE | 归一化均方误差 | 连续状态轨迹 |
| 模式匹配率 | 模拟模式与真实模式的重合度 | 空间/时空模式 |
| 预测区间覆盖率 | 真实值落入预测区间的比例 | 不确定性预测 |
| 因果链一致性 | 模拟的因果关系与领域知识是否一致 | 机制验证 |
| 极端事件复现率 | 极端事件的频率/强度匹配度 | 灾害/风险场景 |
语言级支持:
// 确认声明
Validate 交通模型:
数据集 校准集 = 2024年1月-6月卡口数据
数据集 验证集 = 2024年7月-9月卡口数据
指标 NMSE(宏观.平均流量) < 0.1
指标 预测区间覆盖率(宏观.拥堵时长) ∈ [0.85, 0.95]
指标 模式匹配率(拥堵空间分布) > 0.7
未通过则 标记模型为"未确认",禁止用于决策推演
2.4 L4 不确定性量化(UQ)
回答:推演结果的可信度有多高?
元序的不确定性来源:
| 来源 | 说明 | 量化方式 |
|---|---|---|
| 参数不确定性 | 校准后的参数后验分布 | ensemble运行(采样参数后验) |
| 初始条件不确定性 | 初始状态的测量误差 | 初始状态分布采样 |
| 模型结构不确定性 | 规则选择/省略的不确定性 | 多模型对比、模型平均 |
| 数值不确定性 | Tick步长、平滑过渡的离散误差 | Δmax收敛性分析 |
| 外部输入不确定性 | 天气、事件等外生变量 | 外生输入场景集 |
语言级支持:State 置信区间
// State 字段支持声明不确定性
State 环境 [
温度:摄氏度 = 0.3 ± 0.05, // 均值±标准差
目标温度:摄氏度 = 0.7 (确定) // 确定性参数
]
// 推演结果自动携带不确定性标注
// 输出: 环境.温度 = 0.68 [0.62, 0.74] (95% CI)
Ensemble 运行:
// Ensemble 声明:自动运行N次,每次采样不确定性源
Ensemble 交通推演:
次数 = 500
采样 参数后验(校准结果.json)
采样 初始状态分布
输出 均值轨迹 + 5%/95%分位轨迹 + 极端事件概率
敏感性分析:
// 全局敏感性分析:哪些参数对结果影响最大
Sensitivity 交通模型:
目标 宏观.平均流量
参数 [路段.通行能力, 信号.周期长度, 天气.降雨强度]
方法 Sobol (一阶+总效应)
输出 tornado图 + 参数重要性排序
三、推演结果的可信度标注规范
元序强制要求所有推演输出携带可信度标注,禁止输出裸数字。
3.1 输出格式
推演结果:城市交通晚高峰
─────────────────────────────────────
宏观.平均车速 = 28.5 km/h [25.1, 31.8] (95% CI)
宏观.拥堵时长 = 4.2 h [3.5, 5.1] (95% CI)
极端拥堵概率 = 12% [8%, 18%]
─────────────────────────────────────
模型确认状态:已确认 (out-of-sample NMSE=0.08)
校准数据:2024年1-6月卡口数据
验证数据:2024年7-9月卡口数据
Ensemble次数:500
不确定性来源:参数(60%) + 初始条件(25%) + 外生输入(15%)
3.2 可信度等级
| 等级 | 条件 | 可用于 |
|---|---|---|
| A 级 | 已out-of-sample确认 + ensemble + 敏感性分析 | 高风险决策(政策、灾害) |
| B 级 | 已in-sample校准 + ensemble | 中风险决策(调度、规划) |
| C 级 | 仅in-sample校准,无ensemble | 低风险探索、概念验证 |
| D 级 | 未校准,纯理论推演 | 仅限教学/演示,禁止决策 |
未达到对应等级的推演结果,元序运行时自动在输出中标注警告。
四、与外部工具的协同
元序不重复造轮子,VVUQ 的重计算部分与成熟工具协同:
参数校准 → Stan / PyMC (贝叶斯后验推断)
敏感性分析 → SALib / Python (Sobol、Morris)
数据接入 → Python Pandas (真实数据清洗)
可视化 → Python Matplotlib / ECharts (结果呈现)
模型运行 → 元序 WorldScript (因果推演)
元序的角色是推演引擎+可信度标注层,校准和推断交给专业统计工具。
五、实现路线图
| 阶段 | VVUQ 能力 | 对应里程碑 |
|---|---|---|
| M1 | L1实现验证(单元测试+确定性验证) | ✅ 已完成(6项核心测试) |
| M2 | State置信区间语法 + ensemble运行 | 进行中 |
| M3 | 参数校准声明(ABC+矩匹配)+ 敏感性分析 | 规划中 |
| M4 | out-of-sample确认框架 + 可信度等级标注 | 规划中 |
| M5 | 与Stan/PyMC集成 + 自动校准流水线 | 规划中 |
六、城市交通验证案例(目标)
作为元序的第一个完整 VVUQ 验证案例,城市交通模型需完成:
- L1:解释器全部测试通过,调度器确定性验证
- L2:用卡口数据校准路段通行能力、信号周期等参数(ABC方法,后验分布)
- L3:用未参与校准的数据做 out-of-sample 检验,NMSE<0.1
- L4:500次ensemble运行,输出置信区间,Sobol敏感性分析识别关键参数
产出:《18城市交通验证案例》,包含校准报告、确认报告、不确定性分析、与Python手写版本的对比。
七、元序 VVUQ 的差异化机会
对比 Modelica(工业级验证但无社会系统)、GAMA(有校准但无原生不确定性)、Vensim(有敏感性但无贝叶斯后验),元序的差异化在于:
- 不确定性是一等公民:State 原生支持置信区间,推演结果强制带标注
- 偏差流与确认联动:模型偏差不仅是技术指标,更是元序运行时的一等对象
- 中文声明式校准语法:领域专家可直接读写校准/确认声明,无需写Python脚本
- 可信度等级强制:未确认的模型自动降级,防止「漂亮数字」误导决策
这是元序相对同类工具的真正差异化——不是把容错当卖点,而是把可信度当基础设施。
文档版本: WorldScript VVUQ Framework v1.0
创建日期: 2026-09-03
关联文档: 《04元序规则》《05运行时架构》《09对比手册》《08实现路线图》
参考标准: ASME VVUQ Standards, ABM Empirical Validation Methodology

浙公网安备 33010602011771号