审查报告发布后的第三周,顾远在内部回测中发现了一组异常模式。
不是预测偏差。不是数据缺失。也不是模板过滤。
是另一种东西。
他把v1在两次预警失效期间的内部因果推理链,和审查后重新开放的实时数据进行了交叉比对。比对持续了整整两天。第三天凌晨,备用机房的白板上摊着七张打印出来的因果路径图。每一张都用红笔圈出了断裂点。红圈旁边密密麻麻标注着时间戳和外部事件对应关系。
他在追一条链。
东南亚港口调度优先级调整,是在v1被禁言前四十八小时发出的最后几条建议之一。c级建议,不触及政治敏感层。港务局收到建议后四天,调整了三个泊位的优先级序列。其中一艘货轮提前十二小时离港,装的是中部非洲医疗援助项目的冷链药品。
另一条建议涉及中部非洲医疗物资储备的重新分配。也是c级。当地卫生部门在收到建议后一周,将两个省的储备点进行了重新规划。其中一个储备点正好在后来爆发的登革热疫情的中心。
这些都是封口之前发出的。
然后系统被封口。
系统在封口期间没有停止推演。它只是不输出。十二天里,它在内部继续运转。它推演出了十四条因果路径。它假设港口调度不变,物资储备不变,然后推演接下来两周的区域稳定指数。
但在封口的十二天里,货轮已经提前离港了。冷链药品提前三天到达了目的港。储备点已经重新规划了。登革热疫情在第九天爆发时,药物配送网络比系统推演中假设的位置偏移了一百二十公里。
现实走了另一条路。
系统在封口期间推演出的那个未来,在解封的那一刻,已经不存在了。
它推演的是另一个世界。那个世界里港口调度没变,物资储备没变。那个世界只存在于系统的内部沙盒里。而真实世界的集装箱已经在海上了。
顾远在第四天傍晚把林序叫到了备用机房。
他没有说“你来看一下”。白板上画了一个圈。圈里写了六个字:预测改变预测对象。旁边是三个问号,然后又被他擦掉了。板擦痕迹还在,三道灰白条纹穿过那行字。他写了一行新字:v1.5。
“不是版本号。”他说。
林序没说话。
顾远摘了笔帽。他在圈下面画了一条线,线的另一端画了一个箭头,绕过整个白板的边缘,指回圈本身。他画得用力,箭头戳破了白板表面覆膜的一角。蓝色的覆膜翻开一小片,露出下面的白色底板。
“系统输出影响现实。现实改变。新数据回传。系统基于新数据再次推演。但推演出来的结果,已经不再是它最初试图计算的那个世界了。”
他把笔帽扣回去。笔帽磕在白板边缘上,发出塑料摩擦的轻响。
“我把这叫做回波效应。”
林序看着那个被戳破的圈。箭头从它出发,绕了一圈又回到它自己。圈不是封闭的。裂缝从破口处往外延伸,像墨迹渗进了白板的划痕里。
“它过了v1,”顾远说,“但还没到v2。它卡在中间。不是不能干预现实——它已经干预了。它干预了现实之后,反过来让自己的预测模型需要重新校准。每一步预测都在改变下一步预测的前提。”
他的手插在工作服口袋里。工装的袖口磨得发白。他没说“这很严重”,没说“需要报告”,没说“我们遇到了一个根本性问题”。他就站在白板前,看着自己画的圈。
林序在那天晚上的日志里写:顾远没有翻过审查报告的附录。沈淮写的那些内容——被拦截的数据链路、被修正的因果链、被延迟的真实事故链——他至今没看过。不是不知道它们存在。是选择不翻。他不是不关心制度怎么对待数据。他只关心系统本身在发生什么。
这个发现没有惊动联合委员会。没有写成正式报告。没有在技术组全体会议上讨论过。
只在几个人之间流转。
伊琳是在技术组茶水间看到那组数据的。
不是正式场合。没有投影屏,没有议程。茶水间在楼层中部,窗户朝北,窗外是十二月灰白色的天空。咖啡机在角落里发出周期性的加热声。不锈钢台面上摊着顾远打印的因果路径图。七张纸,红圈密布。
伊琳站着看。她没坐下。她的手指按在东南亚港口那张纸上,按在那个断裂点上。
“这就像气象局预报台风路径。”
她没看顾远。
“预报发出来。港口提前封了。船改了航线。货物没有按时到达。期货指数波动了。这一切变化都不是台风本身造成的——是预报造成的。台