APP下载

基于ActiveX的多Agent自主运行仿真系统*

2012-09-05军,李

空间控制技术与应用 2012年6期
关键词:控件消息对象

颜 军,李 勇

(1.北京控制工程研究所,北京100190;2.中国空间技术研究院,北京100094)

基于ActiveX的多Agent自主运行仿真系统*

颜 军1,李 勇2

(1.北京控制工程研究所,北京100190;2.中国空间技术研究院,北京100094)

针对面向分布式航天器系统应用的多Agent自主运行系统仿真的需求,设计了分布式的自主运行仿真系统AgSimu.提出了以ActiveX组件来实现各种类型Agent的方法,以ActiveX容器应用程序实现Agent容器,完成对Agent的建模、配置、管理和通信,可以方便地构建不同结构的分布式多Agent组织,仿真它们的交互与协同工作.通过在Matlab/Simulink的S函数中使用ActiveX控件,实现了多Agent仿真系统与Simulink中的对象模型进行交互,从而可以实现多Agent自主运行系统的闭环控制仿真.

自主运行系统;MAS;仿真系统;ActiveX

随着航天应用领域的不断扩展和对应用系统要求的提高,由多颗结构功能相对简单的卫星构成的分布式卫星系统(DSS,distributed satellite systems)得到了广泛应用.分离模块航天器[1]将这种分布特性扩展到卫星模块,突出特点是多个模块航天器的异构及灵活组织.DSS系统要解决多星之间的协调配合问题,多颗卫星要保持一定的相互空间位置,避免碰撞,在此基础上协同完成工作任务,这就需要实时地对编队进行控制.这样复杂的航天任务对分布的、交互的自主控制提出了迫切的要求,而多Agent技术正是符合这样特点的解决方案.

多Agent系统(MAS,multi-agent system)是由多个相互作用的Agent构成并能够共同完成一定任务的系统.多Agent技术的核心特点是分布、自主以及交互.通过Agent的分散决策,来形成一个对复杂系统的解,完成单个Agent所不能完成的工作.

将Agent技术应用DSS,需要建立与此相适应的多Agent仿真系统,要体现多Agent系统方便构建、灵活组织、分布计算及协同工作的特点.

相关的多Agent系统及仿真研究工作,通用的多Agent仿真平台有Swarm、RePast等[2],主要应用在社会学领域,模拟个体与群体及环境间的交互作用及发展过程.面向航天自主运行的相关研究有美国的Object Agent(OA)系统[3],实现了多Agent的灵活组织,由称为“邮局”(Post Office)的模块来负责Agent的注册管理,提供Agent之间的消息通信,该系统的Agent是具有特定功能的软件,没有规划调度的能力.ASPEN[4]是一个主要面向航天规划调度的软件系统平台,可以进行规划问题的定义和不同规划算法的研究,由于其不是基于多Agent的,因而不具备Agent的分布交互、灵活组织的特点.国内针对编队卫星场景搭建的仿真系统[5],通过多台分布式的计算机对多星进行仿真,通过网络进行通信,实现了分布式的仿真,但针对的是相对特定的场景,不解决规划调度问题.其他一些多Agent系统,其Agent功能及相互间的组织是固定的,Agent起到的是具有一定交互能力的功能模块的作用.

1 面向航天的多Agent自主运行系统及其仿真需求

Agent是软件实体,具有输入和输出,能够与所处环境进行交互作用,与其他Agent进行通信.与一般软件的主要区别在于Agent的主动性和自主性,每个Agent可以主动感知周围的环境,根据自己的知识、经验、利益来决定对外界环境的反应,并主动和其他Agent进行沟通,影响其他Agent的行为.单个Agent的结构可以十分灵活,一般包括感知输入模块、输出模块、通信模块、知识维护模块、数据及线程管理模块、运算决策模块等.

面向航天的多Agent自主运行系统,是以多A-gent技术实现单个航天器内部子系统及多个航天器之间的协同规划和优化,在现有的各子系统的软件硬件的基础之上,实时自主地根据系统状态解决时间和资源约束条件下的规划调度问题,向各子系统提供指令、参数设定值,以减轻地面运行人员的负担,提高系统的实时响应能力.

多Agent自主运行系统由多个规划Agent为骨干构成,规划Agent组织可以分为多层,例如编队级、星级、子系统级规划Agent.子系统级规划Agent与相应的控制子系统的关系是规划Agent建立子系统的规划模型,主要是时间、资源约束关系,以及与其他子系统间的约束关系,根据任务要求规划得出控制子系统在特定时间段的控制方案,通过接口A-gent将控制方案输出给控制子系统来执行.

为了方便对多Agent自主运行系统的研究,仿真系统借鉴常用的仿真软件Matlab/Simulink,一是要象Simulink那样可以方便灵活地对模型系统进行构建和配置,二是要能够与Simulink交互协同地工作,以利用其丰富的模型资源和仿真计算资源.

具体而言多Agent自主运行仿真系统的需求如下:在W indows平台上进行开发,有良好的人机界面;Agent要模块化,具备通用性,方便验证和升级; Agent可以方便地进行配置,多Agent系统可以灵活地配置和组织,可在运行中不断演化;Agent之间可以进行消息通信,实现交互与协调;多个Agent之间可以并行计算;仿真系统可以在不同的计算机上分布存在,通过网络通信进行连接;多Agent系统可以进行包括规划调度在内的协同工作;方便与其他系统进行接口,可与对象模型相连接,实现协同的仿真;面向应用,易于向真实系统转化.

2 多Agent自主运行仿真系统的设计

多Agent仿真系统AgSimu分为Agent容器程序和Agent软件模块两级结构,Agent容器程序称为ApCont(简称Ct),Agent软件模块称为Ag.

ApCont为Ag提供运行的环境,ApCont与Ag的关系类似于Sim link对象模型与各种模型模块之间的关系.ApCont提供可用的Ag类型,可以向Ap-Cont中添加Ag实例,并对这些Ag进行配置.包含了具有特定配置的多个Ag的一个ApCont实例成为一个对象模型,用来仿真一个“个体对象”,个体对象对应实际系统中一个相对独立的子系统,比如多星编队中的一颗卫星.ApCont以配置文件的形式保存个体对象的组成及配置,可以方便地建立、修改和重建各种对象模型.

AgSimu可同时运行多个ApCont,每个ApCont包含多个Ag.ApCont是独立的软件程序,可以并行运行,Ag是ApCont中的独立线程,彼此间也可以并行执行.Ag之间的交互通过消息经由ApCont来实现,消息的地址由ApCont的标识ID和Ag的标识ID这两级ID构成.

Ag有多种类型,AgCmnd负责接收和发送任务命令,AgPlan负责规划,AgComm负责不同ApCont之间的通信及网络结构维护.接口Ag负责与实际执行系统或仿真对象进行接口,输出执行指令,反馈系统状态,可以使系统与不同接口的系统共同工作.运算Ag将一些专业运算封装起来,以函数调用的方式提供给其他Ag,运算结果实时返回.专家Ag提供特定的专家系统,比如特定问题的规划、探测数据的处理等.

各类Ag有通用属性,不同类型的Ag也有各自的专用属性,复杂的配置通过配置文件来实现,Ag可以通过知识文件来获取特定的领域知识.通过配置属性、配置文件、知识文件可以使Ag最大程度的具有通用性和灵活性.

系统为Ag定义角色,以便表明Ag之间的关系.每个Ag可以为与其发生交互的其他Ag定义角色,各种交互关系都定义在角色的基础之上,而通过调整角色与实际Ag的对应关系,就可以很方便地调整Ag之间的交互关系.

构成系统的多个ApCont间建立一个树形的网络,每个ApCont是一个节点,加入系统的ApCont指定其父节点和一个备用父节点,从而加入系统网络,其父节点将其加入子节点列表.系统网络自身不断进行检查和更新,可以不断地有新节点加入,而没有响应的节点被从网络中删除.被删除的节点的子节点连接到备用父节点上,并建立新的备用父节点.

3 多Agent自主运行仿真系统的实现

在Agent之间要实现消息通信和网络通信,用良好的人机界面实现配置和组织,建立与其他系统的接口,适合采用C++语言,这里使用Micorsoft Visual C++(VC)来开发仿真系统AgSimu.

基于“组件”的软件开发技术可以实现模块灵活组织和配置.组件是具有一定功能、相对完整独立、具有标准接口的编译好的软件模块.每个组件可以用不同语言开发,单独升级和更新,开发者只要知道组件的公开接口就可以使用组件进行开发.多个具有不同功能的组件可以根据需要组合在一起,通过简单的编程就可以生成一个应用程序,完成特定的功能.组件对象模型(COM,component object model)技术是Microsoft等在W indows平台上推出的基于组件的技术.

ActiveX控件是COM中较早推出,比较成熟方便的一种.ActiveX控件以ocx文件形式存在,可以被称为“容器”(container)的应用程序作为组件来使用.要使用ActiveX控件,需要使用控件注册程序在W indows注册表中对ActiveX控件进行注册,容器程序可以通过注册表来查找和使用ActiveX控件.ActiveX控件更新时,使用新的ocx文件替代原有的文件,容器程序不需做改动.在容器程序中,ActiveX控件是一个单独的窗口,有用户界面接口,有独立的线程,可以和其他ActiveX控件并行执行.ActiveX控件可以提供用户交互、显示、收发消息、网络通信、读写文件等大部分应用程序的功能.

AgSimu使用ActiveX控件来实现各种类型的Ag,用单文档应用程序实现容器程序ApCont.每一个ApCont程序实例建立一个“个体”的对象模型,包含多个Ag,多个交互的ApCont构成了多Agent系统.

ApCont提供Ag类型菜单来实现向对象模型中添加Ag,Ag菜单中包含可用的Ag类型,这些Ag类型是从ApCont的初始化文件*.ini中获取的.ini文件记录了Ag类型菜单项与ActiveX控件的ID之间的对应关系,这些ActiveX控件已经在注册表中进行了注册,通过其ID即可找到并使用.增加新类型的Ag时,只要将其ocx文件进行注册,并在ini文件中添加相应的项即可.ini文件的路径可以设置,通过ApCont的初始化文件及ActiveX控件的注册、更新,可以灵活地实现Ag类型的管理.

Ag被添加到对象模型中之后,每个Ag有自己的图标,可以显示Ag的信息和状态.Ag做为ActiveX控件可以处理Windows消息、响应鼠标操作、进行相互间的消息传递.使用鼠标点击Ag图标,可以弹出菜单或对话框.仿真命令菜单包含“运行”、“暂停”等仿真命令,控制单个Ag的工作状态;配置属性对话框对Ag进行配置和操作,比如设定各种属性或指定配置文件、指定知识文件的路径和名称等;状态对话框显示Ag运行的数据,如状态和各参数的数值,以及接收和发送的消息等,可以做为 Ag运行的监视窗口,方便仿真试验过程中的观察及记录.图1是ApCont的界面,左上部是两个Ag图标,图标上部的文字表示 Ag的类型,下部的文字显示Ag的名字ID,右上部是Ag的通用属性对话框,左下部是Ag的运行状态对话框,对话框的上部和下部分别是输入和输出的消息记录,中部显示Ag的状态参数.ApCont中的对象模型建立之后,可以使用ApCont菜单中的“运行”、“执行一步”、“暂停”、“停止”等选项进行仿真.

图1 ApCont的用户界面Fig.1 User interface of ApCont

Ag的配置文件和知识文件是使用统一语法描述的普通的文本文件,可以单独更新.AgSimu定义了类似C++语言语法的知识描述语言(AKDL,agent know ledge description language),采用“基于约束”的描述方法.通过预定义的类和函数来实现配置属性定义、各种对象定义、约束关系的定义.通过Ag的知识处理模块,在Ag初始化的时候将配置及知识文件的内容加载到Ag的数据库中,可以完成Ag的快速配置.

为了实现对Ag的管理,ApCont维护一个对象模型中Ag的数据列表,包含每个Ag的配置属性、配置文件及知识文件路径等数据.当Ag的属性设置发生变化时,Ag向ApCont发送消息,ApCont更新Ag列表.ApCont维护的Ag的数据以及ApCont自身的配置信息在ApCont的配置文件*.ctc的中加以保存.当ApCont打开一个ctc文件时,将建立对象模型中的各个Ag,并将各个Ag的配置属性发送给Ag,Ag据此设置属性值,并根据知识文件路径加载知识,这样构成多Agent系统的对象模型的建立、修改、保存、重建都十分的方便.

多个ApCont可以运行在同一台计算机上,也可以在多台联网的计算机上运行多个ApCont构成多Agent系统.ApCont之间通过AgComm进行通信,目前采用TCP/IP协议,同一计算机上的ApCont使用不同的端口,用IP地址加上IP端口号来从物理地址上区分不同的ApCont.使用不同的类型的Ag-Comm可以改换通信的方式.新加入系统的ApCont向系统中其他的ApCont发送自己的信息,每个Ap-Cont维护一个系统中其他ApCont的数据列表,并据此来寻址转发Ag的消息.

Ag之间通过消息数据包进行交互,Ag的消息数据包发送给ApCont,ApCont根据Ag列表和Ap-Cont列表来查找目标转发.除了根据名字ID进行寻址,还可以根据Ag的属性进行寻址,比如可以向具有特定角色的ApCont及Ag发送消息.除了点对点通信,还可以通过AgSimu系统的网络连接进行广播.图2显示了ApCont与Ag的结构关系.

ApCont及Ag的组织是动态的,组织成员之间的关系通过配置属性、配置文件和知识文件来定义. AgSimu系统的组成结构可以在运行过程中发展变化,AgComm负责在新加入系统时向父节点发送连接申请消息,在运行中定时向相邻的ApCont发送网络检查的消息,发现没有响应的节点则调整ApCont间的网络连接.AgSimu系统可以增加及删除Ap-Cont,可以在ApCont中增加或删除Ag,也可以通过改变属性和配置文件来调整角色的对应关系,用来模拟组织关系不断演化的系统.

表1对AgSimu仿真系统和Simulink进行了比较.可见AgSimu系统基本实现了与Simulink类似的建模能力,并且在分布、并行、交互方面要优于Simulink,可以适应多Agent自主运行仿真.

自主运行系统主要的组成部分是AgPlan,AgP-lan是解决时间和资源约束的规划器,AgPlan通过不同的规划知识文件来获取规划知识,具备不同的规划职能.AgPlan的知识文件定义了彼此的约束关系,AgPlan之间通过协商来寻找满足约束条件的解.AgPlan包括两个数据库和3个主要的运算模块.知识库存储领域知识,状态及规划库有多个规划队列和时间线,规划队列保存待处理的规划项,时间线保存规划结果及系统状态.知识处理模块负责处理知识文件,形成和维护知识库.交互协调模块负责处理接收到的各种交互消息数据,进行分类处理后放入状态及规划库,并协调规划和输出.规划模块根据知识对规划队列中的项进行规划,需要其他AgP-lan协调的发出活动协商消息,有待进一步规划的项放入规划队列,完成的项放入时间线,在规划输出的时刻对当前方案进行规划并输出给接口Ag.

表1 AgSimu仿真系统与Simulink的比较Tab.1 Comparison of AgSimu and Simulink

自主运行系统的基本工作过程是,AgCmnd接收任务,发送给目标AgPlan,AgPlan根据规划知识和系统状态求解约束,建立相关活动,安排方案和资源,发送活动协商消息.接收协商的AgPlan根据约束关系,安排方案和资源,给予回复.当任务所涉及的活动在方案和资源上都得到满足,则完成规划,在相应的时间点将方案经接口Ag输出给执行系统.系统接收高级任务命令,根据知识、系统状态进行规划、解决冲突、相互协调、产生各具体组成部分的配置方案,并在执行中根据反馈进行调整,实现自主地规划和执行.因篇幅关系,本文主要介绍仿真系统的设计和实现,规划算法、进程协调、交互协商等内容将另文详细介绍.

4 AgSim u与Sim u link的协同

AgSimu系统可以通过接口Ag与不同系统进行连接,与Matlab仿真系统建立接口可以使用Matlab中的丰富模型和算法,简化仿真实现过程.Matlab编程接口有非COM的方法和基于COM的方法,基于COM的方法接口统一,适合于多种语言,是混合编程的趋势.

Matlab编程可以使用其他语言开发的ActiveX控件,而Simulink中的S函数(S-Function)可进行Matlab语言编程,可见用ActiveX可以实现VC程序与Simulink中的模型进行交互.交互的具体方法是,用VC开发一种ActiveX控件AeM tlb,在目标对象的Simulink模型中使用S函数,在S函数中使用Ae-M tlb,另外一种ActiveX控件AiM tlb在ApCont中负责与AeMtlb接口,通过AiMtlb与AeMtlb的消息通信实现交互,建立起ApCont/Ag与Simulink模型间的消息通信桥梁,这种实现方法见图3.

图3 基于网络的仿真系统Fig.3 Network-based simulation system

接口编程有两点需要注意,一是ApCont中的Ag要和Simulink中的ActiveX进行W indows消息通信,要知道彼此在W indwos中的窗口句柄,所以在进行协同仿真时要对此进行配置.二是VC中的数据类型与Matlab中的数据类型是不相同的,所以在S函数中使用VC编制的ActiveX控件时,VC程序要使用VARIANT数据结构对接口数据进行转换.

AgSimu与Simulink中的对象模型进行交互,还要解决同步问题.Simulink仿真时每个周期调用S函数,同步仿真时,通过S函数中的AeM tlb控件来暂停Simulink的进程,而后等待ApCont中AiMtlb发送的同步消息再继续仿真进程,使 Simulink和ApCont程序保持同步.因为Simulink的仿真运算,是在每个仿真周期各模块依次运行一步,所以一个Simulink模型中第一个AeM tlb负责同步即可.

5 AgSim u仿真系统应用

使用AgSimu参考Pleiades系统[1],对分离模块卫星系统进行了建模和仿真.Pleiades系统分离模块卫星采用模块化结构,除了每颗分离模块卫星都包含的基础平台模块如热控、姿轨控、电源管理等模块外,还有6种功能模块,每颗分离模块卫星包含其中的几种功能模块.

仿真系统由三颗模块卫星和一个地面站4部分组成,每个部分作为一个个体对象由一个ApCont来仿真,同时运行Simulink做为对象模型,总体结构如图3所示,这4个ApCont实例可以分布在不同计算机上.每颗分离模块卫星有一个星级的AgPlan,星簇级的AgPlan可以建立在三颗星其中的一颗上.

分离模块卫星对象模型中针对每个通用平台模块或功能模块以一个AgPlan建立模型,针对相同模块可以使用类似的知识文件,对其中的角色关系和特定属性参数进行设置即可以使用于不同卫星对象中的模块.通过知识文件来建立模块AgPlan、卫星AgPlan、星簇AgPlan间的组织关系及他们的活动间的约束关系.在分离模块卫星对象模型中使用Ag Comm并对其IP端口、上级节点进行配置可以实现ApCont间通信,使用运算Ag实现特定运算、使用AiM tlb实现与Matlab接口,可以用类似Simulink的建模方式方便快速地建立系统的仿真模型.

地面站ApCont中包含AgCmnd和AgComm,AgCmnd提供人机接口,接收命令文件形式的指令并将其发送给目标AgPlan.AgPlan在规划运算过程中调用运算Ag的专业运算能力,比如轨道机动的相关计算,通过与不同ApCont中的AgPlan规划协商,共同完成规划.规划形成的计划方案通过接口AiM tlb,发给Matlab中的AeM tlb,AeM tlb在Simulink的控制回路中实施控制方案,控制对象模型.AgSimu系统可以对从接收指令到输出给Matlab中的控制参数的整个过程进行仿真,可以观察记录过程中的规划方案、执行情况以及Ag间的全部交互消息.

图4给出了一个规划片段的输出,图中上部是AgPlan的规划时间线输出,横轴是时间,纵轴方向的长竖线表示当前时间,图中不同高度的矩形代表不同时间段上的计划方案,图中当前时间左侧是已执行的规划,右侧是已制定出的未来的规划.图的下部显示AgPlan将当前时间的规划输出到Simulink控制回路的记录,图中显示的是配置方案值.这个片段是卫星调整指向并进行拍照,图中分别是卫星姿态模块(上部第一条规划时间线、下部左图)和拍照观测模块(上部第二条规划时间线、下部右图)的规划输出.图中姿态模块在①处是卫星指向改变,②处是保持指向,而拍照模块在②期间的③进行了拍照,这是是按照卫星指向与拍照之间的约束关系进行的规划.

图4 AgSimu及Simulink的输出Fig.4 Output of AgSimu and Simulink

6 结 论

基于ActiveX技术建立了多Agent仿真系统AgSimu,实现了与Matlab/Simulink类似的方便灵活的建模功能.依靠Agent容器和Agent两级组织,实现了Agent组织的管理和消息交互,可以快速建立多种组织形式的分布式的多Agent系统,并针对航天应用场景进行多Agent自主运行仿真.通过在Simulink仿真系统中嵌入ActiveX控件,实现了Simulink与AgSimu系统的同步协同仿真,使针对具体模型的联合仿真系统的搭建十分方便.

在AgSimu仿真系统的基础上,要细化系统的模型及应用场景,完善Ag的知识表示方法,通过仿真对算法及交互过程进行分析研究,改进规划及优化算法.使用嵌入ActiveX接口控件的形式,可以开发AgSimu系统与其他仿真或应用系统的接口,使其应用更加广泛.

[1] LoBosco D M,Camerron G E,Golding R A,et al.ThePleiades fractionated space system architecture and the future of national security space[C].AIAA Space 2008 Conference and Exposition,San Diego,CA,2008

[2] 朱江,伍聪.基于Agent的计算机建模平台的比较研究[J].系统工程学报,2005,20(2):160-166 Zhu J,Wu C.Comparison study of agent-based computer modeling p latforms[J].Journal of Systems Engineering,2005,20(2):160-166

[3] Mueller JB,Brito M.A distributed flight software design for satellite formation flying control[C].Space 2003,Long Beach,CA,2003

[4] Fukunaga A,Rabideau G,Chien S,Yan D.ASPEN:A framework for automated planning and scheduling of spacecraft control and operations[C].International Symposium on AI,Robotics and Automation in Space(i-SAIRAS),Tokyo,Japan,1997

[5] 李新洪,增国强,王兆魁.分布式卫星编队仿真系统[J].计算机仿真,2005,22(12):38-40 Li X H,Zeng G Q,WANG Z K.Simulation system for distributed satellites formation[J].Computer Simulation,2005,22(12):38-40

ActiveX-Based Sim ulation System for M ulti-Agent-Based Autonom ous System

YAN Jun1,LIYong2
(1.Beijing Institute of Control Engineering,Beijing 100190,China; 2.China Academy of Space Technology,Beijing 100094,China)

An ActiveX-based distributed simulation system named AgSimu was proposed in order to satisfy the requirement of Multi-Agent-based autonomous system for distributed spacecraft systems.The COM/ ActiveX Componentwas used to build all kinds of Agent,and ActiveX container was designed to act as A-gent container,build up multi-agent object model and manage the configuration and communication of these agents.Some different architecture of distributed agent systems can be made up and their real-time interaction and coordinated work can be simulated.By using ActiveX in S-function of Matlab/Simulink,the system can cooperate with models in Simulink.Therefore the close-loop simulation include controlled objects can be realized.

autonomous system;MAS;simulation system;ActiveX

TP31

A

1674-1579(2012)06-0035-06

10.3969/j.issn.1674-1579.2012.06.008

颜 军(1973—),男,博士研究生,研究方向为航天器自主运行控制研究;李 勇(1965—),男,研究员,博士生导师,研究方向为航天动力学与控制,自主导航、现代控制理论及其在航天控制中的应用.

*国家高技术研究发展计划(2012AA120601).

2012-05-25

猜你喜欢

控件消息对象
晒晒全国优秀县委书记拟推荐对象
基于.net的用户定义验证控件的应用分析
判断电压表测量对象有妙招
一张图看5G消息
关于.net控件数组的探讨
晚步见道旁花开
攻略对象的心思好难猜
区间对象族的可镇定性分析
基于嵌入式MINIGUI控件子类化技术的深入研究与应用
Spreadsheet控件在Delphi数据库系统中的编程与应用