Agilla简介
华盛顿大学mobilab
The Mobile Computing Laboratory致力于与mobile ad hoc(移动自组网络)和无线传感器网络相关的模型、中间件、协议和系统设计。
http://mobilab.cse.wustl.edu/projects/agilla/?qqqqq=www.sohu.com
SensorWare简介
http://sensorware.sourceforge.net/?qqqqq=www.sohu.com#_Toc69658903
Mobile agent发展
http://tieba.baidu.com/p/156841781/?qqqqq=www.sohu.com
野火跟踪:
一个火源探测agent会坚持火灾的发生,同时agent会克隆自己。克隆之后该agent会转变成为一个火源跟踪agent重复的克隆指导围绕火源形成一个边界。一旦这个边界形成之后,代理会持续不断的迁移和克隆来维持匹配这个边界。
同时一个通知信号会发送给消防员告知他火灾的位置。
消防员会向网络中发送一个引导agent来引导他一条通向火灾处的安全路径。
Agilla中间件架构
Agilla是执行在TinyOS(Tiny OS是UCBerkeley(加州大学伯克利分校)开发的开放源代码操作系统,专为嵌入式无线传感网络设计)系统之上的,它可以为多agent在一个节点上执行一系列操作。每个节点上可执行agent的数量与节点有效支持的存储有关。 每个代理都是自治的,但是有一点特殊就是系统中多个代理之间共享中间件资源。 在每个节点上Agilla提供两种类型的资源 :邻居链表和元组空间。邻居链表包含了邻居节点的地址,这对于agent决定移动或者克隆到哪个地方是必不可少的。元组空间提供了agent之间一种解除耦合的通信方式。它是一种共享存储架构,寻址方式是field-matching而不是按内存地址。这个主要用于agent之间的通信。
Agilla的挑战
传感器节点有限的计算资源,例如MICA2motes只有128kb的指令空间和4kb的存储空间,微处理器主频只有8Mhz。
Motes之间无线互联可靠性较低并且带宽只有38.4Kbaud。
移动代理特别容易因为代理迁移和克隆因素干扰导致信息丢失。
使用方法
Agilla 为每个agent提供一个基于堆栈的结构。这样大多数指令都是1字节节省了开销。 为了支持内部agent通信,Agilla在节点上维持一个元组空间,同时也可以远程访问。节点之间通过元组空间互联,可以保持自治,并且从时间和空间上解耦合。为了最小化消息丢失的影响,代理被切割成小包 (< 41 bytes),每个周期内迁移一跳,并且具有超时和重传机制。由于hop-by-hop处理会导致一定程度的store-and-forward延迟,所以这种情况只用在agent迁移和克隆时候,远程元组空访问则不会。远程元组空间操作是非阻塞的,可以避免死锁导致的信息丢失。强调传感器网络中空间位置的重要性,Agilla通过地址位置对节点进行寻址。所以远程操作都把位置信息作为一个参数,例如, 克隆中不是用节点的ID,而是location(1,1)。
一个Agilla代理包含它的代码、堆、操作栈和一系列相关寄存器(ID、程序计数器、condition)。每个agent有50字节的栈,这个是由数据类型大小动态分配的。Agent的指令并不是存储在agent内部而是由Agilla中间件负责管理的。Stack 后进先出。
( "Java 的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分 配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。"
“栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本 类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。
)stack存指令,heap是存数据
一个实例过程
h://mobilab.cse.wustl.edu/projects/agilla/Examples/single_agent_fire_detection/index.html
System Tuples
有两种类型的元组:agent元组和host元组。Agent元组包含ID,这个元组有两个Filed:aid和AgentID。当代理终止或者迁移出主机后,这个元组会被移走。主机元组主要用于发现邻居节点的位置,有两个Filed:hid和location。
网络拓扑
http://mobilab.cse.wustl.edu/projects/agilla/docs/network_topology.html
Agilla通过过滤非邻居节点信息(只与邻居通信)来建立一个人工的n*m大小栅格的多跳传感器网络。一个节点只能依据栅格拓扑与其直接相邻的邻居节点进行通信。这个邻居可以是水平方向、垂直方向和倾斜方向,最多8个邻居节点。节点依赖于location被识别,这个位置信息是通过它的地址计算出来的。一个节点在一个时间点仅位于特定的位置(x,y)。
栅格位置和节点地址计算方式:
ID = (x - 1)+ (y - 1) * (number of columns)
同样给出节点ID,它的位置也可以计算出来。
x = [(ID) mod(number of columns)] + 1
y = (ID – x + 1)/(number of columns) + 1
下面是一个4*4的网络:
Agilla实现了一个简单的greedy-forwarding,每个代理只是看着邻居,将消息转发到哪个邻居依赖于是否是接近最终目的地。如果没有邻居比节点本身接近目的地,迁移和元组空间访问操作将会失败。它不会接受节点故障或执行邻居发现。
例如 (1,1)到(3,4)。正常情况肯定是对角路径最短,但这个没有直接的对角路径。行3-1+1=3 长度为3,列4-1+1=4>3,所有有个3*3的最短路径可以先走。
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。
贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。这样看似没办法达到全局最优,但是适合于agent计算存储空间限制的情况。
(其实这个算是mobile agent的初步探索,需要middleware的解释与支持才能发挥效益,当前只是实现简易agent的简单移动)
使用的是形如汇编指令集合的代码,这样容量较小,主体功能集中在middleware层中。
指令集合
http://mobilab.cse.wustl.edu/projects/agilla/isa.html
单个agent进行火灾跟踪
这是一个对火灾检测和形成边界的实例。火灾点同样也是一个agent,在本地的元组空间OUTs一个元组包含字符串“fir”,并且持续闪烁红色led灯。火灾跟踪agent注入到网络中围绕火灾点形成一个边界,它初始化之后就在网络中游荡来寻找火灾点。每当到达一个节点,就会检测它的邻居节点是否着火。如果是,它就会从火灾点水平和垂直两个方向克隆自己。这个过程将重复进行,直到形成一个边界。并且这个过程会持续进行来适应动态的火情变化。
其中有两种类型火灾agent:静态和动态。静态不会扩张,动态会扩张,甚至延伸到整个网络。
为了测试火灾探测agent的效果,进行了两个实验。实验运行在5*5的无线传感器网络。第一个实验测试跟踪agent针对不同静态形状火灾形成边界的效果,下面是四种场景。第二个实验是动态火灾情况,并且设定两种场景就是区分不同火情蔓延速度。动态中初始注入了四个跟踪agents,这样可以最大化发现火情的速度。