七月二十日,原既白拖着行李到省城时,江遥已经提前三天住进学校。两个人的直线距离其实不到九公里,一个在省城大学的暑期研习组,一个在高中竞赛楼里做封闭训练,地图上把两个点放大以后,甚至会让人产生“随时都能见”的错觉。真正到了那里才发现,九公里不是距离,时间才是。原既白每天早上七点半集合,晚上九点以后还经常有小组讨论;江遥的训练从八点开始,理论、实验、讲评和限时测试排到晚上,杜老师嘴里的“今天早点结束”通常也只是从九点半变成九点。两个人第一晚还互相发了宿舍窗外的照片,第二天只说了三句话,第三天原既白十一点才看到江遥下午发来的“今天实验终于没垫底”,江遥醒来时,他那边已经睡了。
研习组比原既白预想的小,二十四个人,来自十几所高中。没有开幕式,也没有领导讲话,第一天上午老师把所有人分成六组,每组发一台电脑和一份看起来极其普通的数据:一栋五层教学楼,每层四个区域,夏季下午温度经常超过三十度,现在只有有限的制冷能力,要求他们设计一套运行策略,在总耗电不增加的情况下让楼里“尽可能舒服”。题目甚至没有规定用什么技术,既可以写程序,也可以只做规则。林沛恰好和原既白分到一组,两个人去年那次排课活动已经认识,见面第一句话就是“这次先去问人还是先建模”,原既白笑了一下,说至少先把题看完。另一名组员唐岑也在,她对两个人的旧账没兴趣,已经把楼层数据摊开,先问了一句:“舒服是什么意思?”
没人立即回答。
题目里给了每个区域的温度、人数、日照和空调功率,最自然的目标当然是让平均温度尽可能低。原既白很快把问题抽成一个资源分配模型:总制冷能力固定,哪里人多、哪里热得快,就多分一点;如果再考虑第二天下午的气温预测,还可以提前调节。林沛这次没有反对,唐岑也补充了不同楼层的热负荷。三个小时以后,他们的第一版程序已经可以跑,屏幕上的平均温度从原来的二十九点多降到二十七点出头,耗电没有增加。几个人都觉得方向基本成立,下午第一次展示时,原既白甚至认为这可能是六组里完成度最高的一版。
负责带组的老师姓罗,四十岁上下,看完结果没有评价,只让他们把二十个区域的温度分别显示出来。原先那个很好看的“二十七点一度”一下被拆开:靠北一层的两个教室只有二十三度多,而西晒的五楼最热区域仍接近三十二度。原既白第一反应是把不同区域的权重调一下,人多的地方优先;罗老师却问:“如果平均温度做到二十六度,但有一间教室三十五度,你们算成功吗?”唐岑说当然不算。老师又问为什么,既然你们写给程序的目标从头到尾只有“平均温度最低”。
教室里安静了一阵。这个问题没有复杂公式,甚至简单得有点像故意刁难,可原既白盯着屏幕上那几个数字,反而很久没有动。程序并没有做错任何事。它把有限的冷气更多分给最容易降低整体平均值的区域,因此有些本来就比较凉的地方变得更凉,而那些降一度需要付出很大代价的西晒教室反而被放弃了一部分。从它的目标看,这甚至非常聪明。真正的问题在于,人说的是“让大家尽可能舒服”,写进去的却是“让平均值尽可能低”。两句话在人脑子里似乎差不多,交给一个只认目标的系统以后,却会走向完全不同的结果。
林沛最先把椅子往后挪了一点,说那就把最热区域也限制住,比如任何教室不能超过三十度。唐岑又问,如果为了让最后一间从三十点一降到二十九点九,需要牺牲其他十间教室两度怎么办。三个人很快发现,所谓“舒服”并不是一个藏在数据里等待他们发现的数字,而是一组价值判断:平均体验重要,最差的人也重要;节电重要,但极端高温不能接受;二十个人都稍微难受,和十九个人舒服、一个人特别难受,并不能只靠平均数决定谁更好。罗老师没有告诉他们标准答案,只在白板上写了一句极普通的话:**系统不会替你理解“本来想要什么”,它只会尽力完成“你真正写了什么”。**
原既白当天晚上一直在想这句话,却没有把它抄进自己的笔记。他见过很多“模型不够准”的问题,也见过传感器本身可能漂移,眼下这件事却不一样:数据可以全对,程序可以完美执行,结果仍可能令人无法接受,因为错误发生在最前面——人根本没把自己的意图说清楚。更麻烦的是,有时人自己也不知道真正想要什么。你只有看到五楼那间三十二度的教室以后,才会突然意识到“平均二十七度”并不是你在乎的全部。很多目标不是先写好再交给系统,而是在结果伤到某个人以后,人才第一次发现自己漏掉了什么。
江遥那边完全没有时间听他讲这些。她的暑期训练从第一天就进入高强度,七名重点组学生和高三留下来的几个人一起上课,每三天一次理论限时,每周两次实验。去年省队第十三以后,她最害怕的实验正在一点点从弱项变成稳定项,但这种“稳定”不是突然开窍,而是靠大量重复换来的。第一周第四天,她从下午两点一直做到六点,只为了把同一组测量结果的波动压下来。别人吃饭时她还留在实验室,陆徊经过门口,看她弯着腰重新调一只已经调过很多遍的装置,问是不是数据还不行。江遥说数据已经行了,她只是想知道为什么第三组总比前两组偏一点。陆徊看了几眼,说也许只是随机误差。江遥没有反驳,只又做了一遍。最后真的没有发现什么特别原因,那点偏差在后续重复里消失了。
过去的她会觉得这种下午有点失败——六个小时,没有新方法,没有漂亮结论,最后甚至只是证明“可能什么都没有”。现在她却慢慢能够接受,世界不保证每一处异常背后都有值得命名的规律。有时一根线只是没夹紧,有时手碰了一下桌面,有时真的是随机波动。聪明并不意味着每次都从噪声里看见意义;很多时候,更难的是忍住不给噪声编故事。
第一周结束时,江遥综合排名第三,陆徊第二,第一名是隔壁省来交流的高三生顾行舟。顾行舟并没有什么惊人的外在特征,甚至讲话有点慢,却几乎从不在常规环节失手。江遥第一次和他同桌做实验时,自己提前看出了数据之间一个可以简化处理的关系,顾行舟听懂以后只说“可以”,接着仍按原方案把基础数据完整测完。江遥一开始觉得他太慢,半小时以后却发现,对方并不是没看见捷径,只是想先确认捷径有没有必要。训练结束后她在电话里跟原既白说,这个人有一点烦,“你以为他慢,结果他只是没打算跟你一起急。”原既白听完说那可能确实很烦,江遥问他是不是感受到竞争压力,他说自己又不参加物竞,江遥回了一句“那你烦什么”,原既白只好承认自己也不知道。
两个人真正第一次见面,已经是同城第七天。
那天下午省城突然停电了一小片区域。江遥学校的实验楼备用电源只保留必要设备,晚上的实验训练临时取消,杜老师把人提前一个半小时放走。江遥从楼里出来时天还亮着,站在台阶上看了一会儿手机,没有先回宿舍,而是给原既白发:“你在哪?”
原既白当时正在研习组讨论第二版目标。他们已经不再追求一个简单平均数,而是尝试让每个区域都不超过某个可接受范围,再在剩余能力里降低整体不适。讨论到一半,他看到消息,回了教学楼名字。江遥查地图,说自己坐公交过去四十分钟。原既白看了一眼墙上的时间,又看一眼正在白板前争论的林沛,最后只回:“你过来我可能还没结束。”
江遥发:“那算了。”
原既白盯着这三个字两秒。
随后站起来跟组里说自己出去四十分钟。
林沛问:“你不是说模型还没——”
“回来再做。”
唐岑抬头看了他一眼,忽然笑了:“重要约束?”
原既白没有回答,拿着手机就走。
他们最后没有谁去找谁,而是在两边中间的一家便利店碰头。原既白骑共享单车过去,江遥坐了三站公交,真正见到时距离她必须返校只剩四十七分钟。便利店里没有座位,两个人买了饭团、酸奶和一盒关东煮,坐到旁边写字楼已经关门的台阶上。夏夜仍然很热,台阶白天晒了一整天,坐下去还有一点余温。江遥看见他第一句话不是“想你”,而是:“你怎么瘦了?”原既白说大学食堂难吃,她立刻问哪个大学,他纠正说是这边大学食堂。江遥把自己那盒关东煮往他面前推了一点,说那多吃两块萝卜。原既白看着里面几乎全是她不爱吃剩下的东西,说这不是照顾,是清库存。
四十七分钟根本不够讲一个星期。他们只能各自挑最想讲的东西。江遥讲顾行舟,讲自己做了六小时最后发现“什么规律也没有”;原既白讲那栋被他们降到平均二十七度、五楼却还三十二度的教学楼。江遥一开始以为只是程序写坏了,听明白以后拿吸管在酸奶盖上敲了两下,说:“所以它其实完成得很好。”原既白说对。她想了一会儿,又问:“那如果人自己都说不清楚想要什么呢?”
“就更麻烦。”
“那是不是只能先做错?”
原既白没有立即回答。
便利店门口有人推着小车补货,塑料轮子在地面上滚出一阵连续的响声。过了一会儿,他说:“可能先得允许别人告诉你哪里疼。”
江遥看了他一眼。
“这个像人话。”
“我平时说的不是?”
“有时候像说明书。”
原既白把她面前那瓶没开的酸奶拿走。
“那你别喝。”
江遥伸手来抢,两个人在台阶上折腾了几下,差点把关东煮碰翻。她最后没抢回来,干脆靠在他肩膀上喘气,说你现在越来越幼稚。原既白没动,让她靠着。两个人安静了不到一分钟,江遥又坐直,因为忽然想起自己回学校还要过检查,晚了真会被记名。
分别前,他们在公交站旁边牵了一会儿手。没有接吻,附近人太多,江遥也一直看时间。车快到时,她问原既白周日能不能见,原既白说小组可能全天加班。她“哦”了一声,没有失望得很明显,只说那就下次。原既白反过来问她周日不是也可能加测吗,江遥说“所以本来也不一定”。
公交车进站,她上车。
原既白回去以后已经晚了二十多分钟。林沛和唐岑还在教室,白板上的方案已经改过一版。唐岑看见他进来,只问:“重要约束解决了?”
原既白把桌上自己的酸奶拧开,喝了一口。
味道不对。
他低头看标签,才发现刚才慌乱中拿错了,那瓶是江遥买的草莓味,自己原来拿的是原味。
手机正好震了一下。
江遥发来一句:
“你把我酸奶拿走了。”
原既白看着手里已经喝了一半的瓶子,回:
“现在才发现?”
几秒以后,对面:
“赔。”
原既白拍了一张空掉一半的瓶子发过去。
“没了。”
江遥回了一个很大的猫猫怒脸。
林沛从白板前回头看他:“还能干活吗?”
原既白把手机扣过去。
“能。”
唐岑顺手把一支笔扔给他。
“那先解决五楼。”