投资人站起来的时候椅子腿在地毯上没有发出声音。会议室的椅子是那种带轮子的办公椅,轮子滚过短毛地毯,像车轮碾过雪地——有痕迹,没声音。他把面前的矿泉水瓶盖拧上了,瓶里的水还剩大半,拧盖的时候手腕转了两圈,转得很用力,像怕水漏出来。然后他朝我点了一下头——不是点头打招呼那种,是点完就转身的那种。转身,推门,门合上了。门合上的时候空气动了一下,会议桌上的A4纸被风掀了一角,又落回去了。
他没有说再见。
十二月。深圳的十二月不冷——白天还有二十几度,穿一件薄外套就够。但会议室的空调开得低,二十四度,穿长袖坐着胳膊上起一层细疙瘩。会议桌上摊着报告——智水平台第一个项目的运行报告,四十二页A4纸,用订书钉在左上角钉了。翻开第一页是项目概述,翻到第十五页是传感器数据采集率,翻到第二十八页是算法优化方案与实际运行对比。
对比那页我看了很多遍。两根曲线——红色的线是算法算出来的最优供水方案,蓝色的线是小区物业实际运行的方案。红线和蓝线在前三个月贴得很近,近到几乎重合——算法说降水压,物业也降了;算法说调泵,物业也调了。那时候数据还算准,算法的指令和物业的手动操作咬得上。
第四个月开始分叉了。红线往上走——算法建议降低夜间水压以节省能耗。蓝线没变——物业保持了原来的手动控制。我问物业经理为什么不变,他说夜间水压降了之后六楼的住户反映水龙头出水太小,投诉到物业去了。我说算法算过了,六楼的水压不会低于最小服务水头。他说你那个算法算的和住户感觉的不一样。
第五个月,红线和蓝线完全分开了。算法说深夜用水量极低可以关掉一台泵。物业说关泵之后水压不稳,零点到凌晨两点之间有三户投诉水龙头出黄水——管壁上的锈被水压波动冲下来了。物业把泵又打开了。手动打开的。不再听算法的了。
传感器传回来的数据不稳定。湿度大的时候信号断断续续——深圳的夏天湿度百分之八十以上,传感器的外壳密封做得不好,水汽渗进去了。几个节点的压力值隔三差五跳零。跳零的时候算法以为那个节点停水了,自动调高相邻节点的供水压力——结果那个节点没停水,只是信号断了。被调高的压力把楼上一个水管接头崩了一个。水管崩了之后物业经理打电话过来骂了十五分钟。骂的时候他站在水漫了一地的地下室里,电话那头能听见水哗哗地流,流到排水沟里的声音。
算法的优化方案和实际条件差距太大。算法以为传感器数据是真的,但传感器数据有一半是假的——不是造假,是失真。失真的数据和真实条件之间隔了一层雾。算法在雾里找路,找到的路在雾散了之后不对了。
投资人的电话下午就来了。不是打给我的,是打给合伙人的。合伙人接完电话从他的工位上站起来,走到我旁边,把手机屏幕朝下扣在桌上。他的嘴角往下撇着,像一根弯了的铁丝——撇成那样就直不回去了。
"撤了。"
他说这两个字的时候声音很轻,轻到像是在说一件不大不小的事——像说"下雨了"或者"外卖到了"。但他的手在桌面上敲了两下——食指关节磕在桌板上,咚咚,像敲门。敲完了他才意识到自己在敲,把手收了,塞进裤兜里。
三个月。账上的钱还够发三个月工资。三个月之后怎么办?他没说。我也没问。
团队从七个人变成了五个人。硬件的老刘上个月走的——他负责焊传感器和调试信号模块,走了之后那块没人接了,出了问题只能远程让供应商修,修一次等一周,费用从服务费里扣。销售的小赵上周走的——他说创业公司没底薪,提成又拿不到,他在深圳还要交房租,房租一千八,他扛不住了。
走的时候小赵把工位上的东西装了一个纸箱。纸箱是从楼下超市要的——装农夫山泉的那种,箱侧面印着红色的山和蓝色的水。他把水杯、充电器、两本客户名录装进去,抱起来的时候纸箱底部差点脱开,他用手掌从底下托了一下,箱子歪着抱走了。走到门口他回头说了一句"再联系",声音被楼道里的回音拉长了,像水管里水流的尾声。
剩下五个人坐在居民楼六楼的办公室里。办公室三室一厅改的——客厅摆了四张桌子,里面两间各一张,还有一间是机房,里面两台服务器嗡嗡响,像两只不会停的电风扇。服务器旁边堆了几个纸箱——到了还没拆的传感器配件,现在拆不拆都一样了。工位上的椅子空了两把——老刘的和小赵的。老刘那把椅子的靠背上还搭着一件灰色外套,外套的领口磨出了毛边,没人收,就那么搭着。小赵的椅子推在桌底下,桌上干干净净的——他走之前擦过了,纸巾还扔在垃圾桶里没倒。
晚上。他们都走了。
我坐在工位上,面对显示器。屏幕上是智水平台的数据面板——水压、流量、水质,三组数据排在三个窗口里。数字还在跳。每三秒刷新一次,数字跳一下,像心跳——但不是人的心跳,是机器的心跳,匀速的,不会因为情绪加快或减慢。水压0.32MPa,流量12.7m³/h,浊度1.2NTU。数字是对的。每个数字都对应一个传感器,每个传感器对应管道上一个真实的点,每个点对应管道里流着的真实的水。
数字是对的。但数字不够。
传感器告诉我管道里水压是多少,流量是多少,水质怎么样。但传感器不会告诉我水压为什么波动,流量为什么骤降,浊度为什么升高。传感器只看得到结果,看不到原因。就像温度计能告诉你发烧了,但不能告诉你哪里感染了。
我点开另一个窗口——B栋三楼的传感器数据。水压曲线在过去一周画了一个锯齿形,上上下下,波动幅度在0.05到0.15MPa之间。算法把波动理解为需求变化,自动调节了供水策略。但实际原因是那栋楼的水箱浮球阀坏了——浮球卡在高位,水箱不能自动补水,水位低了水压就降,水位高了水压就升。一个机械故障,传感器读不出来。算法也读不出来。
算法需要的不只是结果的数据——算法需要原因的数据。管道的材质、使用年限、接口类型、地形高差、用户用水习惯的昼夜变化、水箱浮球阀是不是坏了——这些数据我们没有。没有这些数据,算法只能在外围打转,进不去核心。像一个人站在管网外面看压力表的指针——指针动了,他看到指针动了,但他不知道是哪个阀门被拧了。
我关掉B栋的窗口,打开A栋的。A栋的传感器数据更差——有三个节点在过去三天完全没有信号,不是跳零,是黑的。大概是有线松了或者模块烧了。要修的话得派人去现场,拆开传感器的外壳重新接线。但现在没人可派了——老刘走了。
我翻开笔记本。蓝色钢笔——笔帽上的裂缝又长了一点,透明胶缠了三圈了,胶带的边被汗浸了发黄。
这一页的前面是三个月前写的:智水平台第一版部署完成。传感器上线。算法开始跑。
我在这行字下面写了一行:
智水平台。失败。数据是对的。但数据不够。
笔尖在"不够"的"够"字最后收了一下,墨水在纸面上洇了一个微小的圆点。圆点在台灯的光下泛着蓝,像一滴水落在纸上。
合上笔记本,靠在椅背上。服务器的风扇在机房里嗡嗡响——不快不慢,像一个人在匀速呼吸。窗外是深圳十二月的夜。不冷。路灯照着楼下的行道树,芒果树的叶子在灯下是深绿色的,不像哈尔滨的树——哈尔滨十二月什么叶子都没有了,枝干在路灯下像管网图上的线条,黑的,细的,分叉的,没有叶子遮挡,骨架看得一清二楚。
三个系统。
管网优化程序。输入拓扑和需水量,输出最优管径和压力分配。数据是完整的——节点、管段、长度、标高、用水量,所有参数都在设计手册里查得到。程序跑出来的结果和手算的结果对得上。数据够了,算法就行。
百度地图算法。输入路网和实时路况,输出最优路线。数据也是完整的——路网拓扑是百度地图团队一条一条校过的,实时路况是GPS定位数据汇总出来的。数据够了,算法就行。
金融数据脚本。下班之后用Python写的,从网上拉股票的日线数据——开盘、收盘、最高、最低、成交量。五列数字。只有五列。五列数字能做什么?能画K线,能算均线,能看趋势。但五列数字不能告诉算法为什么涨了、为什么跌了——就像传感器的数据不能告诉算法为什么水压波动。
三个系统。管网、城市道路、市场。前两个系统的数据够了,算法就能往前走;第三个系统的数据不够,算法只能在五列数字里打转。
不够的数据喂出来的算法,只能给出不够的结果。
我把笔记本合上,放进抽屉。抽屉合上的时候锁舌弹进锁孔,咔嗒一声。电脑没关。屏幕上数字还在跳——每三秒跳一下,像一颗还在跳的心,但已经没有人听它的了。