设计院的电话响了。不是一部,是四部——前台两部、老方桌上那部、院长办公室那部。四部电话同时响的时候,办公室里所有人把头抬起来了——像地底下有震动,所有蛰伏的东西同时抬头。
零九年二月。电话从早上九点开始响,一直响到中午。甲方、施工方、监理方、开发商——所有人都在打电话。去年一整年办公室安静得像坟墓,手机不响、座机不响、传真机也不响,只有日光灯嗡嗡响。现在四部电话同时炸了——那种声音不是铃声,是噪声,是铁锤砸在铁板上弹出来的噪声,一下一下把安静敲碎了。
老方接了电话,听了两秒,把铅笔从耳朵上拿下来——这个动作意味着他要记东西了。他翻开桌角那本已经落了半年灰的项目登记簿,在空白页写下三个字:新项目。
"多少栋?"
听筒里的声音听不清——只能听到老方这头的回答。
"十八栋。给排水全做?行。三月开工?行。图纸三月出完?——行。"
他说了三个行。每个行之间停了一秒——不是犹豫,是在算时间。三月开工,三月出完图纸,一个月出十八栋楼的给排水施工图。以前一个月出两栋。现在九倍。他放下电话,看了我一眼。
"干活了。"
电视上在播新闻。四万亿。中央政府出台四万亿经济刺激计划——基础设施、铁路公路、保障性住房、农村建设。新闻里的数字很大,大到听起来不像钱,更像天气。可到了设计院,它很快变成电话、项目登记簿、甲方的催图时间和墙角越摞越高的蓝图。
设计院的项目从三个变成十二个。老方的登记簿上三个月写了十二个项目名——松北新城、阳光水岸、翠湖花园、金地华府——名字一个比一个响亮,图纸一个比一个急。甲方催图的电话每天打,早上催一遍、下午催一遍、下班前再催一遍。老方把铅笔夹回耳朵上,拿起听筒说了第三遍:"月底出。月底一定出。"
办公室的打印机从早印到晚。蓝图从打印机里吐出来——嘶——纸被热敏头烫过的味道,焦焦的,和工地焊工焊钢管的味道差不多。图纸一张一张摞起来,每摞三十张,卷成筒,用橡皮筋扎住,搁在墙角。墙角的图纸摞到了齐腰高——以前半年才摞这么高,现在一个月。
加班。每天加到晚上十点。九张桌子,九个人,九台电脑。CAD的蓝线条在屏幕上从早画到晚——干管、支管、立管、消防管、排水管、雨水管。鼠标咔咔响,比以前响得快——以前一天画一张图,现在一天画三张。计算器按得比以前快——Q=0.5×π×(D/2)²×v,按完一组按下一组,勾、翻页、按、勾、翻页。手指头在计算器按键上跳舞——不,不是跳舞,是赶路。赶路和跳舞的区别是:赶路不看风景。
三月。我在画第七个项目——翠湖花园,八栋高层住宅。DN250给水干管从市政接驳点J-1出发,分出两条DN200支管,支管再分出DN150立管进各栋楼。节点、管段、管径、坡度、水压——和以前画的一模一样。每个项目都是同一套东西换一组数据。数据变了,公式没变。公式是骨架,数据是肉——换一块肉,骨架还在。
画到J-7节点的时候停了。
J-7到J-8,管径选什么?DN150够了,DN200保险。计算器按了一下:Q=0.5×π×(0.15/2)²×1.2=0.0212立方米每秒。流量够了。水压按一下:H=H0-Σhf=28-6.7=21.3米。够了。够了就行。
但我不需要按计算器。我的程序能算。遗传算法——选择、交叉、变异——两千代收敛,四十分钟出一个最优管径组合。比手算快,比手算准。去年跑过的那套程序,GA_pipe_v2.0.c,现在躺在实验室的电脑硬盘里,上一次运行还是去年十一月。
我把鼠标从CAD窗口切出来,打开了一个文本编辑器。写了几行代码——把翠湖花园的管网拓扑输进去,节点坐标、管段长度、需水量。然后调出了遗传算法的源码。复制、粘贴、改参数——种群规模一百、交叉率0.8、变异率0.05、最大迭代两千代。运行。
三十七分钟之后出结果。J-7到J-8,最优管径DN150。和我手算的一样。但程序还给出了整条管路的最优管径组合——J-1到J-12,十二段管,总造价比手算方案低了百分之六。百分之六。一千两百万的项目省了七十二万。
我把程序算出来的结果填进了CAD图。鼠标点、点、点。管径从DN200改成DN150的管段有四条——手算的时候选了保险值,程序选了精确值。精确就够了。保险是浪费。
老方走过来,站在我背后。他看到了我屏幕上同时开着的CAD窗口和代码窗口。
"你用什么算的?"
"程序。遗传算法。"
他看了一眼代码窗口——黑底白字,他看不懂。他看了一眼CAD窗口——管网图,他看得懂。
"算得对吗?"
"对。比手算省百分之六。"
"省多少?"
"七十二万。"
他没说话。把铅笔从耳朵上拿下来,在图纸的空白处写了一个数字:72万。写完看了两秒,又把铅笔夹回耳朵上。
"你小子想太多了。先把图画完。"
他走了。铅笔在他耳朵上面晃了两晃——走路的时候铅笔会晃,但他走得很稳,铅笔晃的幅度很小。
先把图画完。他说得对。图得先画完——甲方催着要,月底出图。程序算出来的管径组合是更优的,但更优不等于能直接用。设计院出图要签字、盖章、报审——程序没有签字权,代码不能盖章。代码的结果还需要人把它画到图纸上,签上名字,才算数。
钱到了。
新闻里的数字很大,大到不像钱,像一个挂在屏幕上的口号。到了设计院,它很快变成电话、项目登记簿、甲方的催图时间和墙角越摞越高的蓝图。开发商拿到了贷款,施工方等到了工程款,设计院收到了设计费,材料商开始催管材订单,管工重新回到工地。每一个环节都有人签字、盖章、打电话,也都有人等着结算。
工地复工了。去年冬天停工的那四个项目——塔吊又转起来了,脚手架又搭起来了,搅拌机又响了。钢筋不再从混凝土里戳着像肋骨了——第六层的楼板浇上了,钢筋被混凝土包住了,看不到骨茬了。
设计院忙得像发大水的河。九个人加班到十点,然后十一点,然后十二点。老孟的婚纱照旁边贴了一张便利贴——"本周出图48张"。老方的铅笔换了三支——不是用完了,是笔芯断了,按得太用力。
我白天画图,晚上写代码。画完的图纸用程序跑一遍,看手算和程序差多少。大部分差在百分之三到百分之七之间——手算偏保守,程序偏精确。精确值能省下来的钱不多,但项目多了就多了——十二个项目,每个省百分之五,就是几百万。
程序在跑。图在画。项目也在往前推。白天的图纸要赶出图章,晚上的代码要赶出结果,我第一次真切地感觉到,算法不只是在实验室里好看,它可能会改变一张图的成本,也可能改变一个项目里几个人的判断。
六月。硕士毕业。
答辩完了。钱老师坐在评审席上,厚眼镜反着日光灯的光,看不清他的眼神。他问了我一个问题:"你的遗传算法和传统优化方法比,优势在哪?"我说:"不需要初始解。全局搜索。不容易陷入局部最优。"他点了点头。没再问。
毕业典礼在六月二十号。校门口的横幅写着"哈尔滨工业大学2009届毕业典礼"。天气热了——六月的哈尔滨,白天二十七八度,白杨树的叶子密得像一把把绿伞。阳光晒在水泥路上,路面的反光刺眼。
我站在设计院门口。没有进去——站在大门外面的人行道上,仰头看那栋灰色的五层楼。三楼最左边那个窗户——给排水组的办公室,九张桌子,日光灯嗡嗡响。我在那个位子上坐了将近两年,画了不知道多少张管网图。
设计院给了offer。正式入职,给排水工程师,月薪三千五。在哈尔滨不算低——比王强修车赚得多,比陈默做模具也多。稳定——甲方不会跑,项目不会断,至少四万亿的这几年不会断。
但我站在门口没有进去。手里攥着那张offer——A4纸,打印的,左上角印着设计院的红章。纸被手汗洇湿了一角。
没有激动。没有后悔。只有一种空——像站在一个空管子的一头,往另一头看,看到的是黑的。管子很长,能看到尽头,但尽头什么也没有。三年的研究生、两年的设计院实习、无数张管网图——这些是管子。管子铺好了,方向也定了。但方向那头是空的。
王强在修车。陈默在做模具。赵启明在做基金。三个人在三个地方做三件事——修车、造模具、管钱。他们手里握着的东西是实在的——扳手、齿轮、K线。我手里握着的是什么?一张管网图和一段代码。管网图变成铸铁管埋在地下,代码变成数字存在硬盘里。铸铁管是实在的,数字也是实在的——但我不觉得实在。
我把offer折了两折,放进口袋。转身走。设计院的楼在背后,灰色,五层,窗台上落了一层灰——去年项目停的时候没人擦窗户,今年忙起来了还是没人擦。
走到校门口。六月的风吹过来是暖的——和九月那天站在这里的感觉完全不同。那时候刚来设计院实习,手里攥着图纸卷,觉得线条会变成钢管,钢管会送水,水会让人活。现在线条变成了钢管,钢管送了水,人活了——但我不觉得这里面有我。
流动——我找的不是管子。管子只是管子。我要找的是水为什么流动,流动的方向是谁定的,方向定了之后能不能换。程序能找最优管径——但程序找的是给定了方向之后的最优。方向本身呢?方向是谁定的?
口袋里的offer硌着大腿。走了一百步。两百步。三百步。校园里的白杨树叶子哗哗响——和九年前刚来哈尔滨的时候一样响。叶子还是那些叶子——不是同一片,但声音一样。