最近,老姐在做金融体系仿真的课题,让我帮她下载Swarm仿真平台和JADE智能体开发平台,一看是Java的,就搜索了一把,看起来还不错,很有借鉴意义。
它的主要实现结构,有点像生命周期管理容器(像osgi, jmx等),以松耦合管理各元素,而它管理的元素就是“智能体”。
“智能体”注册在“环境”中,“环境”类似于名称服务(像jndi, ldap, uddi等), 用于注册及查找各智能体,以及为各“智能体”提供交互。
“环境”可以分级控制,但必需有且仅有一个主“环境”,其它“环境”必需在主“环境”中注册。
“环境”提供一个类似于jms的消息对列,所有“智能体”的交互都通过这个消息对列进行。
“智能体”可以包含很多“行为”,所有行为都由“环境”条件的改变而触发,“智能体”只需响应,并做自己该做的事。
“智能体”的逻辑实现,主要是收集尽可能的信息(自学习),分析并做出有利于自己的决择,同时发布消息。
然后,通过控制台发布启动因子,系统就会在各“智能体”的交互下不停的演译,从而模拟出真实社会的发展。
主要类结构如下:
// 环境
public class DFService { // (DF = Directory Facilitator)
// 注册智能体
public void register(Agent agent, AgentDescription desc) {}
}
// 智能体
public abstract class Agent {
// 初始化智能体
public abstract void setup();
}
// 行为
public abstract class Behaviour {
public Behaviour(Agent agent) {}
// 行为逻辑,响应环境
public abstract void action();
// 行为是否结束,结束的行为将被移除
public abstract boolean done();
}
// ACL消息体(FIPA国际标准)
public class ACLMessage { // (ACL = Agent Communication Language)
public void addReceiver(AID id) {} // AID 类似于 UUID 或 GUID
public void setLanguage(String) {}
public void setContent(String) {}
}
引用一个金融体系的例子:
以银行网络中的人工智能体为基础,
将交易成本、规模经济、有限合理、异质性和战略性的相互作用的典型因素融入到不断发生存贷操作的金融网络中,
构成人工银行网络模拟器。它具有引起内生仲裁的“现实世界”的特征。
这个人工银行网络以一种绝对分散化的方式,排除掉任何可预见的推论程序,
在一个接一个的循环中发展成为一种非意识信贷系统,智能体之间持续不断的交易活动是推动系统演化的动力,
这种来自于底层的智能体间相互作用的选择机制使得系统不断向前发展。
在模型中,银行中介的存在被置于具有有限合理性,高度不完全信息和高交易成本的环境中。
不相协调的代理人根据简单的经验进行选择并非有意的创造出有利于减低环境的复杂性组织。
这种状态是动态的,而且调整过程非常明显,与应用正统动态分析的传统微分方程分析模型相比,这种方法更有效。
模型能够合理的超越对银行组织演化轨迹的肤浅认识,当智能体不得不面对广泛的外来冲击时,观察智能体的行为逻辑成为可能。
可以有效监控那些(完全分散)的突发现象。