最近用JADE去模拟一个基于gossip的分布式系统,为了实验师兄设计的p2p管理协议。规模大概在1000个Agent左右,其实每台server跑个2000个也不成问题,但花了不少开销在同步和中心管理上,最终每台server只跑了500个。
用了之后,感觉JADE确实比较强大,我只用了其中很少一部分东西。
下面是我的一些理解和应用:
1、每个JADE平台可以容纳不同的容器(我用的时候,一个容器对应了一台server),但只准有一个主容器,容器中多个Agent(可以根据每个容器的AMS或者DF去查询其中的各个Agent,但好像只有AID的信息).当然,对于我们来说,各容器中的确Agent是透明,不用知道他们是哪的(ip)。
2、每个Agent其实是个线程,JADE把线程的方法重新封装了一下,比如建立Agent的方法setup()其实对应的是start(),doDelete()对应destroy()等。每个Agent有一个AID,用于标识不同的个体(但不能通地过AID取到Agent实体)。每个Agent建立时都会去AMS(Agent Manage System)中去注册。
每个分布式系统(网络上的节点)继承了Agent,添加了更多需要用到的属性(如节点的ID,邻居节点信息等)
3、可以对Agent添加不同的行为,简单行为/循环行为/定时行为等,我主要用了后两者,循环行为用来监听接收消息(ACLMessage,用的blockReceive()方法,用receive()可能开销更大一些),定时行为用来定时更新操作(更新节点信息),每个定时行为又重新封装成了节点的子线程,避免与监听消息冲突。
4、JADE消息机制比较强大,每个Agent有一个发送队列和接收队列,可以发送字符串,也可以发可序列化对象(可以是比较复杂的对象,但要保证复杂对象的所有属性都是可序列化的)。消息体本身有发送者(AID)、接收者(AID)、语言(可以自己设定,根据不同语言对应不同的语义)、内容、策略等。利用Agent中的send()方法进行发送,receive()或blockReceived()方法进行接收。
由于无法根据AID取到Agent的实体,我用了比较笨的方法,在主容器中建了一个MAP,保存每个节点的副本,每个节点定期发送自己的副本到主容器进行更新(这个开销就比较大了,暂时没想到比较好的方法),某节点A要用到其他节点B时,要么直接给B发消息请求信息,要么向主容器请求。
分享到:
相关推荐
`JADE中文教程及笔记 (1).doc`可能是对Jade平台的中文解释和使用经验的总结,对于初学者非常有用。文档可能会涵盖基本概念、实例解析、常见问题和解决方法等内容。 **总结** Jade 4.30作为一款成熟的多智能体开发...
* views:页面文件(jade 模板),后期打算换成 Ejs 模板 * package.json:存储着工程的信息及模块依赖 * app.js:应用核心配置文件(入口文件) Package.json Package.json 文件用于项目依赖配置及开发者信息。它...
- `c:\unix\usr\share\sgml\jade-dsssl`:OpenJade提供的DSSSL样式表基本模块存放位置。 - `c:\unix\usr\share\sgml\isoent`:支持跨平台的ISO字符模块目录。 **2.1.2 环境变量设置**:为了确保DocBook可以正确运行...
GPU Computing Gems Jade Edition 是由NVIDIA推荐的经典的CUDA教程之一,它属于Morgan Kaufmann出版社的GPU计算应用系列。这个系列书籍旨在为研究人员、工程师、学生以及超级计算专业人员提供培训、示例和灵感,以便...
在“ICA.zip”压缩文件中,包含的“ICA笔记”是针对斯坦福大学公开课中机器学习课程的一个部分,专门讨论了独立分量分析这一主题。下面我们将深入探讨ICA的相关知识点。 **1. ICA的基本概念** 独立成分分析的核心...
.ejs .jade .vue【这是在webpack中定义组件的方式,推荐这么用】 问题:网页中静态资源多了以后存在的问题 网页加载速度变慢,因为要多次重复的发送资源请求 要处理错综复杂的依赖关系 如何解决上述两个问题?
描述中提到"jade笔记-智能Agent设计与开发",表明这是一份关于JADE平台的学习资料,涵盖了如何安装、配置以及基本使用JADE进行智能代理的开发。JADE是一个开源的、遵循FIPA(Foundation for Intelligent Physical ...
bss_jade 这是我使用 Shogun 机器学习工具箱进行的 Google Summer of Code 的最终项目。 这是一个 ipython 笔记本,因此查看 GitHub 上的源代码没有多大意义,请前往 nbviewer.org 进行查看: 享受!
### Oracle初学者笔记知识点解析 #### SQLplus登录与基本概念 - **登录方式**:通过SQLplus连接Oracle数据库,常用的方式有两种。一是使用程序组,输入用户名(如scott或system),密码(如tiger),以及主机字符...
系统设计 1 jive设计思路 2 jive的工作内幕 3 Jive源代码研究 4 Jive中的设计模式 5 jive学习笔记 <br> 设计模式 1 大道至简-Java之23种模式一点就通 2 设计模式...
其功能包括让用户创建和共享笔记,这表明该应用具有用户交互性,用户不仅可以保存自己的学习心得,还能分享给其他用户,从而促进知识交流和社区互动。 **标签分析:** "JavaScript"标签揭示了这个项目的核心编程...
这周的学习主要是nodejs的数据库交互上,并使用jade模板一起做了一个用户验证的网站。主要是遇到了一下几个问题。 1.mongodb版本过低 npm ERR! Not compatible with your operating system or architecture: ...
scikit学习0.24+ mdtraj 1.9+ nptyping 1.4+ holoviews 1.14+ 安装 您可以通过以下方式安装准非谐波分析: $ pip install qaa 如果要可视化教程笔记本,可以通过以下方法安装其他依赖项: $ pip install qaa[jupyter...
【描述】描述中的 "LeeHyungi0622.github.io" 同样表明这是一个个人性质的在线平台,可能包含作者 Lee Hyungi 的技术文章、学习笔记或者其他与开发者生活相关的内容。通过 GitHub Pages,作者可以将自己的代码仓库...
系统设计 1 jive设计思路 2 jive的工作内幕 3 Jive源代码研究 4 Jive中的设计模式 5 jive学习笔记 <br> <br> 数据库设计 1 Jive Forums数据库说明(英文) 2 Jive KB...
这个压缩包文件的标题和描述都指向了开发日志或学习笔记,这表明内容可能包含了开发者在进行编程工作或学习过程中积累的经验和心得。 标签为“HTML”,这表明内容主要与超文本标记语言(HTML)相关。HTML是网页设计...
"express-note-taker"是一个基于JavaScript的Web应用项目,它很可能使用了Express....通过深入学习和理解这个项目,你可以掌握构建类似应用所需的技能,包括Express.js框架的使用、数据库交互、路由设计以及用户认证。
"notely_express_app"是一个...这个项目提供了一个学习和实践Express和JavaScript web开发的绝佳实例。通过深入研究源代码,你可以了解如何构建一个完整的Web应用,包括前后端交互、数据库操作以及错误处理等核心概念。
**MEAN Stack简介** MEAN Stack(MongoDB, Express.js, AngularJS, Node.js)是一种全JavaScript技术栈,用于构建动态、...记得在学习过程中,理论结合实践,多做笔记,加深理解,这对提升你的编程技能非常有帮助。
【Express.js:构建Web应用程序的强大框架】 Express.js是Node.js平台上的一个开源Web应用程序框架,它为开发人员提供了一个简洁而...通过学习和熟练运用Express.js,开发者可以高效地创建高性能、可扩展的Web服务。