《拒絕認親,真少爺走上頂峰》第123章 彈道優化(1)

作者:清源公子·18天前

錢瑾姝把燃料消耗的積分形式重新推導了一遍,用指數函式的複合形式構造了一個近函式,誤差控制在千分之一以,計算量只增加了不到百分之五。

張辰同時修改點法的主迴圈,把約束條件的雅可比矩陣計算優化了一下,去掉了一個冗餘的迴圈。

兩個小時後,兩邊的改都完了。張辰把程式碼合併,跑了一組簡單測試。程式執行正常,收斂到可行解,但目標函式值比預期高了百分之三。

度不夠。”張辰盯著輸出結果,“千分之一的近誤差不應該導致百分之三的偏差。”

他重新看了錢瑾姝的近推導,翻了五分鐘,找到問題了。

近函式的定義域沒卡。邊界附近的值被過度了,導致目標函式在可行域邊界上被低估。”張辰在推導的最後一頁指了指,“這裡加一個截斷,把邊界附近的區域單獨理。”

錢瑾姝湊過來看了一會兒,沒說話,拿起筆在紙上改了幾行。

張辰把新公式輸程式碼,重新編譯執行。這次偏差降到了百分之零點八。

“可以了。”張辰道。

接下來兩天,兩個人都在打磨細節。

張辰把約束條件的理流程重新梳理了一遍,二十多項約束按重要程度排序,把最的幾條放在最前面。

錢瑾姝同時做初始點選取策略——點法對初始點敏,選不好會收斂到不可行域。用了一種啟發式方法,從幾十個隨機初始點裡篩選出最優的一個,穩是穩了,但計算量大。

張辰看了的實現,覺得可以最佳化,“隨機篩選太慢。首接用問題的理特定一個初始點,比如把彈道近似線,解析解做初值。”

錢瑾姝猶豫了一下,還是照做了。新方法比隨機篩選快了十倍,而且收斂率更高。

兩天後的下午,演算法框架終於搭完。張辰寫了點法的主迴圈,錢瑾姝實現了約束條件的理和初始點選取。兩人坐在一起,準備跑第一個全流程測試用例。

程式跑起來了,進度條一格一格地走。張辰盯著螢幕,手指在桌上輕輕敲了兩下。錢瑾姝沒說話,眼睛也沒離開螢幕。

跑了不到一半,程式報錯——雅可比矩陣奇異。

張辰皺了皺眉,他把錯誤資訊看了兩遍,又翻出約束條件的梯度程式碼,一行一行地過。過了五六分鐘,他停在一行程式碼前。

“這裡錯了~~”張辰指著螢幕,“約束條件的梯度符號寫反了。應該是負的,我寫了正。”

錢瑾姝湊過來看,愣了一秒,“還真是。難怪奇異,符號反了導致矩陣的行列式接近零。”

張辰改過來,重新編譯執行。這次沒有再報錯,程式順利地跑到了最後。

第一個測試用例收斂,目標函式值比現有方案低了百分之七。

第二個用例,低了百分之九。

第三個用例,低了百分之十二。

“可以。”張辰靠在椅背上。

錢瑾姝把三組結果的資料整理表格,和現有方案做了個對比圖。差距很明顯,尤其是第三個用例,點法的收斂軌跡比序列二次規劃平得多,沒有震盪。

張辰把結果整理報告,發給了周明。郵件裡附了對比曲線和收斂分析,備註裡寫了一句話:“彈道最佳化初版己完,建議整合測試。”

半小時後,周明回了郵件。只有兩個字:“不錯。”

稿

TPP

猜你喜歡

同題材或同分類的其他作品。