APP下载

多实例并行机动仿真模型开发

2017-04-28赵长宽杭立杰

导弹与航天运载技术 2017年2期
关键词:面向对象机动实例

何 丽,吴 艳,赵长宽,杭立杰

(1. 北京航天发射技术研究所,北京,100076;2. 东北大学,沈阳,110819)

多实例并行机动仿真模型开发

何 丽1,吴 艳1,赵长宽2,杭立杰1

(1. 北京航天发射技术研究所,北京,100076;2. 东北大学,沈阳,110819)

针对仿真系统中对机动模型的多实例并行需求,提出基于C++和Matlab混合编程的方式进行模型开发。就Matlab Function实现的功能函数在多实例运行过程中将出现的数据混用问题,在分析Matlab数据管理调用方式的基础上,提出基于Map的数据管理方法实现不同对象实例数据,并完成了模型开发。

Matlab;机动模型;多实例;并行仿真

0 引 言

随着武器系统实战化要求的不断提升,开展武器系统作战效能评估的需求日益迫切,需要针对武器系统借助虚拟仿真的手段来评价其作战效能[1~4]。而车辆的机动特性作为武器系统射前生存能力评估的重要内容,需要依托车辆机动仿真模型开展多种战场环境下的效能仿真,作为武器系统作战效能评估的重要支撑[5]。

装备在实际作战过程中并非单车作战,而是多车分散作战,为了迷惑敌人还需配备一定数量的佯动、示假车辆,因此在武器作战效能评估仿真系统的单次仿真中需要多车同时执行多种作战任务,要求机动模型具备单次仿真的多实例运行功能。然而由于机动模型运行过程需要基于大量的数值计算,对外提供姿态、位置、状态等信息数据,对于机动过程中的核心算法采用了专用数值语言的Matlab进行开发。考虑模型的面向对象特性与扩展性,提出了基于C++和Matlab混合编程、采用Map数据管理方法的多实例并行仿真模型开发技术。

1 模型概述

机动模型作为武器运输的支撑平台,承担着武器的运输、打击前的准备等重要任务。根据其在整个战场环境中的使用模式,分析获得与机动模块存在交互的外部系统,如图1所示。

根据车辆作战使用流程,搭建了机动过程的概念模型,并明确了机动过程仿真模型的功能,具体包括:

a)根据想定信息和配置文件对模型的几何属性、质量属性、行驶策略、路径信息和运动参数进行初始化;

b)根据装备在弯道等的通行能力,以行驶时间最小为目标,以车辆能通行为约束条件,进行路径规划;

c)根据概念模型中的行动模型,将装备的行动分解为若干基本行动进行编码,利用基本行动组合成各种指令,通过指令控制机动过程中装备的行为;

d)输出装备的运动信息、姿态信息和状态信息,便于其他模型的集成调用。

2 多实例仿真解决方案

武器作战效能评估仿真系统采用面向对象的编程思想、基于 C++语言环境进行开发,由对象实例维护各自属性与功能。因此机动仿真模型势必也要采用面向对象的方式来满足其与仿真系统的集成使用需求。

2.1 模型开发架构

由于机动模型在实时仿真过程中,需要进行大量的数值运算。而目前常用面向对象的编程语言 C++、C#、Java等对数值运算的支撑力度有限,较为高级的数值运算功能需要耗费大量的时间进行算法开发与功能验证,而Matlab作为采用C语言编写、重点关注数值计算的数学应用软件,在数值运算算法上有明显的优势,且Matlab提供了与C++混合编程的丰富接口[6]。因此在模型开发之初确定了采用 Matlab、C++联合的开发模式,其中Matlab负责实现模型的功能算法以及仿真模型的运算,C++负责实现模型与外部模型、上层框架的交互以及模型功能接口调度。模型开发架构如图2所示。

图2中,接口层与中间转换层在C++中实现,功能执行层在Matlab中实现。接口层采用了面向对象的编程方式,将机动模型作为一个对象类,包含属性与功能函数,可供外部仿真系统调用并实例化为多个对象执行不同的仿真任务;中间转换层将外部仿真系统中接收的模型属性参数、路径、天气等信息传递给Matlab功能执行模块,供仿真解算过程中调用;功能执行层将根据从中间转换层中接收到的信息类别,执行相应的机动与状态转换功能;数据层为机动模型的固有属性配置文件,可按车辆的实际属性信息修改配置文件。

2.2 风险预估

机动模型由仿真运行总线进行调度使用,在仿真系统初始化过程中分配机动模型数量与相关初始属性设定,创建多个实例进行多任务仿真。对于面向对象的 C++在多实例仿真方面不存在调用以及数据管理问题,Matlab自身也有面向对象的编程机制[7],但针对C++与Matlab混合编程模式无法应用Matlab的面向对象特性,因此执行层还应依托功能函数(Function)的方式实现。

在Matlab Function中,为方便数据传递、避免功能函数中形式参数过多而导致参数不易管理,使用了大量的全局变量进行参数传递。Matlab运行机制为每启动一次Matlab实例均会启动一个进程,且各进程中的数据相互隔离,即全局变量在多个进程中是相互独立的,不会存在数据混用的情况。但在单进程、多线程的运行模式下,各线程共用同一个全局变量,在多个实例运行时由于共用全局变量,使得模型在执行相应的机动任务时因无法隔离数据导致模型运行功能不正确。因此基于Matlab采用功能函数的方式在进行多实例并行仿真时的运行效果为:

a)多进程并行仿真(一个进程内运行一个模型实例)时,各模型数据正常,仿真模型正常运行;

b)多线程并行仿真(一个进程中运行多个模型实例)时,将出现模型数据混乱,所有模型数据一致,且运行数据异常。

实际作战效能仿真系统包含了多进程、多线程的运行模式,因此在通过Matlab Function进行机动功能实现时,应重点解决多线程仿真运行过程中的数据隔离存储与调用问题。

2.3 解决方案

利用非面向对象的Function方式实现多实例机动解算功能实现时,借鉴并行仿真时的独有变量概念[8],寻求一种将各仿真实例中的参数进行隔离的方式。Matlab中数据可通过数组、结构体、containers.Map容器等多种方式进行管理。其中containers.Map容器可以将一个复杂的数据结构映射为一个简单的数值或字符串,常用在组织大型数据的场合。Map通过key快速方便地查询相应的值,其中key为唯一标识,当Map中存放了2个key相同的量,则后者会覆盖/替换前者。因此多实例仿真时,可将不同对象使用过程中产生的参数变量存放在容器中,进行隔离维护,需要时取出,从而避免各对象参数混乱的情况。

综合考虑后选择通过 containers.Map管理参数的方式进行多模型并行仿真方案实施。其具体步骤如下:

a)在模型初始化阶段(即对象创建时),建立Map容器,以模型唯一标识ID作为key值,管理该模型对应的全局变量集合;

b)每一个模型对象对应一个总的全局变量集合,通过结构体的形式存储模型运行过程中的所有参数;

c)仿真解算过程中,通过模型ID获取其对应的全局变量结构体,并从中取出需要的参数,参与仿真;

d)仿真解算完成后,更新结构体中被改变参数的信息,并将更新后的全局变量结构体存入Map容器中。

通过ID将各模型对象的属性参数进行隔离,保证了仿真运行过程中数据的独立性,实现过程简单,并且有效解决了内存数据混用问题。Map容器中参数存放代码示例如图3所示。

3 机动模型开发

3.1 功能模块开发

从机动模型与外部系统的交互调用需求分析,将机动模型分为初始化、输入、解算以及输出4大基本功能模块,机动模型主要功能模块及相应的子功能见表1,具体仿真运行时的使用流程如图4所示。

表1 机动模型功能模块及实现方式

续表1

3.2 实施效果

车辆机动仿真模型能够模拟多种车辆在不同机动任务下的技术性能参数,具备随机路径规划功能,提供实时平台姿态、速度和通行情况等模型输出。将多实例并行机动仿真模型加载至武器作战效能仿真系统中进行集成测试,测试结果表明机动模型功能性能正常,并能有效地管理实例对象的独有数据,实现了不同对象执行不同机动任务的需求。机动模型运行可视化效果如图5所示,单车机动曲线如图6所示。

4 结束语

本文针对武器系统作战使用过程中的多实例并行仿真需求,利用C++与Matlab混合编程的方式,采用面向对象的编程思想构建了多实例并行机动仿真模型,提供不同任务剖面下车辆运动姿态、位置、状态等信息,实现不同行驶策略、环境条件下车辆机动过程战术技术性能分析,为分析车辆的生存能力提供必要的基础性数据。

[1] 陈景亮, 朱一凡, 等. 导弹攻防对抗作战效能仿真分析方法论[J]. 国防科技大学学报, 1999(1): 20-24.

[2] 邢清华, 刘付显. 攻防对抗系统建模与仿真[J]. 计算机仿真, 2002, 19(5) : 12-14.

[3] 罗鹏程, 傅攀峰, 周经伦. 武器装备体系作战能力评估框架[J]. 系统工程与电子技术, 2005, 27(1): 1072-1075.

[4] 张亮, 赵振南, 王利, 等. 基于体系作战效能的武器装备体系评估[J].四川兵工学报, 2015, 34(3): 50-58.

[5] 斗计华. 舰空导弹武器系统攻防对抗作战效能仿真研究[J]. 弹箭与制导学报, 2007(1): 290-293.

[6] 刘维. 精通Matlab与C/C++混合程序设计[M]. 北京: 北京航空航天大学出版社, 2008.

[7] 苗志宏, 马金强. MATLAB面向对象程序设计[M]. 北京: 电子工业出版社, 2014.

[8] 刘维. 实战MATLAB之并行程序设计[M]. 北京: 北京航空航天大学出版社, 2011.

Development of Parallel Multi-instance Mobile Model

He Li1, Wu Yan1, Zhao Chang-kuan2, Hang Li-jie1
(1. Beijing Institute of Space Launch Techology, Beijing, 100076; 2. Northeastern University, Shenyang, 110819)

Tomeet the objectives of parallel multi-instance model in simulation system C++ and Matlab hybrid programming to bulid mobile model is proposed. The problem of data confusion that appears in the model runs multiple instances which mobile based on Matlab Function is analysised. This paper suggests a way of Map-based approach to data management in function run.

Matlab; Mobile model; Multi-instance; Parallel simulation

V553.1

A

1004-7182(2017)02-0076-04

10.7654/j.issn.1004-7182.20170217

2016-09-26;

2016-11-30

何 丽(1984-),女,工程师,主要从事复杂系统仿真分析与虚拟试验方向的研究

猜你喜欢

面向对象机动实例
GEE平台下利用物候特征进行面向对象的水稻种植分布提取
基于深度学习与融合地形特征的黄土陷穴面向对象提取方法
基于机动数据的摩托化机动演训组织效果评估
12万亩机动地不再“流浪”
面向对象方法在水蓄冷PLC编程中应用分析
机动三轮车的昨天、今天和明天
从面向过程到面向对象思维方式的教学引导
完形填空Ⅱ
完形填空Ⅰ