基于密度聚类的地面发控解耦模型研究
2021-06-26冀慧君宁文学张鹏飞
冀慧君,李 林,刘 佳,宁文学,张鹏飞
(北方自动控制技术研究所,太原 030006)
0 引言
火箭弹武器系统地面发控系统是完成火箭弹发射准备、激活、点火的核心系统,严格地定义了火箭弹发射的每个步骤和规定的时间,在进入发射流程后,发控系统负责时序的控制,接收来自其他节点的文件和信息,向显示终端反馈当前步骤的执行结果,并且负责向火箭弹传输对时、星历、飞行控制参数和惯导参数,是火箭弹武器系统中不可或缺的一环,它与火箭弹发射前的发射流程息息相关。
某型火箭弹地面发射控制软件中功能划分不明确,且由于多人经手维护,标准不一,对后续的修改和新人上手开发很不友好。随着弹种和功能的不断增加,在原有软件上不断扩充。这样做便于开发,减少了任务量,但软件会越来越复杂,各功能模块在不断新添功能后职能逐渐变得模糊,而弹种间相互参数和功能间的共用,使得修改可能会引起连锁反应,降低了软件的可靠性,埋下未知的隐患。
基于上述问题,提出一种基于密度的网络聚类方法来分析发控软件功能节点的相似度,既可以保存所有可能参数对应的网络结构信息[1],又可以自动从中抽取所有可能对应的功能模块。并且在此基础上提出一种连续子区间堆结构,可以从网络连接密度遍历序列中抽取所有连续区间及其嵌套层次结构。
1 数据预处理
将地面发控软件的所有功能组合起来看作一个功能网络,每一个功能看作一个节点,当某一块大小固定区域内,聚集内出现的数量超过一个阈值后,便可以将这块区域看作是一个功能模块[2]。这些模块中节点的密度大小不一,且可能出现多个模块聚在一起,可以将其看作是大型模块,也可能出现单独模块游离在网络边缘,则它是一个功能独立的小型模块。网络中还存在其他类型的节点,例如中心点和离群点[3],中心点如一个通信模块中的收发函数,在复杂网络中扮演着非常特殊和重要的角色,离群点则与同样处在网络的边缘连接,如实时监控发射按钮,它可以看作是所连接模块的噪声数据。
为了通过聚类获得旧平台发射控制软件中代码单元的相关性,在进行聚类之前,对旧平台发射控制软件进行处理,从而获得独立的代码单元用以聚类。制定切分规则,合理切分出的代码单元是聚类结果可靠的保障。
第1 级切割从文件开始,一个代码文件中包含的参数与函数一般情况下逻辑紧密,参数在函数中存在具体实例,函数与函数间也有相互调用的可能。
第2 级切割从函数开始,一个函数所包含的信息是一个完整的集合,集合中存在的数据用以支撑这个函数的实现,数据间相互关联,存在递进的逻辑关系。因为函数给出了具体的输入输出,自身可看作一个整体,所有对同一文件下函数的切割不会破坏已存在的逻辑关系。
第3 级切割从输入输出开始,函数的输出与输出是对应的,标准情况下是一对一的关系,但函数输入输出存在多对一的对应关系,在函数中对多个输入的处理可能存在递进关系,处理函数的第2 个输入需要使用函数第1 个输入的处理结果。将这种显性输入与隐性输出看作是一个整体,一个函数便可被切割成多个更小的代码单元。
代码空间三级切割关系图如图1 所示,在进行聚类之前,对旧平台发射控制软件进行处理,按切分顺序对软件进行切割,将三级切割后的代码块看作最小代码单元,之后设定打印标识,通过重复的随机流程操作,生成打印标识序列,作为聚类算法的输入。
图1 代码单元切割顺序图
2 发射控制软件功能聚类分析
2.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 是结构连接的。
2.2 提取全局优化ε 聚类
定义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 结论