不是刻意的客气,而是一种本能反应。
就好象一场手术台上争论不休的实习医生,看到主刀大夫推门进来,身体自动往两边撤。
尽管他们很清楚,陆丰是机械专业的。
但就是莫明其妙的对他就是信任,是因为之前陆丰对数学的绝对理解吗,貌似不是,就是对他这个人信任。
陆丰弯腰看了一眼屏幕。
红色的报错信息刷了满屏,密密麻麻的英文堆栈在一起,象一份催命的判决书,直接宣判了王哲他们的结果。
但在他眼里,这些东西的辨识度还不如食堂门口的菜单复杂。
“IndexError: trix dinsion stch at line 247.”
陆丰的视线顺着报错信息往上追朔,在代码编辑器里快速翻动。
第218行,约束矩阵的定义。
第233行,变量的索引赋值。
第247行,矩阵乘法。
原来如此。
他没有说话,也没有解释,直接拉开椅子坐了下去。
双手落在键盘上。
“嗒嗒嗒嗒—”
一连串密集到几乎不间断的敲击声骤然爆发,在安静的机房里清脆异常。
那节奏快到不象是在写代码,更象是在弹一首钢琴曲。
野蜂飞舞,手速极快。
王哲刚张了张嘴,想说一句“我给你讲一下代码结构”,话还没出口,就被眼前的画面彻底堵了回去。
他看见陆丰的手指在键盘上飞速移动,光标精准地跳到第218行,选中一整段矩阵定义代码,删掉。
重新敲入。
三行代码,替换了原来的十二行。
然后光标又跳到第233行。
这一次陆丰甚至没有逐行修改,而是直接把整个for循环砍掉,换成了一行Nuy的矢量化操作。
王哲的瞳孔猛地收缩。
他是计算机学院编程竞赛拿过省二等奖的人,对代码的优劣有着极其敏锐的判断力。陆丰刚才那一手,不是简单的修Bug,而是在重构。
他把一个低效的、嵌套了三层循环的矩阵运算,用一行矢量化语句直接替代了。
这需要对Nuy底层的广播机制有极其深入的理解,同时还要精确掌握线性代数中矩阵维度的变换规则。
关键是太快。
从坐下到现在,不到一分钟。
王哲下意识地看了一眼自己的手,那双经过了三年编程训练、自认为手速不慢的手。
手速太快这是对键盘多么了解才能做到如此速度。
此刻它们正老老实实地垂在身体两侧,一动不动。
跟人家比起来,他这手速连上桌的资格都没有。
他们现在就配做一个背景板。
敲击声还在继续。。
接着又往下翻了几行,在规划模型的目标函数定义处停住。
他皱了皱眉。
“这里的符号写反了,最小化问题你们用的是xize,求解器方向错了。”
他把xize改成nize,顺手在下面的约束条件里补了一个非负约束。
然后按下了运行键。
绿色的进度条闪了一下。
屏幕刷新。
一组整整齐齐的最优解数据,出现在输出窗口里。
三条生产线的最优排程方案,每条线开机的温度区间、湿度阈值、设备轮换周期,全部以表格的形式呈列。
底部还自动生成了一张折线图,显示优化前后次品率的对比曲线。
从第一行红色报错到最终结果输出。
两分半钟。
李浩盯着屏幕上那组干净漂亮的输出数据,大脑一片空白。
他是编程组的组长,MATLAB和Python都用了三年。
刚才那个矩阵维度错配的问题,他和王哲、刘宇三个人讨论了将近二十分钟,从索引检查到类型转换试了个遍,愣是没搞定。
结果人家过来,两分半钟,连改带调,直接出结果。
而且修完的代码量,只有他们原来的三分之一。
刘宇推了推眼镜,喉咙动了一下。他把身体凑到屏幕前,在陆丰改过的那几行代码上来回看了三遍。
“矢量化广播……动态索引切片……”他的声音有些干涩,“这写法,ACM竞赛的金牌选手也不过如此了。”
陆丰从椅子上站起来,活动了一下手腕。
“问题出在两个地方。”
他走到旁边的白板前,拿