冀慧君,李 林,劉 佳,寧文學,張鵬飛
(北方自動控制技術研究所,太原 030006)
火箭彈武器系統地面發控系統是完成火箭彈發射準備、激活、點火的核心系統,嚴格地定義了火箭彈發射的每個步驟和規定的時間,在進入發射流程后,發控系統負責時序的控制,接收來自其他節點的文件和信息,向顯示終端反饋當前步驟的執行結果,并且負責向火箭彈傳輸對時、星歷、飛行控制參數和慣導參數,是火箭彈武器系統中不可或缺的一環,它與火箭彈發射前的發射流程息息相關。
某型火箭彈地面發射控制軟件中功能劃分不明確,且由于多人經手維護,標準不一,對后續的修改和新人上手開發很不友好。隨著彈種和功能的不斷增加,在原有軟件上不斷擴充。這樣做便于開發,減少了任務量,但軟件會越來越復雜,各功能模塊在不斷新添功能后職能逐漸變得模糊,而彈種間相互參數和功能間的共用,使得修改可能會引起連鎖反應,降低了軟件的可靠性,埋下未知的隱患。
基于上述問題,提出一種基于密度的網絡聚類方法來分析發控軟件功能節點的相似度,既可以保存所有可能參數對應的網絡結構信息[1],又可以自動從中抽取所有可能對應的功能模塊。并且在此基礎上提出一種連續子區間堆結構,可以從網絡連接密度遍歷序列中抽取所有連續區間及其嵌套層次結構。
將地面發控軟件的所有功能組合起來看作一個功能網絡,每一個功能看作一個節點,當某一塊大小固定區域內,聚集內出現的數量超過一個閾值后,便可以將這塊區域看作是一個功能模塊[2]。這些模塊中節點的密度大小不一,且可能出現多個模塊聚在一起,可以將其看作是大型模塊,也可能出現單獨模塊游離在網絡邊緣,則它是一個功能獨立的小型模塊。網絡中還存在其他類型的節點,例如中心點和離群點[3],中心點如一個通信模塊中的收發函數,在復雜網絡中扮演著非常特殊和重要的角色,離群點則與同樣處在網絡的邊緣連接,如實時監控發射按鈕,它可以看作是所連接模塊的噪聲數據。
為了通過聚類獲得舊平臺發射控制軟件中代碼單元的相關性,在進行聚類之前,對舊平臺發射控制軟件進行處理,從而獲得獨立的代碼單元用以聚類。制定切分規則,合理切分出的代碼單元是聚類結果可靠的保障。
第1 級切割從文件開始,一個代碼文件中包含的參數與函數一般情況下邏輯緊密,參數在函數中存在具體實例,函數與函數間也有相互調用的可能。
第2 級切割從函數開始,一個函數所包含的信息是一個完整的集合,集合中存在的數據用以支撐這個函數的實現,數據間相互關聯,存在遞進的邏輯關系。因為函數給出了具體的輸入輸出,自身可看作一個整體,所有對同一文件下函數的切割不會破壞已存在的邏輯關系。
第3 級切割從輸入輸出開始,函數的輸出與輸出是對應的,標準情況下是一對一的關系,但函數輸入輸出存在多對一的對應關系,在函數中對多個輸入的處理可能存在遞進關系,處理函數的第2 個輸入需要使用函數第1 個輸入的處理結果。將這種顯性輸入與隱性輸出看作是一個整體,一個函數便可被切割成多個更小的代碼單元。
代碼空間三級切割關系圖如圖1 所示,在進行聚類之前,對舊平臺發射控制軟件進行處理,按切分順序對軟件進行切割,將三級切割后的代碼塊看作最小代碼單元,之后設定打印標識,通過重復的隨機流程操作,生成打印標識序列,作為聚類算法的輸入。

圖1 代碼單元切割順序圖

對于節點u,節點u 的ε 鄰居包含所有與u 的結構相似度大于等于ε 的鄰居節點:

網絡中結構可達和結構連接關系圖如圖2所示。

圖2 結構可達和結構連接關系圖
任意兩個相近節點之間連接邊的長度與兩者相似度成反比,預設參數μ=4,ε=0.5,節點a、h、i、k存在4 個及以上結構相似度大于0.5 的相近節點,根據結構相似度定義它們都是核節點。對于節點h,h 與i 之間的相似度大于0.5,所有h 與i 之間是結構可達的;同理,i 與k 之間結構可達,根據結構可達的定義,h 與k 之間是結構可達的。但是在非核節點上,結構可達的對稱性不再成立,m 與j 是結構連接的。


定義6(核相似度) 給定節點u∈V,u 的核相似度[9]為

首先遍歷打印標識序列,遍歷算法設計如圖3所示。

圖3 遍歷算法流程圖
算法輸入為打印標識序列G= 遍歷時默認設置第1 個節點為核節點,以其核相似度作為優先級插入隊列,最后一個節點應是核節點附近的普通節點,以其可達相似度作為優先級插入隊列。所有最后得到的ε 曲線是單調遞增的。假定選擇其中任意排序輸出的相似度值ε1,從最小值ε1和最大值εn分別畫一條連接εi的直線,那么最優ε 應該是所有夾角中的最小值。 其中 二叉搜索法遍歷所有ε 的時間復雜度為O(logn),選擇不同的起始節點可以獲得不同的輸出序列S,為了獲得全局最優的ε,可選擇n 個節點作為起始節點,出現次數最多的ε 則選做全局最優ε,使用二叉搜索法獲得全局最優的時間復雜度為O(nlogn)。 定義8(連續ε 區間) 可達相似度大于等于ε的一個極大連續位置索引子集稱為連續ε 區間。對于連續區間,若此刻,與區間[a,b]中任一位置索引對應的網絡功能節點同屬一個聚類模塊中。 定義9(子區間) 若區間[c,d]是一個連續區間[a,b]的子區間,對任意連續ε 區間,存在一個連續區間[c,d],其中,。 由于連續子區間的特性,使用樹形結構存放連續子區間,且子區間內存在偏序關系,從而使得父節點必然小于孩子節點,形成連續子空間堆。連續子空間堆的構建過程如圖4 所示。 圖4 層次結構遍歷流程圖 當訪問完全部節點后,棧中剩余的連續區間變作為堆頂的子節點,形成完整的堆結構。通過上述方法,可以簡單地從遍歷序列S 中提取所有可能的ε 聚類對應的嵌套層次樹。 對得到的子區間堆進行分析,發現聚類規模較大的模塊共有7 個,分別在程序中處理初始化、通信、參數設置、通信自檢、火箭彈自檢、參數裝訂和時序控制模塊,其中,跟通信有關的聚類點中又包含4 個小型聚類,分別處理DDS、TCP、Can 和串口通信任務。另外,程序中存在很多的離群點,大部分的任務是監控外部環境的實時變化。軟件功能聚類結構圖如圖5 所示。 圖5 軟件功能聚類結構圖 通過聚類提取到的ε 和包含層次嵌套關系的子區間堆,按數據預處理中的切分順序,逆向將其重新聚合為函數,通過子區間堆的包含關系將函數分配到對應模塊的文件當中,并將對應代碼進行優化修改。 圖5 中的聚類結果時序控制占比整個軟件的38%,時序控制針對不同的彈種會有不同的操作,如果將不同的彈種制作成不同的鏈接庫文件,在系統啟動時有選擇地加載對應的鏈接庫文件到內存中,相當于運行不同彈種的發射控制程序,在維護不同彈種的發射控制軟件時,方便統一軟件版本,可以對具體彈種做特定修改,并且聚類結構中的參數設置、參數裝訂、火箭彈自檢和時序控制模塊中不同彈種共用的參數和數據結構可以進一步地解耦。 首先建立內核映像工程,將圖5 中系統初始化、通信、系統自檢和其他中的部分功能抽離出來放在內核映像工程中,和DeltaOS 內核一起打包,可直接在目標板上完成自啟動,裝入內核并運行應用程序。每個對應彈種的可下載模塊包含對應的參數設置、參數裝訂、火箭彈自檢和時序控制,看作是用戶程序,不包含DeltaOS 內核。當系統收到彈種信息時,在內核映像中自動切換對應彈種的鏈接庫。某一時刻軟件結構如圖6 所示,當前時刻正在運行彈種n 的地面發射控制軟件模塊,則程序應只存在與彈種n 相關的內容,其余彈種不應被加載到內存中。 圖6 某一時刻軟件結構圖 為實現模塊動態加載,利用軟件設計中工廠模式的設計思想,在彈種共用模塊中實現彈種選擇工廠化,根據當前彈種返回的自檢信息中包含彈種編碼的信息調用對應的彈種模塊,從而去除由人工選擇產生失誤的可能。 模塊動態加載流程圖如圖7 所示。 圖7 模塊動態加載流程圖 仿真驗證平臺為某型火箭彈火控系統調試平臺,模擬彈工裝為火控系統提供彈上信息反饋,進行隨機流程測試,記錄功能模塊標識。 μ 與ε 以先驗知識的身份作為輸入參數,通過算法求得最優ε。其中,參數ε 選擇一個最小的初始閾值,使聚類信息多樣化,而不同的μ 限定了小型功能模塊包含功能節點的個數,選定10 個不同的μ,以ε=0.75 進行聚類,測試實驗結果的差異性。實驗結果如圖8 所示。 圖8 參數μ 對全局最優ε 的影響 當μ>5 時,全局最優ε 的變動開始不平穩,參數μ 開始影響算法提取的最優ε。為了避免這種情況的發生,使算法對μ 參數不敏感,結果趨于穩定,應設μ≤5。 為了驗證依照聚類結果重新設計的發射控制軟件中功能節點歸屬是否滿足預期,進行隨機流程測試,記錄功能模塊標識。將最優參數和作為先驗知識,以核心節點為基準,對功能節點的歸屬進行評估,判斷其結果是否與預期劃分相同。 評估結果如圖9 所示。 圖9 節點劃分評估結果圖 符合預期分布的功能節點有416 個,超出分配核節點數范圍的功能節點共8 個,其中3 個節點從中心節點變成了核節點的附屬節點,1 個節點從核節點的附屬節點變成中心節點,3 個節點從核節點的附屬節點變成離群點,1 個節點的預設核節點發生變化。本文結合實驗結果,根據實際情況對不符合預期的功能節點進行分析,發現造成該結果的隨機流程屬于發射控制程序的應急模式,應急模式中會根據屏蔽的流程步驟生成對應的應急流程。正常作戰實驗中不排除進行應急發射流程的可能,但正常流程依舊占多數。根據分析,將預設核節點發生變動的點進行重新劃分,其余因應急模式發生變化的功能節點保持不變。 在此基礎上新增某型火箭彈彈種模塊,運行特定彈種發射流程,以函數為打印光標單位,對比重新設計之前某流程相似的火箭彈彈種模塊以相同方式處理得到的結果,對比結果如表1 所示: 表1 新舊平臺功能聚類指標對比圖 功能聚類指標t 由式(7)得出。 其中,n 代表光標類型,s 代表光標總數,在光標總數s 相同的情況下光標類型n 越少則功能內部聚類程度更高。通過對比可以看出,同一光標類型被復用次數多于舊平臺,光標總數也較舊平臺有了減少,改良后的軟件模塊功能聚類更加緊密。 本文設計一種基于密度的聚類算法,遍歷切割后的功能節點光標,通過聚類結果得到的最優模塊分配和模塊間的層次嵌套關系,重新劃分地面發射控制軟件的功能模塊,并重構彈種模塊,去除不同彈種間的相互耦合,解決修改彈種流程會對其他彈種流程造成未知干擾的隱患。通過驗證,確定重新設計的發射控制程序可以完成舊版發射控制程序所有功能,且優化了軟件結構,不僅提高了功能聚類指標,對后期的維護成本和新增彈種的便利性也有良好的改善。同時,對陸軍火控系統中其他軟件的重新設計和梳理有十分重要的借鑒作用。

2.3 提取全局優化ε 聚類

3 發射控制軟件解耦設計
3.1 聚類結果分析

3.2 模塊動態加載設計


4 驗證與優化
4.1 參數的選擇

4.2 聚類結果驗證

4.3 聚類指標評估


5 結論