1. 引言
军事数据资源是部队战斗力的要素之一,对于指挥系统的运行具有重要意义。在软件开发、测试和演示过程中,都需要军事数据的支撑,但通常不宜使用真实数据,主要出于以下几点考虑:一是出于安全保密原因,不允许使用真实数据,这种情况下可以真实数据进行脱敏后使用,但脱敏后的数据可能会改变数据,从而影响使用效果,且有时通过对脱敏后的数据进行处理可能泄露出有关真实数据的信息,存在一定的安全隐患。二是出于成本考虑,没有条件使用真实数据。军事数据内容广泛,要求严格,需要通过一定的采集流程和审批才能够获取,并且需要相应的人员、设备保障,获取的周期长、成本高。三是不同的使用场景对数据的需求不同,一套数据难以满足各种场景下的需求。例如对于测试来说,需要一些处于边界的数据,而这些数据在真实情况下可能不存在,或对于演示来说,需要一套满足想定设想的数据,而真实的数据并不能满足想定的要求。
基于以上原因,真实军事数据并不能满足指控软件在开发、测试和演示时的使用需求,而手动维护相关数据需要耗费大量的时间和人力,因此需要能够快速产生支撑指挥系统研制、应用要求的军事模拟数据[1]算法。目前流行的生成对抗网络[2]是由生成网络(Generator)和判别网络(Discriminator)两部分组成,其中生成网络用于生成模拟数据,判别网络负责判断输入的数据的真实性,二者形成对抗的关系,因此叫对抗网络。传统的蒙特·卡罗方法[3] (Monte Carlo method),也称统计模拟方法,是一种以概率统计理论为指导的一类重要的数值计算方法,主要是使用随机数(或更常见的伪随机数)来解决很多计算问题的方法,该方法在金融工程学,宏观经济学,计算物理学(如粒子输运计算、量子热力学计算、空气动力学计算)等领域应用广泛。以上两种方法都属于非确定性方法,生成的数据比较单一和随机,难以解释和控制,而军事数据在数据结构复杂、代码要求严格,并且为了满足功能演示的需要,对生成的数据质量方面有较严格的要求,需要确保生成的模拟数据具有结构完整、代码规范,另外还要求数据在统计上具有一定的准确性,能够反映真实数据的特征,包括数据分布、数据异常、数据相关性等,从而满足各种场景的需要。
为了生成高质量的军事数据,首先需要考虑数据的结构和上下文,以确保生成的数据符合所要求的结构和语义;其次,为了生成准确的数据,需要使用元数据[4] [5]、数据可视化、统计分析,或大数据[6] [7]等方法对真实数据的特性和规律进行深入的研究,从而可以构建出更加准确的模拟数据生成模型;对于具体数据的生成,可以使用各种统计方法和技术,这些技术可以模拟不同变量之间的相关性,从而生成更加真实的数据集。以上算法都是为了产生某一类同构数据[8]-[11],本文提出了一种产生军事模拟数据的框架算法,可以把以上这些具体的数据生成方法管理起来,针对不同的数据,配置不同的模拟数据生成算法和参数,从而可以满足系统开发、测试和演示的需求。
2. 框架算法描述
本框架由资料库、元数据库、模拟数据库、算法管理框架、模拟数据产生算法、模拟算法配置模块、模拟数据生成引擎、模拟数据评估模块等组成,如图1所示。
Figure 1. Algorithm framework
图1. 算法框架
a) 资料库:模拟数据产生算法需要一些基础数据的支撑,包括参考数据、历史数据、规则数据等。
b) 元数据库:用于对目标系统的数据结构进行描述,主要是结构元数据,包括表、字段、约束的相关描述,以及主数据和参考数据的内容[2]。
c) 模拟数据评估模块:针对给定的需求,对形成的模拟数据质量,以及对需求的满足程度进行评估,形成评估结果,可用于调整配置的模拟数据产生算法及其参数。
d) 模拟数据产生算法:各类模拟数据产生算法的实现,从数据类型上,可分为数值型、字符型、日期时间类型等;从产生方式上,可分为固定式、序列式、随机式、概率分布式等;从语义上,可分为经纬度、人员身份证、人员姓名、唯一标识等。
e) 模拟数据配置模块:根据需求,为每个表的每个字段配置合适的模拟数据产生算法,并设置相关的算法参数。
f) 模拟数据产生引擎:根据模拟数据配置模块的配置信息,使用合适的参数,通过算法框里框架,调用相应的模拟数据产生算法,记录产生的模拟数据。
g) 模拟数据库:用于保存生成的模拟数据。
h) 算法管理框架:用于对产生模拟数据的算法进行管理,包括算法的注册、分类管理、算法调用等功能。
3. 模拟数据生成系统设计
3.1. 功能组成
模拟数据生成系统主要分为以下模块:
a) 算法模型管理:用于对符合标准规范的算法模型进行注册和管理;
b) 元数据采集:用于从目标系统采集元数据;
c) 算法配置:根据采集到的元数据,针对各字段配置相应的产生算法,设定相关参数;
d) 模拟数据生成:按照指定的算法及其参数,调用相应的算法,产生模拟数据,并记录;
e) 模拟数据评估:对产生的模拟数据进行评估;
f) 资料数据管理:对算法模型使用的资料类数据进行管理。
3.2. 运行流程
模拟数据生成流程如下图2:
Figure 2. Execution step
图2. 执行步骤
模拟数据生成流程如下:
步骤1:根据已有需求,研制开发模拟通用化的数据生成算法;
步骤2:依托算法管理框架,对模拟数据生成算法进行统一注册和管理;
步骤3:采集目标系统元数据,包括表、字段、主外键关系,以及相应的目录代码和数据字典等;
步骤4:针对目标系统的每个表的每个字段,根据业务含义,配置相应的模拟数据产生算法;
步骤5:调用模拟数据生成引擎,产生模拟数据;
步骤6:模拟数据生成引擎通过模拟数据管理框架,使用设置的参数调用指定的模拟数据生成算法;
步骤7:保存生成的模拟数据;
步骤8:针对模拟数据使用需求,由质量评估模块对生成的模拟数据进行评估;
步骤9:评估结果反馈给配置模块,可对配置算法进行调整;
步骤10:将满足评估结果的数据加载到目标数据库中。
4. 算法验证
4.1. 验证方法
研制模拟数据生成引擎,以及所需的产生模拟数据的算法,使用配置文件模拟元数据库,针对给定数据集,针对各字段配置所需产生模拟数据的算法,通过调用模拟数据产生引擎,产生相应的模拟数据。
4.2. 数据结构
指定的数据结构包括商品目录、商店、销售记录,以及销售明细表,如图3所示。
Figure 3. Data structure
图3. 数据结构
各表的说明如表1所示。
Table 1. Table description
表1. 各表的说明
序号 |
表名 |
代码 |
说明 |
1 |
商店 |
T SD |
关于商店的信息 |
2 |
商品目录 |
T SPML |
关于商品目录的信息 |
3 |
销售记录 |
T XSJL |
关于销售的记录 |
4 |
销售明细 |
T XSJL MX |
关于销售中购买的具体商品的记录 |
4.3. 模拟算法
为产生满足指定的数据结构的模拟数据,研制了以下模拟数据生成算法,如表2所示。
Table 2. Simulation data generator algorithm
表2. 模拟数据产生器算法
序号 |
算法名称 |
参数 |
算法说明 |
1 |
数值序列 |
最小值,步长和最大值 |
按照指定步长生成的返回值 |
2 |
连续随机值 |
给定连续值的上下限范围 |
返回指定范围内的随机值 |
3 |
日期随机值 |
[最早日期,最晚日期] |
返回指定范围内的随机日期 |
4 |
离散随机值 |
离散值集合,返回个数 |
返回指定集合中的随机元素 |
5 |
随机字符串 |
字符串最大长度 |
小于指定长度的字符串 |
6 |
唯一标识 |
产生唯一值的算法名称 |
返回唯一值 |
7 |
经度值 |
[经度下限,经度上限] |
指定范围内,符合规范的经度值 |
8 |
纬度值 |
[纬度下限,纬度上限] |
指定范围内,符合规范的纬度值 |
4.4. 算法配置
根据表结构,针对各表的字段配置的算法如表3、表4、表5和表6所示。
Table 3. Product list
表3. 商品名录表
序号 |
字段名称 |
字段代码 |
数据类型 |
备注 |
配置算法 |
|
商品内码 |
SPNM |
内码(32个字符) |
商品的唯一标识 |
唯一标识 |
|
序号 |
XH |
序号(24个字符) |
序号 |
数值序列(1, 1) |
|
商品名称 |
SPMC |
文本(80个字符) |
商品的名称 |
随机字符串(40) |
|
单价 |
DJ |
数值(8位数值,2位小数) |
单价 |
连续随机值(0.2, 500) |
Table 4. Store list
表4. 商店表
序号 |
字段名称 |
字段代码 |
数据类型 |
备注 |
配置算法 |
|
商店内码 |
SDNM |
内码(32个字符) |
商品的唯一标识 |
唯一标识 |
|
序号 |
XH |
序号(24个字符) |
序号 |
数值序列(1, 1) |
|
商店名称 |
SDMC |
文本(80个字符) |
商品的名称 |
随机字符串(40) |
|
经度 |
JD |
文本(12个字符) |
商店所在位置的经度 |
经度(73.33, 135.05) |
|
纬度 |
WD |
文本(11个字符) |
商店所在位置的纬度 |
经度(23.26, 66.34) |
Table 5. Sales records
表5. 销售记录
序号 |
字段名称 |
字段代码 |
数据类型 |
备注 |
配置算法 |
|
销售记录标识 |
XSJLID |
标识(32个字符) |
销售记录标识 |
唯一标识 |
|
商店内码 |
SDNM |
内码(32个字符) |
商店内码 |
离散随机值(商店目录.商店标识) |
|
总销售额 |
ZXSE |
数值(8位数值,2位小数) |
总销售额 |
根据其他字段计算得出 |
|
付款方式 |
FKFS |
文本(10个字符) |
如现金支付等 |
离散随机值(现金、电子支付、卡券支付) |
|
交易时间 |
XSSJL |
日期时间 |
销售时间 |
日期随机值(2012-03-04, 2020-12-31) |
Table 6. Sales detail record
表6. 销售明细记录
序号 |
字段名称 |
字段代码 |
数据类型 |
备注 |
配置算法 |
|
销售明细标识 |
XSMXID |
标识(32个字符) |
销售明细标识 |
唯一标识 |
|
销售记录标识 |
XSJLID |
标识(32个字符) |
销售记录标识 |
离散随机值(销售记录.销售记录标识) |
|
商品目录内码 |
SPMLNM |
内码(32个字符) |
商品内码 |
离散随机值(商品目录、商品标识) |
|
销售数量 |
XSSL |
数值(5位整数) |
销售量 |
连续随机值(1, 10) |
|
销售单价 |
XSDJ |
数值(8位数值,2位小数) |
单价 |
根据其他字段计算得出 |
|
销售总价 |
XSZJ |
数值(8位数值,2位小数) |
销售额 |
根据其他字段计算得出 |
4.5. 生成结果
根据以上配置信息,通过模拟数据生成引擎,使用相关参数调用指定的算法模块,生成了模拟数据,加载到目标数据表中,产生的模拟数据如图4、图5、图6、图7所示。
Figure 4. “T_SD” table simulation data
图4. “商店”表的模拟数据
Figure 5. “T_SPML” table simulation data
图5. “商品目录”表模拟数据
Figure 6. “T_SXJL” table simulation data
图6. “销售记录”表模拟数据
Figure 7. “T_SXMX” table simulation data
图7. “销售明细”表模拟数据
5. 结论
军事模拟数据的产生是一项复杂的工程,同时也对军事信息系统的研制、测试具有重要意义[3],随着系统开发的深入,对模拟数据的准备提出了更高的要求。如何研制功能丰富、易于扩展的模拟数据生成算法,并结合具体系统的实际使用需求,简化模拟数据产生算法的配置将成为下一步研究的重点。