基于多线程的并行离散仿真事件驱动方法及装置与流程

文档序号:20778642发布日期:2020-05-19 21:01阅读:334来源:国知局
基于多线程的并行离散仿真事件驱动方法及装置与流程

本发明涉及仿真技术领域,尤其涉及基于多线程的并行离散仿真事件驱动方法及装置。



背景技术:

目前,随机计算机仿真技术自诞生,仿真技术受到了世界各国的广泛关注和高度重视,然而现在的仿真性能并不佳,尤其是当仿真模型较多或者实体模型过于复杂、计算量过大时,仿真速度不能满足要求。



技术实现要素:

本发明实施例提供了基于多线程的并行离散仿真事件驱动方法及装置。

所述技术方案如下:

根据本发明实施例的第一方面,提供一种基于多线程的并行离散仿真事件驱动方法,包括:

接收生成的多个仿真事件,其中,所述多个仿真事件用于供仿真平台上的实体模型执行仿真操作;

调用多个仿真线程;

通过所述多个仿真线程并行处理所述多个仿真事件,以对所述仿真平台上的实体模型进行并行仿真,其中,所述多个仿真线程中的各仿真线程用于处理所述多个仿真事件中的至少一个仿真事件,所述实体模型可被分解成若干组件,所述多个仿真事件为针对所述若干组件的事件。

在一个实施例中,所述方法还包括:

确定所述仿真平台所安装的设备的当前cpu内核数量;

调用cpu内核数量与仿真线程之间的预设对应关系;

根据所述当前cpu内核数量和所述预设对应关系,确定所述多个仿真线程的数量。

在一个实施例中,所述方法还包括:

将所述多个仿真事件提交至事件缓冲池中;

所述通过所述多个仿真线程并行处理所述多个仿真事件,包括:

通过所述多个仿真线程从所述事件缓冲池中依次交替调取事件,从而并行处理所述多个仿真事件。

在一个实施例中,所述通过所述多个仿真线程并行处理所述多个仿真事件,包括:

通过所述多个仿真线程确定所述多个仿真事件中各仿真事件对应的实体模型;

通过所述多个仿真线程同时调用所述各仿真事件对应的实体模型各自的事件处理函数;

通过所述多个仿真线程同时控制所述各仿真事件对应的实体模型响应各自的事件处理函数,以使所述各仿真事件对应的实体模型执行相应的仿真操作,驱动所述仿真平台的仿真过程。

在一个实施例中,当所述多个仿真事件的数量n1大于所述多个仿真线程的数量n2时,

所述通过所述多个仿真线程同时调用所述各仿真事件对应的实体模型各自的事件处理函数,包括:

通过所述多个仿真线程中各仿真线程同时调用所述各仿真事件对应的实体模型中的一个实体模型的事件处理函数;

所述方法还包括:

当所述各仿真线程中任一仿真线程控制所述一个实体模型响应完其事件处理函数后,所述任一仿真线程调用(n2-n1)个事件处理函数中的一个目标事件处理函数,并控制所述目标事件处理函数的实体模型响应所述目标事件处理函数,并不断循环,直至所述多个仿真线程并行处理完所述多个仿真事件,其中,所述多个仿真事件中各仿真事件都携带有处理时间,所述目标事件处理函数为所述(n2-n1)个仿真事件中处理时间最早的仿真事件对应的实体模型的事件处理函数。

在一个实施例中,所述接收生成的多个仿真事件,包括:

接收基于外部仿真指令而生成的仿真事件;和/或

接收基于实体模型反馈的仿真状态而生成的仿真事件。

在一个实施例中,所述方法还包括:

通过所述多个仿真线程确定所述实体模型的仿真状态,生成所述实体模型的当前仿真记录;

调用预先获取的所述实体模型对应的真实的被仿真对象在实际运行环境下的预设状态记录;

根据所述当前仿真记录和所述预设状态记录,生成至少一个实体模型仿真运行指令;

将所述至少一个实体模型仿真运行指令发送至所述实体模型,以控制所述实体模型的仿真过程或者调节所述实体模型的模型参数。

在一个实施例中,所述方法还包括:

采用通用建模工具对所述实体模型对应的真实的被仿真对象进行数学模型搭建,得到简易仿真模型;

采用专业建模工具对所述被仿真对象进行数学模型搭建,得到精细仿真模型;

以所述精细仿真模型为衡量标准,对所述简易仿真模型的模型结构和模型参数做初步验证,并对不符合第一预设要求的模型结构和模型参数进行修正;

利用所述被仿真对象的第一组实验数据对初步验证修正后的简易仿真模型做再次验证,并对所述修正后的简易仿真模型的模型参数做再次修正,直至在相同的输入下修正后的简易仿真模型的输出数据与所述被仿真对象对应的输出数据的一致性衡量指标满足预设接受值,获得根据所述第一组实验数据得到的简易仿真模型;

利用所述被仿真对象的第二组实验数据作为所述第一组实验数据得到的简易仿真模型的输入,经过所述简易仿真模型的仿真计算,得到所述第二组实验数据对应的输出数据;

计算所述第二组实验数据对应的输出数据与所述被仿真对象对应的输出数据的一致性衡量指标;

判断所述第二组实验数据的一致性衡量指标是否满足所述预设接受值;

如果是,则将所述第二组实验数据得到的简易仿真模型作为所述被仿真对象的实体模型。

在一个实施例中,所述第一组实验数据和所述第二组实验数据包括多次实验数据;

设所述多次实验数据中的第k次实验数据中i维度下的数据量占比为ri,第k-1次实验中i维度下的数据量占比为ri’,第k次实验数据中i维度下数据量绝对值为ri,第k-1次实验数据中i维度下数据量绝对值为ri’,其中i=1,2,3…n,则i维度的影响为

ei=ri(1-ri)-r′i(1-r′i)

各维度总的影响为

i维度总的影响因子为

相应的,当将i维度进行扩展,则所述i维度的各因素的影响为

eij=rij(1-rij)-r′ij(1-r′ij)

所述各维度总的影响为

各因素总的影响因子为

其中j为i维度的细分,j=1,2,3…m;

根据计算获得的pi的值的大小,确定对所述简易仿真模型的仿真实验影响最大的维度,同时根据pij的值的大小确定所述影响最大的维度下对所述仿真实验影响最大的影响因子。

当然很多情况下第一组实验数据和第二组实验数据得到的仿真实验结果可能不同,为了能确定在不同组实验数据中引起结果不同的原因,从而更快的调整实验数据,通过更少的仿真次数,获得最好的结果,需要对每次实验数据进行结果分析。

根据计算获得的pi的值大小可以确定影响各次仿真实验不同的主要因素是哪个维度,同时根据pij的值得大小可以确定各维度下哪些因子对实验结果的影响最大,从而达到快速定位原因,调整仿真实验、维度或影响因子的目的,从而减少仿真实验次数,节省计算资源。

根据本发明实施例的第二方面,提供一种基于多线程的并行离散仿真事件驱动装置,包括:

接收模块,用于接收生成的多个仿真事件,其中,所述多个仿真事件用于供仿真平台上的实体模型执行仿真操作;

调用模块,用于调用多个仿真线程;

处理模块,用于通过所述多个仿真线程并行处理所述多个仿真事件,以对所述仿真平台上的实体模型进行并行仿真,其中,所述多个仿真线程中的各仿真线程用于处理所述多个仿真事件中的至少一个仿真事件,所述实体模型可被分解成若干组件,所述多个仿真事件为针对所述若干组件的事件。

本发明的实施例提供的技术方案可以包括以下有益效果:

在接收多个仿真事件后,通过调用多个仿真线程,可利用多个仿真线程并行处理多个仿真事件,从而利用多线程提高仿真平台上实体模型的仿真处理进度/仿真速度,进而有利于提高仿真平台的仿真效率。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。

图1是根据一示例性实施例示出的一种基于多线程的并行离散仿真事件驱动方法的流程图。

图2是根据一示例性实施例示出的一种基于多线程的并行离散仿真事件驱动装置的框图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。

为了解决上述技术问题,本发明实施例提供了一种基于多线程的并行离散仿真事件驱动方法,该方法可用于基于多线程的并行仿真程序、系统或装置中,且该方法对应的执行主体可以是终端或服务器,如图1所示,该方法包括步骤s101至步骤s103:

在步骤s101中,接收生成的多个仿真事件,其中,所述多个仿真事件用于供仿真平台上的实体模型执行仿真操作;

在步骤s102中,调用多个仿真线程;

在步骤s103中,通过所述多个仿真线程并行处理所述多个仿真事件,以对所述仿真平台上的实体模型进行并行仿真,其中,所述多个仿真线程中的各仿真线程用于处理所述多个仿真事件中的至少一个仿真事件,所述实体模型可被分解成若干组件,所述多个仿真事件为针对所述若干组件的事件,例如:可将作战实体模型分解为实体、平台(机动)、数据处理、雷达、通信、行为模型等组件,分配给不同专业的开发人员,提高模型的精细程度;针对组件的加载、组件间的通信、控制,引擎在底层实现了全面封装,做到了对模型开发用户的完全透明,用户只需调用对应组件的指针直接使用即可,降低模型开发难度,降低模型开发和移植成本。

在接收多个仿真事件后,通过调用多个仿真线程,可利用多个仿真线程并行处理多个仿真事件,从而利用多线程提高仿真平台上实体模型的仿真处理进度/仿真速度,进而有利于提高仿真平台的仿真效率。

在一个实施例中,所述方法还包括:

确定所述仿真平台所安装的设备的当前cpu内核数量;cpu即centralprocessingunit,中央处理器。

调用cpu内核数量与仿真线程之间的预设对应关系;

根据所述当前cpu内核数量和所述预设对应关系,确定所述多个仿真线程的数量。

通过确定仿真平台所安装的设备的当前cpu内核数量,可基于上述预设对应关系和当前cpu内核数量,准确确定需要开启多少个仿真线程,从而利用多个仿真线程实现并行仿真,以提高仿真事件的处理效率/速率,进而提高仿真平台的仿真效率,也能够充分发挥目前主流计算机的多核优势。

在一个实施例中,所述方法还包括:

将所述多个仿真事件提交至事件缓冲池中;

通过设置事件缓冲池可对多个仿真事件进行缓存,另外,通过设置该事件缓冲池多个线程在执行事件时并不需要等待,(在windows系统下,系统最低等待时间为10-15毫秒),这有利于进一步将仿真运行效率发挥到极致。

所述通过所述多个仿真线程并行处理所述多个仿真事件,包括:

通过所述多个仿真线程从所述事件缓冲池中依次交替调取事件,从而并行处理所述多个仿真事件。

通过多个仿真线程交替调取事件,可并行处理多个仿真事件,以提高仿真平台的仿真效率。

在一个实施例中,所述通过所述多个仿真线程并行处理所述多个仿真事件,包括:

通过所述多个仿真线程确定所述多个仿真事件中各仿真事件对应的实体模型;

通过所述多个仿真线程同时调用所述各仿真事件对应的实体模型各自的事件处理函数;

通过所述多个仿真线程同时控制所述各仿真事件对应的实体模型响应各自的事件处理函数,以使所述各仿真事件对应的实体模型执行相应的仿真操作,驱动所述仿真平台的仿真过程。

通过多个仿真线程同时调用所述各仿真事件对应的实体模型各自的事件处理函数,可同时控制各仿真事件对应的实体模型响应各自的事件处理函数,从而使得仿真事件能够得到并行处理,进而有利于提高仿真平台的仿真效率。

在一个实施例中,当所述多个仿真事件的数量n1大于所述多个仿真线程的数量n2时,

所述通过所述多个仿真线程同时调用所述各仿真事件对应的实体模型各自的事件处理函数,包括:

通过所述多个仿真线程中各仿真线程同时调用所述各仿真事件对应的实体模型中的一个实体模型的事件处理函数;a仿真事件对应的实体模型即需要响应a仿真事件的实体模型b。

另外,若a仿真事件对应的实体模型为b实体模型,则a仿真事件对应的b实体模型的事件处理函数即b实体模型对a仿真事件的响应处理函数。

所述方法还包括:

当所述各仿真线程中任一仿真线程控制所述一个实体模型响应完其事件处理函数后,所述任一仿真线程调用(n2-n1)个事件处理函数中的一个目标事件处理函数,并控制所述目标事件处理函数的实体模型响应所述目标事件处理函数,并不断循环,直至所述多个仿真线程并行处理完所述多个仿真事件,其中,所述多个仿真事件中各仿真事件都携带有处理时间,所述目标事件处理函数为所述(n2-n1)个仿真事件中处理时间最早的仿真事件对应的实体模型的事件处理函数,上述(n2-n1)个事件处理函数为n1个仿真事件中尚未被处理的仿真事件对应的实体模型的事件处理函数。

通过本实施例的技术方案可利用多个仿真线程并行调用事件处理函数,从而实现并行仿真,以提高仿真事件的处理效率/速率,进而提高仿真平台的仿真效率,也能够充分发挥目前主流计算机的多核优势。

在一个实施例中,所述接收生成的多个仿真事件,包括:

接收基于外部仿真指令而生成的仿真事件;和/或

接收基于实体模型反馈的仿真状态而生成的仿真事件。

接收的仿真事件可能来自外部仿真指令如仿真人员通过键盘等外部连接设备输入的仿真指令或者输入的某操作而生成的仿真指令。和/或

接收的仿真事件还可以是实体模型反馈的仿真状态而生成的仿真事件,从而便于推动实体模型进行下一步仿真操作,其中,实体模型可以是实物在仿真平台中的虚拟对象表示,如飞机模型、卫星模型、车辆模型等,而仿真状态可以是实体模型在某时刻的状态,如车辆模型在某时刻的位置、行驶方向等,飞机模型在某时刻的飞行姿态等。

在一个实施例中,所述方法还包括:

通过所述多个仿真线程确定所述实体模型的仿真状态,生成所述实体模型的当前仿真记录;

调用预先获取的所述实体模型对应的真实的被仿真对象在实际运行环境下的预设状态记录;

实体模型对应的真实的被仿真对象即实体模型对应的实物,如实体模型为飞机模型,则对应的被仿真对象即为飞机。

根据所述当前仿真记录和所述预设状态记录,生成至少一个实体模型仿真运行指令;

将所述至少一个实体模型仿真运行指令发送至所述实体模型,以控制所述实体模型的仿真过程或者调节所述实体模型的模型参数。

通过多个仿真线程确定所述实体模型的仿真状态并调用上述预设状态记录,可根据当前仿真记录和所述预设状态记录(如进行记录比较),生成一个或多个实体模型仿真运行指令,然后将至少一个实体模型仿真运行指令发送至所述实体模型,以便于自动控制所述实体模型的仿真过程或者自动调节所述实体模型的模型参数,以提高仿真效率和准确率,使得仿真效果尽可能贴近仿真模型对应的被仿真对象在真实的运行环境运行情况,或者使得实体模型更加准确。

一个实施例中,所述方法还包括:

采用通用建模工具对所述实体模型对应的真实的被仿真对象进行数学模型搭建,得到简易仿真模型;

通用建模工具的作用为:既能够方便快捷地实现对被仿真对象的原理性建模,又能够支持模型自动代码的生成,从而可以将简易仿真模型下载到通用实时仿真计算机进行实时仿真,通过实时仿真计算机运行解算简易仿真模型,实现与外界相关实物设备的数据交互,发挥简易仿真模型的实际作用。

其中,通过对被仿真对象的工作原理分析实现对通用建模工具的合理选择,从而简易仿真模型到实时仿真模型的快速过渡问题,使模型的验证过程都集中在对简易仿真模型的验证过程。

采用专业建模工具对所述被仿真对象进行数学模型搭建,得到精细仿真模型;

随着数字仿真对仿真模型的精确度要求越来越高,借助各专业建模工具,可以实现较为准确的物理对象建模,例如,利用solidworks来实现机械系统的建模、利用amesim来实现液压系统的建模等。

专业建模工具的特点是对被仿真对象进行精细建模,通过有限元计算、高阶微分方程组解算等,实现对被仿真对象的复杂精细计算。专业建模工具能够对被仿真对象进行全面的、细微特性的模拟解算,因此可以选择专业建模工具进行精细仿真模型。

以所述精细仿真模型为衡量标准,对所述简易仿真模型的模型结构和模型参数做初步验证,并对不符合第一预设要求的模型结构和模型参数进行修正;

第一预设要求为两个数字仿真模型一致的判定准则,可以包括:变化范围一致、变化趋势一致、在线性段斜率一致、若有非线性(如弧线)则拐点位置一致等。

利用所述被仿真对象的第一组实验数据对初步验证修正后的简易仿真模型做再次验证,并(通过预设验证方法)对所述修正后的简易仿真模型的模型参数做再次修正,直至在相同的输入下修正后的简易仿真模型的输出数据与所述被仿真对象对应的输出数据的一致性衡量指标满足预设接受值,获得根据所述第一组实验数据得到的简易仿真模型;

利用所述被仿真对象的第二组实验数据作为所述第一组实验数据得到的简易仿真模型的输入,经过所述简易仿真模型的仿真计算,得到所述第二组实验数据对应的输出数据;

预设验证方法可以是秩和检验法、动态关联分析法、数理统计法等。

预设接受值指的是两个数据结果一致程度量化指标,例如若1为完全一致,0为完全不一致,则预设接受值可以为0.75。

计算所述第二组实验数据对应的输出数据与所述被仿真对象对应的输出数据的一致性衡量指标;

判断所述第二组实验数据的一致性衡量指标是否满足所述预设接受值;

如果是,则将所述第二组实验数据得到的简易仿真模型作为所述被仿真对象的实体模型。

通过将模型验证方法和模型参数优化方法集成以实现对数字仿真模型(即简易仿真模型)的自动修正,相比通过建模人员对数字仿真模型修正而言,可减少人工修改模型的工作量,提高了对数字仿真模型的修正效率,以及获得的被仿真对象的实体模型的准确性。

在一个实施例中,所述第一组实验数据和所述第二组实验数据包括多次实验数据;第一组实验数据中可以包括若干次实验数据,第二组实验数据中可以包括若干次实验数据,这样,第一组实验数据和所述第二组实验数据包括多次实验数据。

每次实验数据可以包括多个维度,而每个维度下又可以包括多个影响因子。

设所述多次实验数据中的第k次实验数据中i维度下的数据量占比为ri,第k-1次实验数据中i维度下的数据量占比为ri’,第k次实验数据中i维度下数据量(i维度下数据量可以是i维度下具体的数据条数)绝对值为ri,第k-1次实验数据中i维度下数据量绝对值为ri’,其中i=1,2,3…n,则i维度的影响为

ei=ri(1-ri)-r′i(1-r′i)

各维度总的影响为

i维度总的影响因子为

相应的,当将i维度进行扩展,则所述i维度的各因素的影响为

eij=rij(1-rij)-r′ij(1-r′ij)

所述各维度总的影响为

各因素总的影响因子为

其中j为i维度的细分,j=1,2,3…m;

根据计算获得的pi的值的大小,确定对所述简易仿真模型的仿真实验影响最大的维度,同时根据pij的值的大小确定所述影响最大的维度下对所述仿真实验影响最大的影响因子。

当然很多情况下第一组实验数据和第二组实验数据得到的仿真实验结果可能不同,为了能确定在不同组实验数据中引起结果不同的原因,从而更快的调整实验数据,通过更少的仿真次数,获得最好的结果,需要对每次实验数据进行结果分析。

根据计算获得的pi的值大小可以确定影响各次仿真实验不同的主要因素是哪个维度,同时根据pij的值得大小可以确定各维度下哪些因子对实验结果的影响最大,从而达到快速定位原因,调整仿真实验、维度或影响因子的目的,从而减少仿真实验次数,节省计算资源。

最后,需要明确的是:本领域技术人员可根据实际需求,将上述多个实施例进行自由组合。

对应本发明实施例提供的上述基于多线程的并行离散仿真事件驱动方法,本发明实施例还提供一种基于多线程的并行离散仿真事件驱动装置,如图2所示,该装置包括:

接收模块201,用于接收生成的多个仿真事件,其中,所述多个仿真事件用于供仿真平台上的实体模型执行仿真操作;

调用模块202,用于调用多个仿真线程;

处理模块203,用于通过所述多个仿真线程并行处理所述多个仿真事件,以对所述仿真平台上的实体模型进行并行仿真,其中,所述多个仿真线程中的各仿真线程用于处理所述多个仿真事件中的至少一个仿真事件,所述实体模型可被分解成若干组件,所述多个仿真事件为针对所述若干组件的事件。

本领域技术人员在考虑说明书及实践这里发明的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未发明的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。

应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1