综合论文训练任务书

jrzj com  时间:2021-02-16  阅读:()

姓名毛雁华学号981384班号计84系别计算机系同组姓名指导教师史元春一、课题名称:SmartPlatform的测试与改进TheEvaluationandAmeliorationofSmartPlatform二、设计(论文)要求(包括主要指标):三、设计(论文)的原始数据及依据:四、设计报告(论文)应包括的内容:五、参考文献:教学负责人签字年月日(此任务书装订时放在综合论文训练报告第一页)清华大学毕业设计论文SmartPlatform的测试与改进TheEvaluationandAmeliorationofSmartPlatformI清华大学毕业设计论文摘要虽然由于研究的对象的不同,不同的"智能空间"计划研究的侧重点和使用的技术都有所不同,但它们都具有共同的特点:利用软件平台提供的服务,有效的融合物理环境中的分布式的软件和硬件模块;基于多模态的感知技术以及上下文相关的计算,提供自然的人机交互界面和智能的服务,并最终完成特定的应用.
本文工作的对象是清华大学人机交互与媒体集成研究所为正在进行中的"智能教室"计划开发的"智能空间的软件平台"——SmartPlatform.
作者参与了SmartPlatform的开发以及维护工作.
在这些工作的基础上总结了SmartPlatform的作为"智能空间的软件平台"的优势和目前还存在的问题.
针对现有的问题,作者从软件平台的易用性,稳定性以及功能等几个方面出发为SmartPlatform做了相应的改进.
与此同时还为SmartPlatform的线上协议提出了改造的建议.
最后,作者还通过实验对SmartPlatform和SRI的OAA(OpenAgentArchitecture)进行了性能的测试和评价.
关键词:智能教室,智能空间,软件平台,普适计算,SmartPlatformII清华大学毕业设计论文AbstractAlthoughdifferent"SmartSpace"projectshavedifferentemphaseswithdifferenttechnologiesfortheirdifferentstudyobjects,oneworkalltheymustdoistotakeuseoftheservicesprovidedbysoftwareplatformsoastoeffectivelyconnect,coordinateandmanagenumbersofdistributedsoftwareandhardwaremodulesandintegratethemintoaphysicalenvironmentwithnaturalhumancomputerinterfacesandintelligentservicefacilitiesforsomespecificapplicationsbasedonmulti-modalandperceptualtechnologyaswellascontext-awarenesscomputing.
ThisthesisisaboutSmartPlatform—aSoftwareInfrastructureforSmartSpacedevelopedbytheInstituteofHumanComputerInteractionandMediaIntegrationofTsinghuaUniversitytosupportthecarriedonSmartClassroomProject.
TheauthorparticipatedinthedevelopmentandmaintenanceofSmartPlatform,thensummarizedtheadvantagesanddeficienciesofSmartPlatformasaSoftwareInfrastructureforSmartSpace.
Accordingtothosedeficiencies,theauthorextendeditsfunctionalityandmadeimprovementonitsusabilityaswellasstability.
Asuggestionwasalsogiventorecastthewired-protocolofSmartPlatform.
Finally,theauthoralsoconductedanexperimenttoevaluatetheperformanceofSmartPlatformandmakesacomparisonwithOAA(OpenAgentArchitecture)fromSRI.
Keywords:SmartClassroom,SmartSpace,softwareplatform,UbiquitousComputing,SmartPlatformIII清华大学毕业设计论文目录SMARTPLATFORM的测试与改进I摘要II目录IV第一章绪论11.
1智能空间11.
2智能空间与分布式计算21.
3软件平台的作用31.
4智能教室与智能平台51.
5本文的内容6第二章智能空间的软件平台72.
1OAA72.
2Metaglue82.
3小结10第三章SMARTPLATFORM113.
1SmartPlatform的体系结构和功能概述113.
1.
1体系结构113.
1.
2SmartPlatform的Agent的编程模型133.
2SmartPlatform的优点153.
1.
1动态发现、加入153.
1.
2"端到端"与"中心转发"的通讯结合173.
1.
3软件模块见的依赖关系的自动管理和维护183.
1.
4代码的自动加载/卸载20IV清华大学毕业设计论文3.
1.
5XML作为Agent间通讯语言········203.
3SmartPlatform现阶段存在的缺陷213.
1.
1底层通讯采用MFC的CSocket实现213.
1.
2"端到端"的通讯模式没有实现223.
1.
3线上协议采用基于XML与基于二进制的混合描述223.
1.
4可用性需要进一步提高233.
1.
5同步与异步调用混合的编程模型233.
4小结23第四章SMARTPLATFORM与OAA的性能测试与对比254.
1实验方案254.
2实验结果264.
3分析与小结27第五章提高SMARTPLATFORM的易用性285.
1为开发人员提供开发参考(Reference)以及开发指南(Tutorial)285.
2Agent框架代码的自动生成295.
2.
1CustomAppWizard的使用介绍305.
2.
2SmartPlatformAgentWizard中自定义的宏变量315.
2.
3Agent框架代码的生成315.
3为SmartPlatform提供标准安装程序325.
3.
1安装程序所完成的系统配置工作325.
3.
2安装程序完成后的目录结构335.
4为MonitorAgent增加新的功能345.
5小结34第六章提高SMARTPLATFORM的稳定性356.
1同步和异步调用35V清华大学毕业设计论文6.
2用CAsyncSocket代替现有的CSocket来实现底层的通讯356.
1小结38第七章为SMARTPLATFORM添加"端到端"的通讯模式407.
1概述407.
2RTP407.
3IPMulticast417.
4实现方案437.
5小结44第八章线上协议的改造45第九章总结与展望469.
1本论文的工作469.
2未来的工作47参考文献49致谢51SURVEYREPORT52VI清华大学毕业设计论文第一章绪论本论文工作的内容是对智能空间的软件平台——SmartPlatform进行性能及可用性测试及评价.
通过测试和评价的结果改进SmartPlatform或为将来进一步改善提供方案.
1.
1智能空间1991年,美国Xerox公司的MarkWeiser在他著名的论文《TheComputerforthe21stCentury》[1]中,首次预言了"普适计算"(UbiquitousComputing)时代的到来.
近年来"普适的计算"的概念逐步受到学术界以及工业界的重视与认同.

所谓"普适的计算"实际上提供了一种新的人机交互的模式.
与传统的"桌面计算"模式不同,在"普适计算"模式下,人不再被局限在计算机面前,使用鼠标,键盘,显示器来完成与计算机的交互.
而是通过人更习惯的方式,如语音,手势等来完成与计算机的交互.
同时这种计算模式通常具有的"侍服式"的特点,也就是说用户并不一定需要刻意的去使用各种计算设备,计算设备会主动的为用户提供计算服务,并且用一种人习惯的方式将计算的结果反馈给用户.
在这样的计算环境下,用户可以远离计算机,把更多的精力放在他们所需要完成的任务上,而不是与计算机的交互上.
(有一种说法是:计算机的作用与计算机与人的距离成反比)在人们解决"普适计算"的提出的问题的过程中,"智能空间"[10][11](SmartSpace,在有的文献中还有类似的概念,如:智能环境——IntelligentEnvironment,交互空间——InteractiveSpace)的概念应运而生.
总的来说,"智能空间"是一个由计算机增强了的物理环境.
在这个环境里,人与计算交互的接口从传统的键盘,鼠标以及显示器等,延伸到了整个环境.
计算机通过计算机视觉,计算机语音等第1页清华大学毕业设计论文技术来感知和识别用户在环境中的行为,同时根据当前环境下的上下文信息进行计算,并将计算的结果通过语音,视频等多模态的接口自然的反馈给用户.

许多学术界以及工业界的研究机构都有自己的"智能空间"研究计划,在这个方面比较著名的有:MIT的人工智能实验室的IntelligentRoom[2]计划,MIT媒体实验室的SmartRooms[3]计划、KidsRoom[4]计划,Stanford大学的InteractiveWorkspaces计划[5][6],Gatech大学的AwareHome计划[7],IBM公司的DreamSpace计划[8],Microsoft公司的EasyLiving计划[9]等等.
1.
2智能空间与分布式计算为了解决"普适的计算"所提出的问题,"智能空间"通常会依赖于多模态的用户接口.
然而,使用这些多模态的感知与识别技术的同时也给"智能空间"本身提出了如何有效的使这些软硬件模块融合在一起互相协作的问题.
这实质上是一个分布式计算与协作的问题.
首先,受现有计算设备的计算能力的限制,"智能空间"需要分布式计算.
一个识别或者感知模块都很有可能会耗尽现有的一台微机的绝大多数可用的计算资源.
即使随着时间的推移,计算设备的计算能力会不断提高,但是这些感知模块同样会想方设法加以利用,从而得到更高的识别的精度.
其次,受到物理空间的限制,"智能空间"需要分布式计算.
在"智能空间"里计算机通常需要使用摄像头或者麦克风采集到的数据作为输入,很难想象把物理上远离的各个软硬件模块集成到同一台计算设备中去,会是一个好的解决方案.
最后,各个软硬件模块的通常是由不同人或者团队开发的,他们采用的开发语言,甚至开发平台都可能不尽相同.
在这些模块开发时可能根本就没有考虑到如何与其他模块的协作.
为了使这些模块能够协同工作,我们不得不采用分布式计算的方式.
综合以上几点可以看到,在"智能空间"里需要采用分布式计算的模式.
如第2页清华大学毕业设计论文何利用现有的计算机网络,使的各个软硬件模块能有效的协作,将是"智能空间"中的分布式计算所需要解决的一个重要问题.
1.
3软件平台的作用智能空间的分布式计算应用给人们提出了难题,而智能空间的软件平台(SoftwareInfrastructureofSmartSpace或缩写为SISS)则是解决这一难题的有效工具.
总的来说,智能空间的软件平台是介于计算机操作系统与上层应用之间的中间件,如何充分利用计算机系统与计算机网络的资源,使得上层的软件模块能够有效的协同工作,则是软件平台所需要解决的重要问题.
同时,智能空间本身的特点也决定了智能空间的软件平台所需要具有功能与特点.
下面罗列了这些功能与特点.
模块连接尽管各个智能空间的研究重点会有所不同,它们所使用的识别与感知技术也可能不尽相同.
但是它们不可避免的要遇到各软硬件模块如何协作的问题.
比如说,在一个智能房间的门口可能会有一个视觉模块负责识别走入房间的人的身份,而房间里的其他模块则很可能需要根据位于房间内的用户的身份来提供个性化的服务.
那么这个视觉模块应该通过怎样的方式通知其他的软件模块再比如,安置在一个智能会议室里的麦克风阵列可以采集到讨论者的语音.
经过简单的处理后,麦克风阵列会把语音数据发送给其他的模块.

这些语音数据可能会被用来确定说话人的位置和身份,也有可能用做会议的记录.
这些语音数据应该以怎样的方式进行传送这些都是模块连接所需要解决的问题.
轻量高效如前所述,智能空间的一个识别或者感知模块都很有可能会耗尽现有的一第3页清华大学毕业设计论文台微机的计算资源.
这就对智能空间的软件平台提出了轻量高效要求.
软件平台应该尽可能少的占用计算机系统的资源,同时为上层的软硬件模块提供尽可能高效的服务.
实时性智能空间应该能实时的响应用户的行为.
比如说,在一个智能房间里,用户做出关灯的命令,然而过了好几秒钟,房间都没有响应用户的命令,整个房间的实时性就非常差.
为了提供这种实时的响应,一方面要求各个识别模块能够实时的识别用户的命令,另一个方面也要求软件平台能够实时将识别的结果发送给相应的其他模块.
资源调度智能空间可以看作一个被扩展了的计算机系统,与传统的计算机系统一样系统共享的资源可能会出现访问冲突.
例如,一个智能会议室可以把与会者的笔记本显示屏上的内容投影到大屏幕上.
会议室的投影仪只有一个,当有多个用户参与讨论的时候,智能空间就需要决策谁能够占用投影仪这个资源.
一个简单的策略是:谁在说话就将谁的笔记本上的内容投影过去.
除了这种资源访问冲突外,另一种形式的资源则是整个环境的计算资源.
在"智能空间"这个分布式计算环境中难免会出现某台主机的负荷太重,而某台主机的负荷太轻的可能,这个时候就需要把负荷太重的某台主机上运行的某个模块转移到负荷较轻的主机上运行.
智能空间的软件平台需要对这类的资源调度提供支持.
分布式监控与调试传统的调试工具为串行运行的程序提供非常方便的调试方法.
然而在智能空间里运行的是分布式的多进程的并行程序.
整个运行环境中发生的事件是并行和随机出现的.
如果发生错误,通常情况下是很难重现的.
这个时候就要求软件平台提供相应的分布式监控与调试的工具.
一方面,可以监控这个第4页清华大学毕业设计论文环境中发生的事件,供开发人员分析;另一方面也可以记录这些事件,并按发生的顺序再现这些事件,从而为分布式的调试提供支持.
易用性软件平台的易用性体现在很多方面.
首先,各个软件模块的开发人员对分布式计算的概念可能并不熟悉,为了提高效率,软件平台应该提出尽可能少和简单的概念,从而减少对开发人员的要求.
其次,软件平台还应该为开发人员需要提供各种开发工具,来提高开发人员的开发效率.
再次,一个智能空间里可能会涉及到十几个甚至几十个模块.
如果开发人员每次都需要逐一手动启动所有的模块,将是一件非常另人恼火的事情.
软件平台应该为开发人员提供动态加载和卸载的机制,从而减轻开发人员的负担.
1.
4智能教室与智能平台清华大学计算机系媒体所的"智能教室计划"[12][13](SmartClassroomProject)开始于2000年.
它以远程教育为应用背景,主要要解决现有的通过静态的网页进行的远程教育存在的如下问题:(1)难以开展大规模的网络实时教学;(2)无法提供交互式的课堂讨论式的学习;(3)课件的制作、维护、更新非常困难.
这个研究计划的研究重点包括两个部分:一方面是研究建立一个智能空间,允许老师在这个空间中自然的使用计算机,给课堂中以及远程的学生上课;另一方面是研究在异构复杂的网络条件下进行大规模的协同课堂讨论和学习.
第一个部分主要由"智能教室"(SmartClassroom)来实现,目前已经在媒体所建立起了一个智能教室的实验环境.
在这个实验环境中教师不再被局限在计算机前面,他可以通过语音,手势,激光笔等各种自然的方式来完成与计算机的交互.
在智能第5页清华大学毕业设计论文教室的第一阶段中使用的软件平台是SRI的OAA(OpenAgentArchitecture)[17],在实际的应用中发现OAA并不能很好的满足我们的需要,为此我们为智能教室研究开发了目前正在使用的软件平台——SmartPlatform[14].
第二部分则主要由CSCW系统SameView[15]来实现.
SameView的意思是:不管你是一个课堂中的学生还是一个远程的学生,不管你是用何种连接接入这个智能教室,你都将看到同样的内容.
本文的工作重点主要在智能教室的软件平台上,也就是SmartPlatform.
1.
5本文的内容本论文工作的重点是对——SmartPlatform进行性能及可用性测试及评价.
通过测试和评价的结果改进SmartPlatform或为将来进一步改进提供方案.
第二章介绍了两个智能空间的软件平台:MIT的Metaglue[16],SRI的OAA[17],并小结这类软件平台共有的特点.
第三章重点分析SmartPlatform.
从SmartPlatform的体系结构以及编程模型引出SmartPlatform的优点以及现阶段存在地缺陷.
第四章给出了作者对SmartPlatform以及OAA做的性能测试与评价的结果.
第五章和第六章分别总结了作者在提高SmartPlatform的易用性以及稳定性上所做的工作.
第七章详细说明了SmartPlatform的"端到端"(PeerToPeer)的通讯模式的实现.
第八章为SmartPlatform的线上协议(Wired-Protocol)提出了改造的方案.
第九章总结目前的工作并为将来的工作方向提出大胆的展望.
第6页清华大学毕业设计论文第二章智能空间的软件平台本章简短的介绍了两个智能空间的软件平台:SRI的OAA以及MIT的Metaglue.
其中OAA是智能教室第一阶段所采用的软件平台,本文后续部分将多处涉及到OAA.
另外,清华大学媒体所正在和MIT人工智能实验室开展合作研究,研究的内容是将我们的SmartClassroom和MIT的IntelligentRoom互连起来,为了实现两个智能房间的互连,首先要解决的就是双方的支持平台——SmartPaltform和Metaglue的互连.
2.
1OAAOpenAgentArchitecture[17]是美国SRI(StanfordResearchInstitute)研究中心设计并且开发的一套多Agent系统(MultiAgentSystem或MAS).
Agent指的是在计算环境中运行的独立自主的(Autonomous)的进程.
一方面它可以相对独立的运行,另一方面它也可以感知外界的事件,并做出相应的反应.
在多Agent系统中,所有的软硬件模块都被封装成Agent.
图2.
1OAA的体系结构第7页清华大学毕业设计论文OAA是从1993年开始开发的,属于比较早开发的多Agent系统,对于以后的多Agent系统产生了一些影响.
OAA起初主要用在多模态人机交互领域.
后来,基于OAA,SRI又开发了一系列智能空间和多模态的人机交互应用.
第一阶段的"智能教室"也是采用OAA作为软件平台,在此基础上实现了一些特定的应用,并且在使用的过程也发现了OAA不令人满意的方面,这为我们设计自己的软件平台积累了经验.
下面,简要介绍一下OpenAgentArchitecture的结构、特点.
如图2.
1,OAA是一个分布式控制的软件环境.
因为在整个计算环境中并不存在一个集中的模块来控制多个Agent的工作流程.
虽然在中心有一个Facilitator,但是所有的服务请求都是由各个分布的Agent模块自发发起的.
并不是由Facilitator控制发起的.
OAA采用自定义的Agent间通信语言ICL(Inter-agentCommunicationLanguage).
ICL是一种在Prolog语言上进行扩展得到的Agent间通信语言.
另外,OAA不支持软件模块的动态加载、卸载.
为了让交互空间运行起来,必须一开始启动好所有的软件模块,并使它们运行在一个统一的状态.
当某个软件模块的功能不再被用到时,只能由用户手动关闭该模块.
最后也OAA不支持软件模块代码的移动.
因此也就无法实现负载的动态平衡等功能.

2.
2MetaglueMetaglue[16]是MIT的人工智能实验室专门为IntelligentRoom[2]的软件平台的开发与实现而设计的一种Agent编程语言.
它基于IntelligentRoom环境特殊的计算要求对Java语言进行了扩充.
提供一个封装软、硬件模块的Agent类以及软件平台的一些操作原语.
Metaglue的用户只需要将应用程序用Agent类包裹上,它就具有了智能环境中Agent的功能.
在智能环境中,每一台可用的计算设备上面都必须运行有一个"Metaglue虚拟机".
所有的Agent都是在"Metaglue虚拟机"上运行的.
而"Metaglue虚拟机"又是运行在Java虚拟机上.
需要说明的是,"Metaglue虚拟机"的计算开销相对于Java虚拟机来说,是可以忽略不计的.
用第8页清华大学毕业设计论文Metaglue开发的Agent,在用Java编译器编译成class文件之后,还需要在用Metaglue编译器做一次后编译,以生成一个真正的MetaglueAgent.
图2.
2运行有控制VCR的Agent的主机Metaglue采用分布式控制的软件体系结构,每个Agent都是自主独立的,它们按照自己的目标控制自己的逻辑.
并不存在一个中心模块控制着所有的Agent的运行顺序.
因此它是分布式的.
Metaglue在Agent通信时,并没有采用通信语言的方式,而是简单的服务调用.
表面上是方法调用,Metaglue的底层实现采用的分布式程序的异步消息通信来实现这些调用的.
因此,我们认为Metaglue并没有采用严格意义的某种Agent间通信语言,而仅仅是一些异步消息通信.
这不可避免导致Agent间的耦合比OAA的Agent要紧密的多.
当某个Agent的实现改变时,很可能调用它的服务的Agent也要修改相应的调用接口.
Metaglue支持代码的动态加载/卸载.
每个Agent在启动运行之初都要描述自己所依赖的计算环境、其他Agent的服务等等.
由Metaglue虚拟机相互之间通信、在别的主机上启动被依赖的Agent而满足原Agent的需要.
Metaglue还支持代码的移动.
因为Metaglue本身是基于对Java语言的扩充,Java语言本身就支持类文件的远程下载运行.
另第9页清华大学毕业设计论文外Metaglue中还可以通过将Agent的状态保存在SQL数据库中,需要时Agent能够从SQL数据库中读出以前保存的状态信息,并重新构造出一个具有和原来保存时一样状态的Agent.
2.
3小结本章简要介绍了OAA和Metaglue这两个智能空间的软件平台的体系结构和特点.
它们都采用了多Agent的设计方案,在整个系统中都没有一个集中控制的中心,这主要是由于智能空间中的软件模块的独立自主运行的特性决定的.
另外他们都为Agent提供了松散耦合提供了相应的机制.
提供松散耦合的好处是,当一个Agent出现了严重的错误并退出的时候,只需要重新启动这个Agent就可以使整个环境恢复工作,而不是需要重新启动所有的模块.
另外这种松散耦合也给开发智能空间带来了一定的灵活性.
同一个功能的可以用完全不同平台或者语言的模块来实现,只需要他们能够满足软件平台提出的要求即可.
第10页清华大学毕业设计论文第三章SmartPlatform媒体所的"智能教室计划"的第一阶段中,采用了OAA作为其软件平台,而在实际的应用中也发现了OAA的许多不足,在很多方面OAA都不能够满足我们的需要.
在综合考虑了现有的软件平台的设计方案和我们自己特殊的需求的基础上,我们提出了自己的软件平台——SmartPlatform.
一方面,SmartPlatform为智能教室的开发提供底层的支持;另一方面,我们也希望SmartPlatform能够有足够的可用性,能为其他的研究机构所接受,用于构建他们的智能空间.

本章首先介绍SmartPlatform的体系结构,接着说明SmartPlatform相对于现有的软件平台所的优势所在.
最后说明SmartPlatform目前还存在的不足和缺陷.
3.
1SmartPlatform的体系结构和功能概述3.
1.
1体系结构hostOShostOShostOShostOSAAAAAASmartPlatformNetworkDirectoryServiceMessageDispatcherDependencyManagerContainerAgentA图3.
1SmartPlatform的体系结构从总体上说SmartPlatform也是一个多Agent的分布式计算系统.
如图3.
1,在整个计算机的体系结构里,它运行在计算机的操作系统之上,应用层的软件模第11页清华大学毕业设计论文块(Agent)之下,利用操作系统和计算机网络为上层的软件模块提供统一的运行环境和高度结构化的通信和协作模式,同时为上层的模块屏蔽掉操作系统和计算机网络的细节.
在整个SmartPlatform的体系结构中主要包括:Agent,Container和DS这三个组件.
而DS又是由DirectoryService、MessageDispatcher以及DependencyManager三个子模块组成的.
另外SmartPlatform还为智能空间的开发者提供了一些开发和调试的工具.
下面将分别介绍这些模块及其功能.

Agent任何一个运行在SmartPlatform之上的,独立自主的软件模块我们都称之为Agent.
它是SmartPlatform中的软件模块的最基本的单元.
Container所有参与SmartPlatform计算环境的主机上都需要运行一个叫做Container的守护进程(或者服务).
一方面Container为运行在同一主机的Agent提供了一个统一的管理点,另一方面Container也为运行在其上的Agent提供了SmartPlatform的底层服务.
Agent只需要和Container进行通讯即可,至于SmartPlatform的底层细节则由Container来照顾了.
从另一个角度来看,Container也可以被看作Agent与DS之间的代理.
DS在整个SmartPlatform中必须运行一个唯一的全局进程——DS.
DS为SmartPlatform提供目录查询、消息转发、Agent间依赖关系的管理等服务,这些服务又是分别由DS的三个子模块:DirectoryService、MessageDispatcher和DependencyManager来完成的.
DirectoryService子模块提供目录查询服务,任何一个Container或Agent启动的时候都需要向DirectoryService提交注册信息.
另外如果某个Agent需要发送面向流的端到端的数据,则需要首先在DirectoryService上注册一个流数据消息组,并由DirectoryService为其分配一个多播地址(一个D类IP地址和一个端第12页清华大学毕业设计论文口号),供接收者查询.
MassagerDispatcher可以看作是一个转发中心,它在SmartPlatform中的地位和Facilitator在OAA中的地位很相似.
它主要为基于"订阅-发布"(Subscribe-Publish)的通讯模式提供支持.
DependencyManager模块主要管理和维护Agent间的依赖关系.
3.
1.
2SmartPlatform的Agent的编程模型SmartPlatform为Agent的开发提供必要的类库和基础代码,以封装一些公共的和SmartPlatform底层实现相关的细节.
可以通过多种编程语言来开发Agent,目前已经有VC版本和Java版本的开发类库.
我们把这些开发类库称为ADL(AgentDevelopmentLibrary).
如果使用ADL开发Agent,每个Agent都继承于ADL提供的CAgent类,CAgent封装了每个Agent都需要用到的公共的功能以及实现这些功能底层的细节.
CAgent包括如下这些方法:Register——Agent的注册操作.
该函数首先会找到本机上的Container(如果没有,则启动一个),然后与Container通过TCPSocket建立进程间通讯.
之后Agent会通过Container向DS发起注册,注册的内容包括Agent的名称、开发语言、提供的服务、依赖的服务等.
该函数返回注册是否成功.
Publish——Agent调用该函数向MessageDispatcher发布消息.
Subscribe/Unsubscribe——Agent调用该函数向MessageDispatcher订阅(或取消订阅)消息.
CreateStreamGroup——Agent调用此函数创建一个面向流数据的消息组,成功则会获得一个多播地址,用于发送其流数据.
SendStreamData——Agent调用该函数发送流数据.
第13页清华大学毕业设计论文SubscribeStreamData/UnsubscribeStreamData——Agent调用该函数可以接收(或者取消接收)面向流的消息组中的流数据.
OnNotify——这是一个虚方法的回调函数.
当该Agent订阅的消息到达时,该函数会被自动调用.
在该函数中Agent会根据订阅时申明的消息处理函数来调用对应的回调函数,在这些回调函数中,应该对各类消息做相应的处理.
OnDisconnected这是一个回调的虚函数.
它是在Agent与Container的连接断开时被调用的,这种情况通常是因为Container主动中止Agent,所以Agent应该相应这个消息,释放所占用资源并退出.
OnDepenSatisfied/OnDependLost,这是两个回调虚函数,它们分别是在Agent的依赖关系被满足时以及Agent失去已满足的依赖关系时被调用的.
根据需要开发者可以在这两函数中改变Agent的行为.
下面通过一个典型的例子来说明如何通过ADL来开发Agent程序.
该例子是要实现类似于IP网络上ping服务的功能,例子中包括PingAgent和PongAgent两个Agent.
当PingAgent发出ping消息到PongAgent时,Pong将该消息复制一份发回PingAgent.
PingAgent可以利用发出消息到消息返回的时间(RoundTripTime或者RTT)来测试消息发送的延迟.
这两个Agent也被用在第四章的性能测试中.
PongAgent的实现:1.
CPongAgent类继承CAgent类.
2.
主程序调用Register函数,将CPongAgent的名称(PongAgent)、开发语言(C++)、提供的服务(PingServer)、依赖的服务(空)注册到DS目录中.
3.
调用CPongAgent的Subscribe函数,向MessageDispatcher订阅"Ping"消息组的消息.
并指定该消息组的消息处理函数为"OnPing"第14页清华大学毕业设计论文4.
在OnPing函数中添加相应的处理代码.
当接收到Blackboard的"Ping"消息时,立刻调用Publish函数将接收到的消息原封不动的通过"Pong"消息组发送回PingAgent.
PingAgent的实现:1.
CPingAgent继承CAgent类.
2.
程序调用Register函数,将CPingAgent的名称(PingAgent)、开发语言(C++)、提供的服务(无)、依赖的服务(PingServer)注册到DS目录中.
3.
调用CPongAgent的Subscribe函数,向MessageDispatcher订阅"Pong"消息组的消息.
并指定该消息组的消息处理函数为"OnPong"4.
发送"Ping"消息组的消息,并记录下目前的时间.
5.
在OnPong函数中添加相应的处理代码.
当接收到Blackboard的"Pong"的时候根据上次发送Ping消息的时间和目前的时间计算RTT延迟.
3.
2SmartPlatform的优点SmartPlatform从一开始就是针对OAA的种种不足而设计的.
与OAA相比SmartPlatform具有如下优点:动态发现和加入、"端到端"与"中心转发式"的通讯模式相结合、软件模块间的依赖关系的自动管理和维护、代码的自动加载/卸载以及用XML作为Agent间的通讯语言(Inter-agentCommunicationLanguage或ICL).
下面将会具体说明SmartPlatform的这些优点.
3.
1.
1动态发现、加入与OAA的Facilitator类似,SmartPlatform中的DS也是一个整个环境中不可缺少的核心模块,其他模块要正确运行必须与DS建立连接.
在OAA中为了与第15页清华大学毕业设计论文Facilitator建立连接,必须在所有的主机上创建一个配置文件,如果运行Facilitator的主机改变了,那么就意味着所有参与计算的主机上的配置文件都需要改变.
这种做法是很不方便的,在有些场合设置是不可用的.
比如说这样一个场景:一个带着无线连网功能的手持设备的用户,从一个智能空间走到另一个智能空间.
如果每次走进一个智能空间都不得不手动配置他的手持设备让它加入这个计算环境,这种做法一定是非常令人恼火的.
下面要介绍的SmartPlatform的动态发现和加入机制可以很好的解决这个问题.
DS启动后会在一个预先约定好的多播地址监听.
Container启动时会向这个地址发送查询请求.
DS收到这个请求后会回答自己监听的单播地址和端口,这样Container就可以和DS建立单播连接.
一旦Container失去了与DS的连接,Container又会重复上述的步骤尝试连接DS,直到连接上DS.
(图3.
2)动态发现与加入的机制的另一个好处是在我们调试SmartClassroom的时候,我们经常需要重新启动DS,这个机制使得整个重新启动的过程变得简单.
DSDSDSContainerContainerContainerHello(Multicast)Hello_ACK(Multicast)TCPConnection图3.
2SmartPlatform的动态发现机制第16页清华大学毕业设计论文3.
1.
2"端到端"与"中心转发"的通讯结合从本质上说,OAA采用的是基于"发布-订阅"(Publish-Subscribe)的通讯模式.
OAA的Facilitator则充当了这种通讯模式的转发中心.
这种通讯模式的优势是明显的.
首先,它使得各个软件模块能够松散耦合.
其次,在这种模式下,"一对多"的通讯是非常容易的实现的.
最后,相对直接连接的模式(在每两个模块间建立一个连接),这种模式要维护的连接数相对较少,它只与软件模块的数量成正比,而不是和其平方成正比.
然而这种通讯模式并不是在所有的场合都能够适用的.
很明显,转发中心将成为这种结构下的瓶颈.
这也直接导致了任何两个连接的传输延迟,特别是延迟的变化,是很难被保证的.
但是,智能空间的确需要有服务质量保证的通讯.
比如说在智能教室里,激光笔跟踪模块需要每隔100毫秒向SameView模块报告激光笔光点的位置,这个时候这种中心转发式的通讯模式就显得不够用了.
在第一阶段用OAA的中心转发方案实现的时候,发送的延迟在几秒到十几秒之间变化.
为了能够保证效果,我们不得不在这两个模块间开辟一条独立的UDP通道,专门用于发送激光笔光点的位置.
这也启发了我们为把这种点到点的通讯模式作为软件平台提供的基本通讯模式的一种.
这就是SmartPlatform的混合通讯模式的形成过程.
SmartPlatform的中心转发式的通讯模式是由DS的子模块MessageDispatcher来实现的.
在这里我们引入消息组的概念.
Agent可以订阅一个消息组也可以向一个消息组发布与该消息组相关的消息.
DS的另外一个子模块——DirectoryService为面向流数据的端到端的通讯提供目录查询服务.
在发送流数据之前,都必须在DirectoryService上注册一个流数据消息组,同时获取一个多播地址,用于发送流数据.
接收者在接收前需要通过目录查询服务获得希望接收的流数据的多播地址,继而监听该地址并接收数据.
第七章还会具体说明"端到端"的通讯第17页清华大学毕业设计论文的实现机制.
图3.
3描绘了SmartPlatform的混合通讯模式.
MessageDispatcherAAAAcopyofMsgAcopyofMsgStreamDataoverRTPMulticastStreamDataoverRTPMulticastMsg图3.
3SmartPlatform的混合通讯模式.
最后在简短的分析一下这两种通讯模式的特点和应用场合.
面向消息的中心转发式的通讯一般具有高层的语义.
这种通讯对数据的丢失是敏感的,相比较而言对消息的传输延迟则不是那么敏感,只要这个延迟不超过一个合理的范围.
这种通讯的另外一个特点是:一般情况下它并不会连续发送.
而面向流数据的端到端的通讯通常会连续发送,它对偶尔出现的数据的丢失并不敏感,但是对数据传输的延迟,特别是延迟的变化是敏感的.
3.
1.
3软件模块见的依赖关系的自动管理和维护"智能教室"实际上是通过分布的软件模块之间相互的通信、协作共同为用户提供智能的计算服务的.
如果将"智能教室"中每个软件模块都看成提供特定的服务,并且依赖于别的软件模块提供的服务时,各个软件模块之间就通过相互的依赖关系而建立了逻辑上的链状或者网状联系.
图3.
4是现阶段智能教室计划中的Agent以及它们之间的依赖关系.
第18页清华大学毕业设计论文MediaBoardAgentAAAAAAAAAAContextUnificationAgentTecherActionRecognitionAgentSpeechRecognitionAgentGestureRecognitionAgentUserProfileAgentSpeakerRecognitionAgentLaserPointerTackingAgentStudentBoardAgentFaceRecognitionAgentAvator&TTSAgentA图3.
4智能教室中的Agent及它们间的依赖关系.
从AgentA到AgentB的虚线箭头表示AgentA依赖AgentB提供的某种服务.
OAA并不提供对这种软件模块之间依赖关系的管理和维护,这些依赖关系必须要开发人员自己手动的来维护.
比如说"智能教室"中,包装了SameView的StudentBoardAgent直接或者间接的依赖于语音识别模块(SpeechRecognitionAgent)的语音命令服务、语音合成模块(Avator&TTSAgent)的语音输出服务、手势识别模块(GestureRecognitionAgent)提供的手势识别服务、人脸识别模块(FaceRecognitionAgent)的身份认证服务.
事实上,其中的任何一个软件模块如果不工作在正常的运行状态,MediaBoardAgent都无法正常工作,或者无法充分的体现出其功能.
第一阶段的"智能教室",这种被依赖模块的正常运行,完全都是由开发人员来保证和维护的.
当软件模块数目增大到几十个的时候,人已经很难记得清楚,并且一一去保证其正确性.
在SmartPlatform中,软件模块之间的依赖关系可以自动的管理和维护.
每个模块在启动、加入到计算环境时,需要声明自己所依赖的服务.
SmartPlatform第19页清华大学毕业设计论文会记录各个软件模块它们依赖的服务,并且结合后面的SmartPlatform自动加载特性,启动能够提供这些被依赖的服务的软件模块,以满足这些依赖关系.

3.
1.
4代码的自动加载/卸载在OAA中,所有软件平台都必须由开发人员手动启动,并且保证它们工作在一致的、协调的状态,这在软件模块的数量比较大时非常不方便.
另一方面为了支持前面提到的软件模块间依赖关系的自动管理和维护,SmartPlatform需要在某个被依赖的模块没有运行时启动它而满足该依赖关系.
这就是代码的自动加载的功能.
SmartPlatform能够在需要到的时候,自动的启动需要的软件模块,并使其加入计算环境以提供需要的服务给其他的模块.
从具体实现上说,在SmartPlatform中引入Container为代码的自动加载和卸载提供了可能.
它可以启动或者中止本机上的Agent.
OAA中无法实现这种机制,也正是因为OAA的结构中没有类似Container的组件.
3.
1.
5XML作为Agent间通讯语言OAA采用的是基于Prolog语言的Agent间通讯语言(Inter-agentCommunicationLanguage).
由于Prolog语言主要用在人工智能的递规问题求解等方面,其语言本身实现对各种基本数据类型的实现过于复杂导致效率较低.
相对来说Prolog语言是比较难以掌握的,这也给智能空间的开发者带来了困难.
在SmartPlatform的设计过程中,我们最终选择了基于XML(扩展标记语言)的Agent间通讯语言.
做出这样的选择主要是因为XML的如下有点:(1)XML具有良好的可扩展性.
开发人员在开发智能空间的时候可以先定义一个非常粗略消息结构,随着工作的深入,可以补充其他的数据域,并且新添的数据域并不会影响先前的工作.
(2)XML具有用户友好的,易读的分层结构,这个特点在调试第20页清华大学毕业设计论文的时候非常有用,开发人员可以很直观的看到消息的结构和内容.
(3)另外XML提供了自描述的机制,用户可以使用XMLDTD来描述合法的消息格式,这个特性可以用作检查消息的合法性.
我们发现在开发分布式系统时,很多错误都是因为拼写错误而引起的.
事实上在SmartPlatform的设计阶段,我们也考虑过用二进制描述的Agent间通讯语言.
不得不承认比起二进制的描述来说,XML的效率会相对较低,但是综合考虑XML的优点还有目前的计算机的处理速度的提高和计算机网络的发展,我们认为,在处理速度上的这一些劣势是可以忽略的.
3.
3SmartPlatform现阶段存在的缺陷尽管从总体设计上说,SmartPlatform有上述的很多优点,但是在目前的版本中还是存在这样或者那样的缺陷.
下面将具体分析这些缺陷.
3.
1.
1底层通讯采用MFC的CSocket实现SmartPlatform的Container与DS之间,Agent与Container之间都是通过socket连接的.
而目前的版本这些连接都是用MFC的CSocket类实现的.
MFC的CSocket类是一个封装程度比较高的异步阻塞socket类.
CSocket类主要问题是用户对异常的处理比较困难.
同时阻塞的调用一旦出现错误就有可能使整个进程阻塞.
解决的办法只能是杀掉这个进程,再重新启动.
如果这个阻塞的进程是DS则将导致整个智能环境里的所有Container和Agent的互相协作关系被破坏.
另外在第四章的测试中也发现通过CSocket传送较长的消息(比如说8000字节)很容易出现异常,从而导致模块被阻塞.
第21页清华大学毕业设计论文3.
1.
2"端到端"的通讯模式没有实现SmartPlatform第一阶段只实现了基于"订阅-发布"模型的中心转发式的通讯模式.
"端到端"的实时通讯作为SmartPlatform的一个重要设计目标一直没有实现.
3.
1.
3线上协议采用基于XML与基于二进制的混合描述SmartPlatform的线上协议(Wired-protocal)是用来描述在智能空间里中发生的事件或者在软件模块间发送的消息.
线上协议的另外一个作用是规定SmartPlatform的组件(DS,Agent和Container)的行为.
这样做的目的是为了解决跨语言和跨平台的问题.
任何一个进程,不管它使用的是什么语言,在什么平台上运行,只要它遵循SmartPlatform的线上协议,就可以认为它是一个合法的DS,Agent或者Container目前的线上协议的每一个消息一共由三个部分组成.
见图3.
5:1字节消息类型域4字节消息长度域不定长消息内容域(基于XML描述)图3.
5SmartPlatform的线上协议的消息结构目前的协议对Socket的上层编程可见的是消息类型域和消息内容域.
消息内容域采用基于XML的描述,虽然使得对消息处理速度降低,但是相对二进制描述的消息内容来说,基于XML的描述的扩展性好,同时基于XML的描述对人更加友好,可以大大提高编程和调试的效率.
而消息类型域则采用的是对人很不友好的二进制描述.
事实上,基于XML的描述是足够强大的,消息类型域完全可以放在消息内容域中描述,这样对Socket的上层可见的就只有消息内容域,这样的做法将进一步提高SmartPlatform的协议的可扩展性和友好性.
第22页清华大学毕业设计论文3.
1.
4可用性需要进一步提高在SmartPlatform的第一阶段的成果中只提供了一个MonitorAgent作为开发工具.
而且Monitor的功能也需要进一步的完善.
另外,虽然SmartPlatform的Agent的编程模型非常简单,但是为了编写一个Agent,仍然需要做一些简单的重复性的工作,比如继承CAgent类,初始化COM与Socket,Agent注册等等.
同时在我们开发SmartClassroom的过程中也发现,开发人员经常会忘记初始化COM和Socket,这也给开发带来了不便.
这个时候如果能有工具为开发人员自动的生成Agent的框架代码将会大大的提高开发的效率.
3.
1.
5同步与异步调用混合的编程模型Multi-Agent系统的编程模型应该是一个典型的异步调用的编程模型.
然而SmartPlatform在前期设计中却采用了同步和异步混合的模型.
通过等待指定类型的异步事件来实现同步的调用.
引入同步的调用的方式的好处可以在一定的条件下简化编程,但是这样的设计却存在着根本性的错误.
为了处理一个同步阻塞的调用,必须在等待指定的异步事件的同时处理其他所有的事件,这样每增加一种同步调用都可能会牵涉到所有其他类型的事件,这是一种扩展性很差的做法.
更严重的问题是,如果在多线程假设有两个同步调用A和B分别需要等待异步事件a和b.
如果在调用A的过程中,事件b出现,目前的解决方案将产生错误.
事件b本应该在B的同步调用中处理.
但是在这种条件下无法实现3.
4小结本章首先介绍了SmartPlatform的体系结构.
在此基础上通过与OAA的对比第23页清华大学毕业设计论文总结了SmartPlatform的优势所在.
同时也指出了SmartPlatform目前还存在的问题.
第24页清华大学毕业设计论文第四章SmartPlatform与OAA的性能测试与对比为了比较SmartPlatform和OAA的性能,作者和博士生谢伟凯一同设计完成了下面将要介绍的实验.
4.
1实验方案实验的目的主要是为了测试SmartPlatform与OAA的中心转发式的通讯模式的性能,并作对比.
为此我们设计了如下的实验方案.
DSAPingAgentAPongAgentPingPingPongPongABackgroundpayloadAgentABackgroundpayloadAgentABackgroundpayloadAgentABackgroundpayloadAgentEDBFAGC图4.
1实验方案示意图如图4.
1,在这个实验中使用了7台计算机(A-G).
这7台计算机是通过一个专用的100Mbps的以太网连接在一起的.
其中在A机上运行DS(对于OAA则是Facilitator).
另外在B机与C机上分别运行前面提及过的PingAgent和Pong第25页清华大学毕业设计论文Agent.
而剩下的4台主机(D-G)上则运行发送和接收背景负载的Agent.
发送背景负载的Agent根据泊松过程来发送作为背景负载的消息.
这样做主要是为了模拟中心转发这种通讯模式的随机性.
我们利用PingAgent和PongAgent之间的RTT(RoundTripTime)来估计中心转发的传输延迟(RTT可以粗略的认为是传送延迟的两倍).
最后我们通过分析在不同的背景负载强度下的RTT,得出实验结果.
在实验中,PingAgent与PongAgent之间的消息长度在[0-1000]平均分布,背景负载的长度在[100-200]间平均分布.
所有的SmartPlatformAgent都是用SmartPlatform的C++编程库在MSVC++6下使用Release版本配置编译的.
OAAAgent则使用的是OAA2.
1C编程库,同样也是在MSVC++6下编译的.
但是由于OAA的编程库的一些错误,运行Release版本的Agent会出现运行时错误.
最后我们不得不运行Debug版本的Agent来做测试.
在一定程度上这使得OAA的性能有所下降.
另外在实验中用到的计算机的配置都是:PIV1.
6GHz,256MBRAM.
所使用的操作系统是Windows2000Professional.
4.
2实验结果020040060080010000510152025303540PeformanceofSmartPlatformRTT(ms)SystemLoad(Messages/S)010203040506070840080012001600200024000PerformanceofOAARTT(ms)SystemLoad(Messages/S)(a)(b)图4.
2SmartPlatform和OAA的传输延迟以及吞出率.
第26页清华大学毕业设计论文图4.
2(a)和图4.
2(b)分别是SmartPlatform和OAA的测试结果,横坐标是背景消息的强度,单位是每秒钟发出的消息数,纵坐标是RTT延迟,单位是毫秒.
从实验结果可以看出,当背景负载的强度从0消息/秒到960消息/秒变化的过程中,SmartPlatform的RTT延迟也几乎线性的从13毫秒增加到36毫秒.
同时当背景负载达到960消息/秒时,DS所在的主机的CPU占用率达到了100%,这也说明SmartPlatform的消息吞吐率大约是960消息/秒.
图B的结果也显示出,当背景负载从0消息/秒增加到80消息/秒的过程中,OAA的RTT则由500毫秒增加到2400毫秒.
另外通过实验的观察OAA的瓶颈并不在OAA的Facilitator,当背景负载达到80消息/秒的时候,发送背景负载的Agent所在的主机的CPU的占用率达到了100%而不是Failitator所在的主机.
同样从实验结果可以看到:OAA的吞吐率大约是80消息/秒.
4.
3分析与小结实验的结果表明不管是在传输延迟上还是在吞吐率上,SmartPlatform相对OAA都有一个数量级的提高.
出现这个结果的主要原因在于SmartPlatform在设计之初就将系统的性能作为一个很重要的指标.
首先SmartPlatform的底层协议做到了尽可能的简化,提供最常用和最实用的用户接口,以提高整个系统的性能.
另外SmartPlatform采用XML作为通讯语言,XML的解析效率要大大高于Prolog语言,这也是得到这样的实验结果的原因之一.
第27页清华大学毕业设计论文第五章提高SmartPlatform的易用性为提高SmartPlatform的易用性,我们为SmartPlatform提供了Agent框架代码的自动生成工具和一个标准安装程序用于安装和配置SmartPlatform.
另外也为SmartPlatform提供了一个开发参考和向导.
最后也为MonitorAgent增加了新的功能.
5.
1为开发人员提供开发参考(Reference)以及开发指南(Tutorial)作者为了开发人员整理了用于开发SmartPlatform的几篇开发参考,包括:SmartPlatformDeveloper'sGuide,SmartPlatformADKReference(VC++Version)和TXMLClassReference(VC++Version).
SmartPlatformDeveloper'sGuide为用户介绍了SmartPlatform的体系结构和编程模式.
SmartPlatformADKReference(VC++Version)详细描述了SmartPlatform的VC++版本的CAgent类的各个方法的功能.
TXMLClassReference(VC++Version)详细描述如何使用TXML类来解析XML文档.
同时作者也为开发人员提供了SmartPlatform提供了开发指南,该指南通过一个实例详细说明了如何一步一步的编写一个SmartPlatformAgent的应用程序.
编写一个SmartPlatform的基本步骤如下:1.
将相应的编程库文件以及头文件加入项目.
2.
为应用程序初始化COM和Socket.
3.
继承CAgent类.
4.
根据需要重载CAgent的OnDisconnet,OnDepenSatisfied以及DepenLost这三个虚函数.
第28页清华大学毕业设计论文5.
调用CAgent的Register方法向DS注册.
6.
根据需要,调用CAgent的Publish方法发布消息7.
根据需要,调用CAgent的Subscribe方法订阅消息,并编写相应的消息处理函数.
5.
2Agent框架代码的自动生成为了提高SmartPlatform的易用性,减少开发者的重复劳动,我们为SmartPlatform开发了Agent框架代码自动生成的工具.
如图5.
1,使用这个工具可以在MSVC++6环境按照用户的要求自动生成Agent的框架代码.
这样,开发者可以把更多的精力放在Agent的核心算法以及Agent的协作上,而不是简单的重复劳动上.
图5.
1使用SmartPlatformAppWizard在MSVC++6下设置Agent属性,并自动生成Agent框架代码第29页清华大学毕业设计论文5.
2.
1CustomAppWizard的使用介绍MSVC++6提供了CustomAppWizard类型的项目,使用这类项目可以为MSVC++6生成代码自动生成的工具.
这类项目主要包括如下几个部分:应用程序属性对话框,模板文件,描述文件NewProj.
inf,描述文件Confirm.
inf.
在应用程序属性对话框中,用户可以定义自己的应用程序的各种属性,这类对话框有一个可重载的虚方法:OnDismiss.
当用户完成对应用程序的属性的设置后,OnDismiss方法会被调用.
在这个方法里面需要把应用程序的各个属性转换成用户定义的宏.
这些宏将在后面的模板文件以及描述文件中起重要的作用.

模板文件可以用来生成应用程序所需要的的源程序或其他类型的文件.
模板文件又可以分为两类.
一类不需要使用宏定义,如果它被包含在新生成的项目中,那么它将被原封不动的拷贝过去.
另一类,则需要使用前面生成的宏变量.
使用$$IF(Macro)、$$ELSE、$$ENDIF、$$BEGINLOOP(Macro)、$$ENDLOOP等宏命令可以根据不同的宏定义来生成不同的代码.
另外使用$$Macro$$,也可以把用宏本身所指带的字符串来填充源程序相应的位子.
NewProj.
inf实际是一个从模板文件到项目所包含的文件的映射表.
它描述了在新生成的项目中应该包含哪些文件,这些文件应该如何命名,这些文件应该由那些模板文件来生成,生成这些文件的时候是否需要对其中的宏做相应的解释.

当然了$$IF(Macro)、$$ELSE、$$ENDIF、$$BEGINLOOP(Macro)、$$ENDLOOP这些宏命令也可以用于这个文件.
在生成项目的时候,程序会自动根据宏定义和这些宏命令来确定应该包含的文件.
Confirm.
inf的用途是生成在代码生成前关于整个项目的描述的信息,这些信息的作用让给用户能够最后确认即将生成的应用程序的属性是否和他预想的是一致的.
这个文件并不会影响生成的项目.
第30页清华大学毕业设计论文5.
2.
2SmartPlatformAgentWizard中自定义的宏变量在SmartPlatformAgentWizard中我们定义了如下的宏变量,用于描述即将生成的SmartPlatformAgent的属性.
名称类型描述AGENT_CPP字符串Agent所在的实现文件(.
cpp)的文件名AGENT_H字符串Agent所在的头文件(.
h)的文件名AGENT_CLASS字符串Agent的类名,该类将会继承CAgent类AGENT_DEPEN字符串Agent所依赖的服务AGENT_LANG字符串Agent所使用的开发语言AGENT_NAME字符串Agent的名字AGENT_SERV字符串Agent所提供的服务AGENT_CALLBACK_COUNT整数Agent中面向消息的回调函数的个数AGENT_CALLBACK_n字符串Agent第n个面向消息的回调函数的函数名AGENT_STREAM_COUNT整数Agent中面向流的回调函数的个数AGENT_STREAM_n字符串Agent第n个面向流的回调函数的函数名表5.
1SmartPlatformAgentAppWizard中定义的宏变量5.
2.
3Agent框架代码的生成以下以基于对话框的项目为例说明,自动生成的Agent框架代码.
与普通的相比,自动生成的Agent项目增加了下表所列出的几个文件:第31页清华大学毕业设计论文文件名作用ADKD.
libAgent开发类库的调试(Debug)版本ADKR.
libAgent开发类库的发布(Release)版本ADK.
h定义CAgent与TXML类的头文件AGENT_CPP.
cppAgent所在的实现文件AGENT_H.
hAgent所在的头文件表5.
2基于对话框的SmartPlatformAgent与普通基于对话框的MFC应用程序相比所增加的文件以及这些文件的作用.
除了以上添加的文件以外,还在对话框对应的文件中添加了如下功能的代码:(1)初始化COM和Socket.
(2)为对话框添加Agent对象.
(3)初始化并注册Agent.
(4)销毁对话框的时候清理释放Agent所占用的资源.
(5)响应Agent的OnDisconnect事件.
5.
3为SmartPlatform提供标准安装程序SmartPlatform还为用户提供了标准安装程序,它为SmartPlatform拷贝可执行程序和文档.
并为Smart做相应的系统配置.
5.
3.
1安装程序所完成的系统配置工作安装程序主要完成了三项配置工作,它们包括:1.
DS需要使用一个Access数据库来记录Agent的信息.
所以需要在ODBC数据源中配置一个系统DSN.
这个系统DSN的名称为DS,它与SmartPlatform的安装目录下的BIN子目录的DS.
mdb文件相关联.
2.
SmartPlatform的java版本的Agent开发类库需要在系统中设置classpath第32页清华大学毕业设计论文环境变量.
安装程序自动完成环境变量的设置.
3.
安装程序要通过MSVC++6设置的环境变量获得其安装位置,并将SmartPlatformAppWizard拷贝到相应的目录下.
4.
在Windows的开始菜单中创建SmartPlatform的程序组.
并为可执行程序和文档创建快捷方式.
5.
3.
2安装程序完成后的目录结构图5.
2SmartPlatform安装后的目录结构如图在SmartPlatform地安装目录下一共有6个子目录,以下将分别说明这些目录里的内容.
BIN目录里主要是SmartPlatform的可执行程序:DS.
exe,Containr.
exe,Monitor.
exe;DS数据库及其相关文件:DS.
mdb,DS.
ldb;SmartPlatform配置文件:Config.
xml.
Documents目录中是SmartPlatform的相关文档.
Include目录中目前只有一个文件:ADK.
h,该头文件定义了CAgent类和TXML类.
Lib目录下是SmartPlatform的VC++版本与java版本的编程类库.
第33页清华大学毕业设计论文Sample目录下是Agent例程.
Tutorial目录下是用户指南.
5.
4为MonitorAgent增加新的功能MonitorAgent作为SmartPlatform的一个特殊Agent,可以监听SmartPlatform计算环境里的事件和消息.
在智能空间的开发阶段,为了调试某个特定的Agent也可以使用MonitorAgent向指定的消息组或者Agent发送指定的消息.
这种机制仍然存在不方便的地方,每次向指定的消息组发送消息都需要手工输入这些消息,一方面手工输入比较繁琐,另一方面也很容易出错.
为了解决这些问题作者为MonitorAgent增加了记录最近发送的消息的功能.
如图,开发者可以从最近发送的20条消息中选取一条发送到指定的消息组和Agent,也可在最近发送的消息的基础上修改,然后再发送.
更重要的是,在发送前,MonitorAgent会检查要发送的消息是否符合XML的语法.
只有符合XML语法的消息才会被发送.
如果用户输入有语法错误的消息,MonitorAgent会弹出对话框警告用户,这样可以避免用户输入错误带来的问题.
5.
5小结本章主要介绍了4个方面的工作:为SmartPlatform的开发人员提供开发指南和参考,为SmartPlatform提供Agent框架代码自动生成的工具,提供SmartPlatform的安装程序以及为MonitorAgent增加新的功能.
这些工作的目的都是为了提高SmartPlatform对用户的友好性和易用性.
第34页清华大学毕业设计论文第六章提高SmartPlatform的稳定性本章主要为提高SmartPlatform的稳定性提出了改进的建议,并做了初步的测试.
6.
1同步和异步调用如3.
1.
5所述,目前SmartPlatform中存在着同步和异步混合的编程模式,这种混合模式一方面使得一些调用简单直观,另一方面又使得程序的可扩展性和稳定性(特别是多进程下的稳定性)难以保证.
综合考虑这两个方面,作者为进一步改进SmartPlatform做出了一下的修改建议:1.
取消DS与Container中的所有同步接口,统一使用异步的接口.
做出这样的修该地原因是DS和Container都同时涉及到与多个进程的通讯.
另外,智能空间的开发者也不需要使用DS和Container的接口来开发应用程序.
2.
仍然保留Agent中的同步接口,但是要限定用户只能在单线程条件下使用Agent的通讯接口.
之所以保留同步的接口,是为了给Agent的开发人员提供一套简单易用的编程接口,以提高开发效率.
同时为了确保程序的正确性和稳定性,不得不限制在单线程条件下使用.
这是在易用性和稳定性折中的结果.
6.
2用CAsyncSocket代替现有的CSocket来实现底层的通讯在第四章的实验中发现,SmartPlatform在发送较长的消息(比如说大于8000字节)的时候很容易出现异常,从而导致阻塞.
这主要是因为SmartPlatform的Socket层是基于MFC的CSocket类开发的,CSocket类的封装层次比较高,所以第35页清华大学毕业设计论文对异常的处理能力比较差.
另外CSocket类使用的是阻塞的编程接口,这样一旦出现异常就有可能使得主线程阻塞,而这种阻塞是我们不希望看到的.
解决这一问题的办法是使用封装层次较低的非阻塞的CAsyncSocket类重写的Socket通讯层的代码.
综合考虑6.
1节所述的同步和异步的编程方式,作者为下一步改进SmartPlatform的改进SmartPlatform的Socket通讯层编写了CMessageSocket类,以下是它的定义:classCMessageSocket:publicCAsyncSocket{public:CMessageSocket();virtual~CMessageSocket();//Overridespublic:BOOLSend(constTXML&xml);BOOLSend(LPCTSTRlpstr);BOOLConnect(LPCTSTRlpszHostAddress,UINTnHostPort);TXMLReceive(LPCTSTRlpstr)//ClassWizardgeneratedvirtualfunctionoverrides//{{AFX_VIRTUAL(CMessageSocket)public:virtualvoidOnReceive(intnErrorCode);virtualvoidOnOutOfBandData(intnErrorCode);virtualvoidOnAccept(intnErrorCode);virtualvoidOnConnect(intnErrorCode);virtualvoidOnSend(intnErrorCode);//}}AFX_VIRTUAL//Generatedmessagemapfunctions//{{AFX_MSG(CMessageSocket)//NOTE-theClassWizardwilladdandremovememberfunctionshere.
//}}AFX_MSG//Implementationprotected:virtualvoidOnConnectFailed(intnErrorCode);virtualvoidOnConnectSuccessfully();virtualvoidOnAcceptNewSocket(SOCKEThSocket);第36页清华大学毕业设计论文virtualvoidOnReceiveMsg(TXML&xmlMsg);private:voidOnPendingReadCompleted();structTPendingMessage{TPendingMessage(){m_pBuf=NULL;}~TPendingMessage();char*m_pBuf;intm_nLen;intm_nOffset;};DWORDm_nLen;CListm_listPendingMessage;TPendingMessagem_readPending;boolm_bContents;};下面重点说明几个重要的接口的含义:BOOLCMessageSocket::Send(constTXML&xml);BOOLCMessageSocket::Send(LPCTSTRlpstr);发送数据包,xml和lpstr是基于XML描述的数据内容.
返还值表明发送是否成功.
BOOLConnect(LPCTSTRlpszHostAddress,UINTnHostPort);主动发起连接,lpszHostAddress是对方的地址,nHostPort是对方监听的端口.
需要说明的是返回值表明的是连接是否已经成功.
返还TRUE时可以肯定连接成功,但是返回FALSE的时候可能是连接正在进行中,这时需要用后面的要介绍的OnConnectFail和OnConnectSuccessfully来进一步判断.
TXMLReceive(LPCTSTRlpstr)接收根节点的标记名为lpstr的数据包,返回的TXML对象描述了该数据包的内容.
这个调用用于同步的编程接口,在Receive方法的实现中,如果遇到的第37页清华大学毕业设计论文数据包的根结点的标记不为lpstr它会调用OnReceiveMsg方法通知上层.
virtualvoidOnConnectFailed(intnErrorCode);virtualvoidOnConnectSuccessfully();用于重载的虚函数,分别在连接失败和成功时被调用.
nErrorCode是出错代码,用于说明连接失败的原因.
virtualvoidOnAcceptNewSocket(SOCKEThSocket);用于重载的虚函数,如果该CMessageSocket对象处于监听状态,当接收了新的连接时会调用OnAcceptNewSocket方法.
hSocket是新创建的连接的Socket句柄.
virtualvoidOnReceiveMsg(TXML&xmlMsg);用于重载的虚函数,当有数据包到来时,会调用该函数,在该函数中需要对接收到的数据包做相应的处理.
xmlMsg描述了数据包的内容.
除了定义以上接口外,作者还针对SmartPlatform现有的问题对新的接口做了简单的测试,测试的方案是两个进程建立连接,互相发送数据包,数据包长度是[100-30000]的均匀分布,一次连续放松100个数据包.
整个实验共发送30000个数据包.
两个进程均工作正常.
实验说明,在稳定性上,新的Socket通讯层已经比原来的有了很大的提高.
下一步可以将新的Socket通讯层用于SmartPlatform.
6.
1小结本章工作的重点在于提高SmartPlatform的稳定性.
为此作者着重从SmartPlatform的编程模式和底层的socket通讯提出了改进的建议.
同时也通过初步的第38页清华大学毕业设计论文实验和测试证明了该方案的可行性.
第39页清华大学毕业设计论文第七章为SmartPlatform添加"端到端"的通讯模式"端到端"(PeertoPeer)的通讯模式是SmartPlatform的两种通讯模式的一种,本章说了SmartPlatform的"端到端"的通讯模式的实现方法.
7.
1概述SmartPlatform的PeerToPeer的通讯模式旨在为用户提供简单的通讯接口.
SmartPlatform的这一通讯模式是基于RTP[18]和Multicast实现的.
选用Multicast主要是为"一对多"的通讯提供支持.
而利用RTP和缓冲策略保证消息的等时性.
下面解释等时性的含义:首先,不考虑网络的丢包现象.
如果发送方在T1+t1,T1+t2,T1+t3,….
时刻发送了数据d1,d2,d3,…,则反应在接收方,在T2+t1,T2+t2,T2+t3,….
时刻调用消息处理的回调函数,回调函数中的数据包分别是d1,d2,d3,….
但是,考虑到网络丢包的可能性,如果t2包丢掉了,那么接收方则应该在T2+t1,T2+t3,….
时刻回调d1,d3,…这些数据包.
在多媒体实时数据的实时传播中,是允许存在这样的丢包现象的.
7.
2RTPRTP是为数据的实时传输而制定的协议.
尽管RTP也可以在TCP上实现,但是由于TCP存在慢启动算法,拥塞避免算法和可靠连接的机制,会对传输的实时性造成影响.
RTP的应用程序通常采用UDP作为其传输层协议.
因此RTP跟Multicast是相容的.
图7.
1是一个典型的RTP数据流的IP报文格式.
第40页清华大学毕业设计论文图7.
1RTP数据流的IP报文格式RTP为应用提供的服务有,时间戳、负载类型识别、发送者识别等.
其中最重要的是时间戳机制.
由于UDP不保证数据的按序接收,时间戳为收方提供了重新组织数据的可能性.
RTP头的格式如图7.
2:图7.
2RTP的头格式RTP的功能由RTCP(RealtimeControlProtocol)而增强.
它的主要功能就是获得关于网络传输质量的反馈,用户可以根据这些反馈获得关于网络带宽的一些信息,从而做自适应的调整.
它跟踪所有用户的信息.
它从参与会话的用户获得反馈报告,并将这些统计信息定期的发送给所有用户.
7.
3IPMulticastMulticast也称为组播,或者多播,它为多媒体流数据的实时传输提供了一对第41页清华大学毕业设计论文多的支持,以便充分利用网络带宽.
在组播的同一个会话内,可以有多个接收者同时监听一个发送者发出的数据.

一个Multicast的会话由一个MulticastIP地址加端口来标识.
有效的组播地址范围是:224.
0.
0.
0~239.
255.
255.
255,为D类IP地址.
在网络层由IGMP协议(InternetGroupManagementProtocol)实现.
在多媒体会议系统中,基于连接的会话有很大的缺陷.
因为连接的数目随着用户的数目的增长是平方级的,对于n个用户来说,需要n2个连接,即每个用户都必须知道其他的所有用户.
对于中途加入或者退出的用户,管理机制十分的复杂,用户程序必须耗费很多的CPU资源来维护连接信息.
而Multicast很好解决了这个问题.
在一个会话中,任何一个接受者都不知道其他接受者的情况.
一个用户只要加入了一个Multicast组,该组内的所有数据就会自动的转发给该用户.
在路由器连接的不同子网内进行组播,需要路由器的支持.
但是在SmartPlatform这个具体应用中,组播的这个缺点并不是十分明显,因为SmartPlatform最基本的假设就是所有的模块都是运行在同一个局域网里的.
下图描述了RTP和Multicast在网络层次体系结构中的位置:图7.
3RTP和Multicast在网络层次体系结构中的位置第42页清华大学毕业设计论文7.
4实现方案SmartPlatform在Agent端为Agent开发人员提供了如下原语:Create,Subscribe,Send,OnReceive.
发送方需要使用的是Create和Subscribe原语.
Create(GroupName)原语的作用是,向DS注册一个名为GroupName的流数据消息组,如果没有目前其他的Agent注册了改消息组,则DS回为Agent分配一个多播IP和端口.
发送方着只需要调用Send原语向该多播地址发送数据即可.
如果出现冲突,DS会将冲突报告给该Agent.
接收方需要使用的是Subscribe与OnReceive原语.
在接收数据前接收方需要使用Subscribe(GroupName)原语向DS查询需要接收的流数据消息组的多播地址.
如果成功,接收方就开始监听该地址.
一旦接收到数据则根据后面的缓存策略进行缓存,缓存到一定数量的数据包以后便通过OnReceive方法通知用户.
接收方为了保证能够满足等时性要求必须做相应的缓冲,于是就有了所谓缓冲策略的问题.
接收方采用如下的缓冲策略.
接收方有两个状态STATE_PAUSED和STATE_READY.
(1)STATE_PAUSED——暂停状态该状态下,CRTPReceiver是只接收所达到的数据包并将其放入缓存区,并不调用回调函数.
初始状态为STATE_PAUSED态.
(2)STATE_READY——工作状态该状态状态下,接收方既需要接收所到达的数据包也要根据定时关系将数据包通过回调函数的方式通知用户.
(3)状态转换的条件状态切换的条件的条件是:STATE_PAUSEDSTATE_READY,当且仅当缓冲区中缓冲了一定数量的包第43页清华大学毕业设计论文(比如说缓存了5个,或者10个,这个数值可能需要近一步通过实验选取).
STATE_READYSTATE_PAUSED,当且仅当,一次回调函数结束以后发现缓存区已经为空.
7.
5小结本章首先从概述了SmartPlatform的"端到端"的通讯模式.
然后分别介绍了"端到端"的通讯所依赖的两个底层协议:RTP以及IPMulticast.
最后说明了这种通讯模式的具体实现方案.
第44页清华大学毕业设计论文第八章线上协议的改造如3.
1.
1所述SmartPlatform引用线上协议(Wired-protocol)的作用是为了解决跨语言和跨平台的问题.
为了真正实现这个目的,必须要求SmartPlatform的线上协议具有良好的可读性,并且对人能够足够的友好.
这样可以大大减轻开发人员的负担.
另外,我们也希望线上协议能够具有良好的可扩展性,这对SmartPlatform的发展是有好处的.
现有的协议是基于二进制和XML的混合描述的,友好性和可扩展都不是很好.
为此作者提出了如下的方案(图8.
1).
4字节校验域4字节保留域4字节消息长度域不定长消息内容域(基于XML描述)图8.
1新的SmartPlatform的线上协议的消息结构4字节的校验域用固定的内容填充,用来验证消息的合法性.
这个校验域的好处是如果有其他的进程通过某种原因连接上了SmartPlatform的某个模块,可以通过该域来判断它并不是一个合法的SmartPlatform模块.
另外如果由于某种原因造成消息结构的边界出现错误,那么通过这4个字节的校验域可以判断出这种错误.
4字节的保留域可以用来填充协议的版本信息.
留作将来版本检查之用.
以保证只有版本兼容的模块才能够互连.
原消息类型域与消息内容域合并成为现在地消息内容域.
全部使用基于XML的描述,这大大增强了SmartPlatform的协议的可扩展性和友好性.
这四个域中对Socket上层编程可见的只有消息内容域.
简化了编程接口.
同时基于XML的描述具有良好的可扩展性,而且对用户也是十分友好的第45页清华大学毕业设计论文第九章总结与展望本论文首先介绍了清华大学计算机系人机交互与媒体集成研究所得"智能教室"研究计划,并由此引出了媒体所为"智能教室"计划研究开发的"智能空间的软件平台"——SmartPlatform.
本文后续章节通过介绍SmartPlatform以及MIT的Metaglue和SRI的OAA体系结构,总结了SmartPlatform作为"智能空间的软件平台"的优势和目前还存在的缺陷.
针对SmartPlatform的种种问题,作者针对其易用性和稳定性对SmartPlatform做了相应的改进,并为它的线上协议的改造提出了改进的方案.
作者还通过实验对SmartPlatform和OAA进行了性能的测试和评价.
9.
1本论文的工作作者在工程实践以及大四上学期参与了SmartPlatform的开发与维护.
毕业设计阶段的工作如下:维护SmartPlatform的文档,为SmartPlatform的发布提供了:SmartPlatformDevelopers'Guide,SmartPlatformADKReference(VC++Version),SmartPlatformTutorial(VC++Version),TXMLClassReference等文档.
为SmartPlatform开发了Windows环境的安装程序.
为SmartPlatform开发了MSVC++环境下的自动生成Agent框架代码的SmartPlatformAppWizard工具.
正如前文所述,我们希望SmartPlatform能够有足够的易用性,能够被其他的研究机构所接受,用于构建他们的智能空间.
SmartPlatform的开发文档为其他研究机构使用SmartPlatform提供了可能,即使没有我们的帮助,他们也可以通过这些文档学会如何使用SmartPlatform.
而安装程序和Agent框架代码的自动生第46页清华大学毕业设计论文成工具则进一步把开发者从简单重复的劳动中解放出来.
不仅如此,就是在我们自己使用SmartPlatform开发SmartClassroom的时候,我们也发现,这些工具大大的提高了我们的工作效率.
修改SmartPlatform的各个组件中的错误,并为MonitorAgent增加了新的功能.
MonitorAgent是SmartPlatform中的调试器和监控器,Monitor功能的扩展为调试SmartPlatform的应用提供了更强的支持.
设计并实现了SmartPlatform中"端到端"的通讯.
"端到端"的通讯是SmartPlatform的两种基本通讯模式之一.
也是SmartPlatform与其他的软件平台相比的一个重要优势.
"端到端"的通讯实现之后,Agent的开发者,只需要几个简单的调用就可以在智能空间中使用面向流数据的端到端的通讯.
为SmartPlatform的线上协议的改造以及提高socket层的通讯的鲁棒性提出了建议,并初步实现和测试了新的socket通讯层.
这些工作为下一步改进SmartPlatform提供了有力的支持.
设计并和博士生谢伟凯一同完成了SmartPlatform与OAA的性能评测实验.
实验的结果验证了SmartPlatform轻质高效的设计模板.
从实验的结果我们可以看到,SmartPlatform相对OAA而言,有很大的性能提高.
9.
2未来的工作SmartPlatform还需要进一步改进.
一方面要修改线上协议和socket通讯层.
另一方面也需要为SmartPlatform添加新的功能,比如说在SmartPlatform中添加对资源发现,感知上下文的计算以及负载平衡等的支持.
另外在清华大学计算机系媒体所正在和MIT的人工智能实验室开展合作研究,研究的内容是通过Internet连接SmartClassroom和IntelligentRoom,在双方现有应用的基础上研究和开发一些更有趣的应用,目前双方已经为这方面的研究开展了一些工作,并提出了一些应用的场景.
第47页清华大学毕业设计论文从技术上说,为了实现两个智能房间的互连,首先要实现的就是双方的底层平台的互连.
在这里我们并没有因为要实现互联而去修改双方的软件平台,而是提出了一种基于双重身份的Agent的解决方案,如图9.
1.
Legend:AgentinSmartPlatformSmartPlatformMetaglueRMIRMIAXMLonSocketDSAAAAgentinMetaglueDual-citizenshipAgentRMIAAAA图9.
1通过双重身份的Agent实现SmartPlatform和Metaglue的互连.
在这个方案中提出了一个双重身份的Agent,它既是SmartPaltform的Agent又是Metaglue的Agent.
这样,它就可以获得到两个平台中的事件和消息,并根据需要将一部分事件和消息从一个平台转发到另外一个平台,从而实现两个平台的互连.
这个方案的最大好处是不需要修改双方的平台的具体实现,只需要编写一个类似于代理的双重身份的Agent就可以实现互连.
第48页清华大学毕业设计论文参考文献[1]Weiser,Mark.
TheComputerforthe21stCentury.
ScientificAmerican.
pp.
94-10,September1991.
http://www.
ubiq.
com/hypertext/weiser/SciAmDraft3.
html[2]MITAILabHALProject(previousIntelligentRoomproject),2000.
http://www.
ai.
mit.
edu/projects/hal[3]MITMediaLab,SmartRoomshttp://vismod.
www.
media.
mit.
edu/vismod/demos/smartroom/[4]MITMediaLab,KidsRoom,http://vismod.
www.
media.
mit.
edu/vismod/demos/kidsroom/[5]StanfordInteractiveWorkspacesProject.
http://graphics.
stanford.
edu/projects/iwork[6]Fox,Armando,etal.
IntegratingInformationAppliancesintoanInteractiveWorkspace,IEEECG&A,May/June2000[7]GeorgiaTech,AwareHomeProject,1999http://www.
cc.
gatech.
edu/fce/house[8]IBMResearch.
DreamSpaceProjecthttp://www.
research.
ibm.
com/natural/dreamspace/index.
html[9]MicrosoftResearch,EasyLivingProject.
http://www.
research.
microsoft.
com/easyliving/[10]NIST,SmartSpaceLaboratorywebsite:http://www.
nist.
gov/smartspace/[11]MicrosoftResearch,IntelligentEnvironmentResourcePage.
http://research.
microsoft.
com/ierp/[12]C.
H.
Jiang,Y.
C.
Shi,G.
Y.
Xu,"ClassroomintheEraofUbiquitousComputing,"IEEEInternationalConferenceonWirelessLANs,PaNsandHomeNetworks,Pages14-26,5–7Dec.
2001,Singapore.
第49页清华大学毕业设计论文[13]W.
K.
Xie,Y.
C.
Shi,G.
Y.
Xu,D.
Xie,"SmartClassroom-anIntelligentEnvironmentforTele-education"InProceedingsofTheSecondPacific-RimConferenceonMultimedia(PCM2001),Pages662-668,Beijing,China.
SpringerLNCS2195.
[14]蒋长浩.
智能教室及其软件平台的设计与实现.
清华大学工学硕士学位论文.
May,2001.
[15]Y.
Z.
Pei,Y.
C.
Shi,G.
Y.
Xu,"SameView:RealTimeCooperativeDesignontheInternet"InProceedingsof5thInternationalWorkshoponCSCWinDesign,Pages210-214,HongKong,Nov.
2000.
[16]M.
H.
Coen,B.
Phillips,N.
Warshawsky,etal.
"Meetingthecomputationalneedsofintelligentenvironments:TheMetagluesystem,"InProceedingsofMANSE'99,Pages210-213,Dublin,Ireland,1999[17]SRI.
OAAwebsite:http://www.
ai.
sri.
com/~oaa[18]http://www.
ietf.
org/rfc/rfc1889.
txt第50页清华大学毕业设计论文致谢我在清华大学计算机系学习了近四年,感谢它将我带进计算机科学研究的殿堂.
计算机系开设的一系列基础课和专业课为我建立了一个完整的知识体系结构,参与SmartClassroom计划的工作,又为我将来的科学工作打下基础,使我初步具备一个科研工作者的基本素质,培养和锻炼了我发现问题、提出问题、分析问题、解决问题的能力.
在人机交互与媒体集成研究所学习工作的近一年中,史元春老师给我非常多的关怀和帮助.
她平易近人的性格、严谨踏实的作风给我很深的印象.
同时也影响了我工作的态度.
与史元春老师共同工作的时间,将使我受益终身.
智能教室研究计划一直在徐光佑教授的指导下进行的.
徐老师刻苦敬业的精神品质、认真做事的工作态度,也给了我很深的印象.
感谢徐老师对我的指导.

易探云330元/年,成都4核8G/200G硬盘/15M带宽,仅1888元/3年起

易探云服务器怎么样?易探云是国内一家云计算服务商家,致力香港云服务器、美国云服务器、国内外服务器租用及托管等互联网业务,目前主要地区为运作香港BGP、香港CN2、广东、北京、深圳等地区。目前,易探云推出的国内云服务器优惠活动,国内云服务器2核2G5M云服务器低至330元/年起;成都4核8G/200G硬盘/15M带宽,仅1888元/3年起!易探云便宜vps服务器配置推荐:易探云vps云主机,入门型云...

安徽BGP云服务器 1核 1G 5M 29元/月 香港云服务器 1核 1G 19元首月 麻花云

麻花云怎么样?麻花云公司成立于2007年,当前主打产品为安徽移动BGP线路,数据中心连入移动骨干网。提供5M,10M大带宽云主机,香港云服务器产品,数据中心为香港将军澳机房,香港宽频机房 cn2-GIA优质线路、采用HYPER-V,KVM虚拟技术架构一、麻花云官网点击直达麻花云官方网站合肥网联网络科技有限公司优惠码: 专属优惠码:F1B07B 享受85折优惠。最新活动 :双11 云上嗨购 香港云主...

数脉科技:阿里云香港CN2线路服务器;E3-1230v2/16G/240G SSD/10Mbps/3IP,月付374元

数脉科技怎么样?昨天看到数脉科技发布了7月优惠,如果你想购买香港服务器,可以看看他家的产品,性价比还是非常高的。数脉科技对香港自营机房的香港服务器进行超低价促销,可选择10M、30M的优质bgp网络。目前商家有优质BGP、CN2、阿里云线路,国内用户用来做站非常不错,目前E3/16GB阿里云CN2线路的套餐有一个立减400元的优惠,有需要的朋友可以看看。点击进入:数脉科技商家官方网站香港特价阿里云...

jrzj com为你推荐
支付宝查询余额怎么查询支付宝里的余额vista系统重装怎样重装vista系统无线路由器限速设置如何设置无线路由器局域网限速?个性qq资料QQ个性资料百度抢票浏览器现在火车票越来越难买了,新版百度手机浏览器,除了抢票外,还有什么其他功能吗?arm开发板新手入门应如何选择 ARM 开发板?今日热点怎么删除如何彻底删除今日热点网店推广网站开网店如何做推广?xp系统停止服务Windowsxp系统为什么停止服务奇虎论坛奇虎论坛最新推荐歌曲列表·
重庆虚拟主机 免费动态域名 themeforest 谷歌香港 godaddy续费优惠码 一点优惠网 智能骨干网 vip购优汇 什么是刀片服务器 免费全能主机 东莞idc 网页提速 防cc攻击 可外链的相册 阵亡将士纪念日 apnic 杭州电信宽带 双11促销 连连支付 kosskeb4 更多