第五十二章 編程?我自學的啊

投票推薦 加入書籤 小說報錯

  三個人下意識地讓出了位置。

  不是刻意的客氣,而是一種本能反應。

  就好像一場手術台上爭論不休的實習醫生,看到主刀大夫推門進來,身體自動往兩邊撤。

  儘管他們很清楚,陸豐是機械專業的。

  但就是莫名其妙的對他就是信任,是因為之前陸豐對數學的絕對理解嗎,貌似不是,就是對他這個人信任。

  陸豐彎腰看了一眼屏幕。

  紅色的報錯信息刷了滿屏,密密麻麻的英文堆疊在一起,像一份催命的判決書,直接宣判了王哲他們的結果。

  但在他眼裡,這些東西的辨識度還不如食堂門口的菜單複雜。

  「IndexError: matrix dimension mismatch at line 247.」

  陸豐的視線順著報錯信息往上追溯,在代碼編輯器里快速翻動。

  第218行,約束矩陣的定義。

  第233行,變量的索引賦值。

  第247行,矩陣乘法。

  原來如此。

  他沒有說話,也沒有解釋,直接拉開椅子坐了下去。

  雙手落在鍵盤上。

  「嗒嗒嗒嗒—」

  一連串密集到幾乎不間斷的敲擊聲驟然爆發,在安靜的機房裡清脆異常。

  那節奏快到不像是在寫代碼,更像是在彈一首鋼琴曲。

  野蜂飛舞,手速極快。

  王哲剛張了張嘴,想說一句「我給你講一下代碼結構」,話還沒出口,就被眼前的畫面徹底堵了回去。

  他看見陸豐的手指在鍵盤上飛速移動,光標精準地跳到第218行,選中一整段矩陣定義代碼,刪掉。

  重新敲入。

  三行代碼,替換了原來的十二行。

  然後光標又跳到第233行。

  這一次陸豐甚至沒有逐行修改,而是直接把整個for循環砍掉,換成了一行NumPy的向量化操作。

  王哲的瞳孔猛地收縮。

  他是計算機學院編程競賽拿過省二等獎的人,對代碼的優劣有著極其敏銳的判斷力。陸豐剛才那一手,不是簡單的修Bug,而是在重構。

  他把一個低效的、嵌套了三層循環的矩陣運算,用一行向量化語句直接替代了。

  這需要對NumPy底層的廣播機制有極其深入的理解,同時還要精確掌握線性代數中矩陣維度的變換規則。

  關鍵是太快。

  從坐下到現在,不到一分鐘。

  王哲下意識地看了一眼自己的手,那雙經過了三年編程訓練、自認為手速不慢的手。

  手速太快這是對鍵盤多麼了解才能做到如此速度。

  此刻它們正老老實實地垂在身體兩側,一動不動。

  跟人家比起來,他這手速連上桌的資格都沒有。

  他們現在就配做一個背景板。

  敲擊聲還在繼續。

  陸豐的光標跳到第247行的矩陣乘法處,把原來的雙重循環手動乘法,改成了一個np.dot()函數調用。

  接著又往下翻了幾行,在規劃模型的目標函數定義處停住。

  他皺了皺眉。

  「這裡的符號寫反了,最小化問題你們用的是maximize,求解器方向錯了。」

  他把maximize改成minimize,順手在下面的約束條件里補了一個非負約束。

  然後按下了運行鍵。

  綠色的進度條閃了一下。

  屏幕刷新。

  一組整整齊齊的最優解數據,出現在輸出窗口裡。

  三條生產線的最優排程方案,每條線開機的溫度區間、濕度閾值、設備輪換周期,全部以表格的形式呈列。

  底部還自動生成了一張折線圖,顯示優化前後次品率的對比曲線。

  從第一行紅色報錯到最終結果輸出。


  兩分半鐘。

  李浩盯著屏幕上那組乾淨漂亮的輸出數據,大腦一片空白。

  他是編程組的組長,MATLAB和Python都用了三年。

  剛才那個矩陣維度錯配的問題,他和王哲、劉宇三個人討論了將近二十分鐘,從索引檢查到類型轉換試了個遍,愣是沒搞定。

  結果人家過來,兩分半鐘,連改帶調,直接出結果。

  而且修完的代碼量,只有他們原來的三分之一。

  劉宇推了推眼鏡,喉嚨動了一下。他把身體湊到屏幕前,在陸豐改過的那幾行代碼上來回看了三遍。

  「向量化廣播……動態索引切片……」他的聲音有些乾澀,「這寫法,ACM競賽的金牌選手也不過如此了。」

  陸豐從椅子上站起來,活動了一下手腕。

  「問題出在兩個地方。」

  他走到旁邊的白板前,拿起筆,畫了兩個矩陣的示意圖。

  「第一,你們在構建約束矩陣的時候,手動用循環逐行賦值,但回歸方程的參數向量是列向量,直接做矩陣乘法會在第二維度對不齊。換成向量化操作之後,NumPy會自動處理維度廣播,根本不需要手動對齊。」

  他在白板上標註了尺寸標記。

  「第二,求解方向的問題。你們調用的scipy.optimize.linprog默認是最小化,但你們在目標函數前面沒有加負號,等於在最大化次品率。」

  他停了一下,轉過頭看了三人一眼。

  「相當於你們寫了一個幫工廠生產最多次品的程序。」

  劉宇的眼鏡差點滑落。

  李浩捂住了臉,也是有些尷尬。

  不是好哥們,這都能出錯,問題還是出錯還沒發現。

  王哲的拳頭重重砸在桌面上,聲音里混雜著懊惱和佩服。

  「媽的,maximize和minimize就差了三個字母,我們找了二十分鐘……」

  旁邊一直旁觀的陳靜端著水杯走過來,臉上掛著一種「早該預料到」的麻木表情。

  「學弟,你對編程也是這種水平?」她問道。

  陸豐把白板筆放回筆槽。

  「之前自學過一段時間。」

  「噗~」

  陳靜嘴裡的水直接噴了出來。

  一大片水霧精準地覆蓋了面前那台剛剛調試好的顯示器,屏幕上那組漂亮的輸出數據,瞬間被染上了一層唾沫星子。

  「咳咳咳!」

  陳靜劇烈地咳嗽著,一隻手扶著桌面,另一隻手瘋狂地抽紙巾擦屏幕。

  周曉曉連忙遞過一包紙巾。

  「不是,自學?」陳靜咽了口口水,指著屏幕上那幾行堪稱教科書級別的代碼,聲音已經帶上了哭腔。

  「你到底還有多少技能是自學的?」

  陸豐想了想。

  「挺多的。」

  陳靜直接自閉了。

  我是誰,我在哪,我在幹什麼,這是個什麼妖怪。

  李浩默默地關掉了自己寫了的代碼文件,盯著那個文件名看了兩秒。

  然後右鍵,刪除。

  「以後編程的事,學弟你也一起盯著吧。」他抬起頭,語氣誠懇。

  陸豐點了點頭,沒有推辭。

  因為他們真的有點太菜了。

章節目錄