APP下载

多语言混合编程的民用飞机航材预测与配置平台

2021-11-01冯蕴雯严浩路成薛小锋

航空工程进展 2021年5期
关键词:源文件航材调用

冯蕴雯,严浩,路成,薛小锋

(西北工业大学航空学院,西安710072)

0 引 言

航材作为综合后勤保障的物资基础,其科学的预测与合理的配置是有效保障民用飞机安全经济运行的前提[1]。波音公司建立了覆盖全球的供应链,拥有行业内先进的分销网络,能够快速为全球客户配置航材。美联航建立了完善的航材库存管理系统,使得各部门之间能够及时共享信息,为航材管理部门制定库存计划和监控备件使用情况提供支持。我国航空公司在航材经营管理方面经验不足,容易造成航材采购不合理和资金浪费的情况[2]。以国内某航空公司为例,2018年该公司因飞机维修过程中航材缺件引起的航班延误或取消不到1%,但该公司在预算之内尽量多备航材库存以满足飞机维护需求,造成航材库存成本偏高,公司运营成本增加[3]。

国内研究人员为解决合理采购和配置航材这一工程问题开展了很多研究。李俊生[4]分析了航材管理对于航空公司盈利的重要意义,阐述了信息化对提高航材管理水平的作用;喻拿仑[5]建立了以航材总体成本最小化为目标函数的模型,使用Python编程设计优化算法,选取某航空公司50个航材实际数据作为输入,得到了成本更优的航材数量推荐清单;王洵麟[6]开发了民用飞机管理信息系统,实现了航材数据管理与航材预测两个主要功能,其中航材预测功能是基于用户经验实现的;杨冰冰[7]使用灰色预测模型对30架B777飞机大修数据进行了研究,并使用VB语言和Access数据库设计了飞机大修航材预测系统,能够实现对大修航材的预测。此外,近年来,基于航材共享模式的航材管理也在快速发展。航材共享模式凭借规模优势能够有效降低航空公司的航材库存成本,但一般只包括周转件[8],并且航材共享支援网络本身也需要对航材进行合理的采购和配置。

综上所述,使用信息化平台技术推动航材预测与配置理论算法工程应用是有必要的,但国内在这一方面尚未有很好的发展。主要存在如下问题:算法程序未能整合入系统平台,工程上难以应用;系统平台开发的技术并非主流的软件开发技术,不利于部署使用及后期维护,同时,系统平台的扩展性与操作性较差。

针对上述问题,本文设计并实现基于多语言混合编程的航材预测与配置平台。以Java语言及其相应的SpringBoot、Mybatis、Vue等主流技术框架进行平台框架搭建,将Python、Matlab编写的航材预测与配置算法整合到系统平台中,并运用实际工程数据对平台的功能进行使用测试验证。

1 预测与配置方法

目前,针对航材预测与配置的理论研究,国内外已取得了较多的成果,提出了较为丰富的理论算法。其中,航材预测技术总体上可分为三类[9-14]:基于时间序列的航材预测技术、基于回归分析法的航材预测技术、基于机器学习的航材预测技术。航材配置技术总体上可分为两类[15-16]:基于解析方法的航材配置管理和基于优化算法的航材配置管理。这些方法为民用飞机航材科学预测与合理配置提供了理论支撑。

支持向量机算法从统计学习理论发展而来,专门用于研究有限样本情况下的机器学习规律[17],在数据预测问题上有较为广泛的运用[18]。因此,本文使用支持向量机法作为实现航材预测功能的算法。

平台中集成的航材配置算法为边际分析法,这是一种经济分析方法,该方法把投入的资金所得到的利益与输出损失进行比较,如果组织的目标是取得最大利润,那么当追加的收入和追加的支出相等时,这一目标就能达到[19]。在航材配置过程中,主要考虑的问题是在满足航材配置需求的前提下尽量降低成本。基于边际分析法,冯蕴雯等[20]考虑横向供应的多级库存配置问题,将维修比例这一实际因素引入库存配置模型中,提出了一种考虑横向供应及维修比例的民用飞机备件多级库存配置方法。与不考虑横向供应和维修比例的传统配置模型、以及只考虑维修比例的库存配置模型相比,该模型显示的库存成本得以显著减少。因此,本文采用这一方法的算法程序来实现航材配置功能。

2 混合编程的实现方式

多种语言混合编程的目的是为了发挥不同语言各自特有的优势,更好地实现平台设计。Java语言最主要的特点是面向对象,通过初始化具有不同属性的对象来实现具体的程序操作。基于这一特性,Java语言被广泛应用于软件平台的开发中,目前也是全世界使用范围最广的编程语言,但使用Java语言来进行数据分析和处理的效率很低。Matlab语言在处理矩阵方面具有突出的优势;Py‐thon语言语法简洁,且拥有丰富的第三方库,用户可以方便地调用第三方库快速实现数据处理与分析。在软件平台的开发过程中,把具体的算法和数据处理工作交给在这一方面具有优势的编程语言来实现,将复杂的问题转化为不同语言之间的参数传递问题,能够降低程序设计的复杂程度,提升软件平台的性能和开发效率[21]。

2.1 Java与Matlab混合编程的实现过程

Java与Matlab混合编程的实现方式有多种,但核心问题都是要解决两种语言之间的参数传递。本文设计的软件平台是以Java语言为主,将其他语言编写的算法整合到软件平台中。算法程序确定后基本不会再修改,而软件平台中实现功能的其他程序需要在编写过程中不断修改调试。为方便算法的调用和平台开发,本文使用将Mat‐lab算法程序封装成jar包程序提供给Java语言直接进行调用的方式来实现Java与Matlab混合编程。具体操作流程如下:

(1)将算法程序处理为函数形式,并封装成jar程序包:通常情况下,为了便于直接获取Matlab程序运算产生的过程变量值和结果值,算法程序会以程序流的形式编写。但若要将程序封装为jar包程序,则需要首先对脚本程序进行处理,将其处理为方法体的形式,使用function……end将算法程序包裹起来,并明确方法名称、输入和输出参数。具体形式为

如果原程序开头有clear,clc命令,需要在写成方法体后将其注释或删除,避免该命令运行后将传入的输入参数清空。

通过以上步骤完成对算法脚本程序的处理后,在Matlab软件中使用Library Compiler工具,将算法程序封装成jar程序包。

(2)在SpringBoot项目中引入环境配置jar包和算法程序jar包:在SpringBoot项目中引入jar程序包有两种方法,一种是将jar程序包放入本地maven仓库中,然后在pom配置文件中引入;另一种是在SpringBoot项目中的resource目录下新建一个lib文件夹,右键将其Add as library,项目便可以识别到里面的jar程序包。

考虑到在开发过程中,需要不断地调试程序,修改jar包,本文选择建立lib文件目录的形式,将jar包添加进去。除了算法程序的jar包,还需要引入javabuilder的jar包,提供混合编程的环境配置,主要是为数据类型转换提供支持,如图1所示。

图1 在SpringBoot项目中引入jar程序包示意图Fig.1 Diagram of introducing a jar package into the SpringBoot project

(3)调用Matlab算法,传入参数,接收结果:完成上述操作后,即可在Java程序中通过初始化类的方式,调用算法程序。具体操作程序如图2所示。

图2 使用Java调用Matlab程序核心代码Fig.2 Core code of using Java to call the Matlab program

2.2 Java与Python混合编程的实现过程

使用Java调用Python程序的方式有多种,主要包括:

(1)在Java类中直接执行Python语句;

(2)在Java中通过PythonInterpreter类调用Python脚本;

(3)通过Runtime.getRuntime()方法执行Py‐thon脚本。

以上三种方法都可以实现Java调用Python程序,但在实际开发过程中,使用方法(1)和方法(2)存在无法正常引用Python第三方库的问题,使得Python语言的优势难以体现。因此,选择第三种方法来实现混合编程,即保持了算法程序的独立性,又能够充分利用Python丰富的第三方库。具体操作流程如下。

(1)处理Python脚本程序。

首先需要对源程序进行处理,将其改写为方法体的形式,并声明主函数入口,在主函数中调用具体的算法函数,确定输入和输出参数。具体形式如图3所示。

图3 Python脚本程序处理方法Fig.3 Python script processing method

(2)在SpringBoot项目中添加环境依赖。

要在SpringBoot项目的Java程序中调用py‐thon程序需要在pom文件中添加jython依赖,如图4所示。

图4 调用Python程序所需添加的依赖Fig.4 The dependencies that need to be added to call the Python program

(3)在Java程序中调用Python脚本程序,传入参数、处理结果。

完成前述操作后,即可在Java程序中调用Py‐thon算法程序。具体操作程序如图5所示。

图5 使用Java调用Python程序核心代码Fig.5 Core code of using Java to call the Python program

3 平台设计与实现

3.1 平台设计

平台开发采用浏览器/服务器(Browser/Serv‐er,简称B/S)架构和前后端分离的开发方式,程序开发环境在Windos10系统下进行。平台功能结构如图6所示。

图6 平台功能结构图Fig.6 Diagram of platform functional architecture

平台后端程序基于SpringBoot技术框架,主要使用Java语言开发,并整合了Mybatis技术框架作为数据持久层。前端程序基于Vue技术框架,主要使用JavaScript语言开发,使用了ElementUI组件库用于前端页面设计。后台数据库使用MySQL数据库管理系统,用于存储计算分析的结果。由于平台功能是基于Java、Matlab、Python混合编程实现的,在平台开发和运行所使用的服务器上还需要配置这三种语言编译的环境。基于框架技术,平台使用模块化开发方式,便于将来更新和扩展功能模块。平台共包含两个主要功能模块:航材预测模块和航材配置模块,两个功能模块的业务流程功能相同,包括:

(1)通用文件查询:用户根据文件名查询数据库中存储的数据源文件信息;

(2)文件上传:用户上传数据源文件作为算法程序的输入;

(3)调用算法程序:用户完成数据源文件上传后,点击相应功能按钮,系统调用算法程序进行计算分析;

(4)状态提醒功能:平台页面会对用户的主要操作结果进行提示;

(5)结果导出功能:后台计算完成并将结果存入结果数据库后,相应的结果显示在平台页面上,用户可以将结果进行导出,存储到本地计算机中。

在航材预测模块中,将某一型号航材的历史使用数据作为输入,调用支持向量机算法,读取输入数据后进行计算,得到未来一段时间的航材使用数量预测值。然后,再使用实际的使用数据与预测值进行比较,将比较折线图和预测值作为输出,显示在前端页面上,计算结果可提供给用户进行下载导出。

在航材配置模块中,将包含原始推荐数量、保障率、可用率、报废率、备件费用、周转时间、订货时间、人工时费用、材料费用、任务间隔时间等信息的航材信息表,机队运营信息,航材库位置信息作为输入,调用边际分析算法,读取输入数据后进行计算分析,得到航材在每个航材库的配置数量并作为输出,显示在前端页面上,计算结果可提供给用户进行下载导出。

总之,平台程序设计的核心就是传入数据,调用算法程序进行计算分析,返回计算分析结果。输入数据的内容是根据算法程序的需求来确定的,本文设计的平台主要通过读取表格文件内容的方式来实现输入。在程序开发过程中,主要解决的是不同语言程序之间的数据传输问题。

3.2 参数处理技术

调用算法程序计算得到的结果返回Java程序后,会存在数据类型不一致的问题。Python语言为弱类型语言,它的参数类型与强类型语言Java的参数类型兼容性较好;Matlab语言的参数类型与Java语言参数类型并不完全对应,通常需要进行处理。

本文涉及到的参数处理技术途径如图7所示。程序调用Matlab编写的航材配置算法对输入参数进行计算分析后,得到的主要结果形式为矩阵,Ja‐va语言中没有矩阵数据类型,因此,要先将结果矩阵转换为Java语言可处理的结果类型,才能对其进行处理,并继续将其存入结果数据库。Matlab算法计算得到的是航材配置结果的矩阵输出结果,每一个元素代表一个型号航材在某航材库的配置数量。结果矩阵返回Java程序后,首先,使用MWNumercArray类将其转换为二维数组;然后,循环遍历该二维数组,依次取出二维数组中单个元素,该元素代表一个型号航材在若干航材库的配置数量;二维数组中的单个元素可看作一维数组,继续循环遍历该元素,将其中的每个数值赋值给航材配置结果对象属性,并将这个对象加入List集合;最后,使用Mybatis框架技术中的标签,将完成属性赋值的对象集合值存入数据库,完成整个参数处理过程。

图7 参数类型转换及属性赋值方法流程图Fig.7 Flowchart of parameter type conversion andattribute assignment methods

4 使用测试

4.1 测试过程

4.1.1 航材预测功能

登录系统后,点击左侧菜单栏的航材预测选项进入航材预测页面,页面上半部分内容为历史上传的航材预测数据源文件信息,下半部分为航材预测的结果,如图8所示。点击页面右下方上传数据文件按钮,根据系统页面提示上传航材历史使用情况的表格文件,如图9所示。消耗数据表格中记录了36个月的航材使用数据,如图10所示。继续点击航材预测运算按钮,程序调用后台计算程序开始计算,然后将计算结果以表格和折线图的形式返回到页面上,如图11所示。表格数据代表某一航材在一个月份中的使用数量预测值,折线图是实际使用数据与预测值的对比情况。用户可将表格中的结果数据导出到本地计算机中,导出操作如图12所示。

图8 航材预测模块页面Fig.8 Aviation material prediction module page

图9 上传航材预测数据源文件操作页面Fig.9 Upload aviation material prediction data source file operation page

图10 航材消耗源文件数据内容Fig.10 Content of aviation material consumption source file

图11 航材预测计算结果页面Fig.11 Aviation material prediction results page

图12 航材预测结果导出操作页面Fig.12 Export operation page of aviation material prediction results

4.1.2 航材配置功能

登录系统后,进入航材配置页面,如图13所示。页面上半部分显示历史上传的数据源文件信息,下半部分显示计算结果。点击“上传数据源文件”按钮,根据系统弹窗中的提示选择机队信息、航站信息、航材信息的数据源文件进行上传,如图14所示。机队信息文件中包含机队数量、年飞行小时、航站数量和基地数量;航站信息文件中包含每个基地和航站之间的航程信息;航材信息文件中包含若干航材件的平均非计划拆换间隔、原始推荐数量、保障率、可用度、时间等多个参数信息,如图15所示。完成上传后,继续点击“航材配置运算”按钮,程序调用后台程序开始计算,然后将计算结果以表格的形式显示到页面上。表格中一行数据代表某一型号航材在多个航站配置的数量。用户可将表格中的结果数据导出到本地计算机中,如图16所示。

图13 航材配置模块页面Fig.13 Aviation material configuration module page

图14 上传航材配置数据源文件操作页面Fig.14 Upload aviation material configuration data source file operation page

图15 航材配置数据源文件内容Fig.15 Content of aviation material configuration source file

图16 航材配置计算结果及导出操作页面Fig.16 Calculation results of aviation material configuration and export operation page

4.2 测试结果

根据4.1节中对各功能模块的测试操作可知,平台的人机界面友好,操作简单方便,成功整合了航材预测与航材配置算法程序,解决了混合编程存在的参数传递问题,实现了预先设计的两个主要功能,即通过平台技术整合理论算法,在平台上实现航材预测与航材配置的功能。

5 结 论

(1)本文给出了基于Java、Matlab、Python混合编程的航材预测与配置平台的设计,实现了将航材预测和配置理论研究算法整合入信息化平台的目的。该平台主要实现了基于航材历史消耗数据的对航材需求量的预测功能,以及基于机队信息、航站信息和航材信息的航材配置功能。

(2)在平台开发过程中,提出了将Matlab矩阵结果参数转化为Java语言可处理的参数类型的方法,并成功运用到平台中。

(3)在将来的使用中,可以根据工程实际需要整合多种类型的算法、扩展平台功能模块,优化原有算法程序,更好地为航材管理提供支持。

猜你喜欢

源文件航材调用
考虑航材共享的国产民机航材配置技术研究
核电项目物项调用管理的应用研究
网络社区划分在软件质量问题分析中的应用
从“人”的角度浅谈对航材管理的认识
基于源文件可疑度的软件缺陷定位方法研究
LabWindows/CVI下基于ActiveX技术的Excel调用
基于系统调用的恶意软件检测技术研究
浅谈我国通用航空航材共享业务
LKJ基础数据源文件自动编制系统的研究
基于SPSS因子分析的舰载机航材保障风险因素分析