体验 Jack (Agent 开发环境)






3.50/5 (6投票s)
我讨论了如何设置Jack以及它如何定义代理,并提供了在该环境中编译和运行示例的分步过程。
背景
在过去的六个月中,我一直在研究面向代理的软件工程。尽管这个流行词已经存在了很长时间,但我仍然没有看到任何基于它的H规模实现。我的研究部分更侧重于与之相关的设计问题。
现在,在继续阅读本文之前,我希望读者对代理和分布式人工智能(或者多代理系统)有所了解。如果您不知道从哪里查找它们,请参阅我的入门文章:代理和多代理系统。
JACK(代理开发环境)
在比较不同的设计实践和方法时,我注意到关于代理和基于代理的系统应该包含什么存在相当大的模糊性。为了理清我的思路,我想至少完整地经历一次基于面向代理编程范式的整个开发生命周期。
这就是我遇到Jack的原因。Jack由Agent-Software开发,是一个代理开发IDE,它扩展了Java以整合面向代理编程的概念。因此,在AOSE中,我们讨论的是代理而不是对象。从实现的角度来看,这些代理除了具有与对象相同的基本成员(数据成员、功能)之外,还具有以下组成部分:
- 能力(Capabilities)是代理可重用组件的名称,就像面向对象中的模块一样。它们封装了推理组成部分(事件、计划、子能力等),以向任何代理提供某种能力。
- 计划(Plans)类似于面向对象类中的函数。它们是代理为实现其目标和处理其指定事件而遵循的指令。
- 事件(Events)触发计划。就像我们在.NET中有事件处理程序一样,我们在Jack中有计划。它们会在某些事件发生时立即执行。
- 信念集(Belief Sets)使用通用关系模型表示代理的信念。可以对其应用查询,当发生某些更改时,可以将事件与这些更改关联起来。
用Java设置Jack
在安装Jack之前,您应该在系统上设置Java开发工具包(JDK)。我安装的是:j2sdk1.4.0。我从Java.sun.com下载了它,它是一个大约35MB的包。这还不是全部。Java Classpath和Path是两个必须设置为特定值的环境变量。在Windows XP下,请遵循以下步骤:
- 进入控制面板中的“系统”
- 在“高级”选项卡中,单击“环境变量”
- 将有两个分组框:“[用户名]的用户变量”、“系统变量”
- 在“用户变量”下,如下编辑CLASSPATH属性。(格式:位置;位置;位置..)
- 添加此项:C:\j2sdk1.4.0\jre\lib;C:\j2sdk1.4.0\lib; (任何对Java类的引用都应遵循这些目录)
- 现在在“系统变量”下,如下编辑PATH属性
- 添加此项:C:\j2sdk1.4.0\bin; (此文件夹包含Java程序编译器、执行器和我们可以在命令提示符或任何IDE或JDE中使用的其他必要工具)
- 好的,一切都保存了新条目
- 要检查您是否能够编译/执行,请转到命令提示符并输入“
javac
”。如果显示“命令无法识别”,则表示存在问题,否则您已准备好继续!
现在您需要Jack。可以从此链接下载Jack的评估副本。
下载并安装Jack后,您可以从程序快捷方式执行IDE
开始->程序->Agent Software->JACK Developer
将出现一个黑色的DOS屏幕,几秒钟内IDE将加载。DOS屏幕会一直与IDE保持同步,直到您关闭它,所以请忽略它。界面看起来像这样:

进入此屏幕后,您可以从文件菜单中选择以下选项
- 创建一个新项目
- 打开现有项目
在执行任何操作之前,请记住以下文件扩展名以方便使用

现在,当您创建一个新项目(假设为“sss”)时,您可能会在解决方案资源管理器面板上看到这个展开的文件树

每个文件都可以关联一个文档。您可以拥有任意数量的设计片段。可以使用任何可用的面向代理的工程方法来设计图表和交互模型。您可以通过菜单将任何内容添加到项目中,这就像Microsoft Paint一样简单。
现在我不会在这里深入探讨细节,因为您可以在Jack的文档中非常容易地找到所有内容,甚至超出您的需求。
基本上,似乎模糊不清的是从哪里开始,比如开发一个基于代理的系统的第一步应该是什么。这正是H我写这篇文章的目的。无论如何,简而言之,就像在OOP中我们创建类一样,在这里我们将创建代理!
Jack代理可以主动和被动地表现出推理行为。它具有
- 一组关于世界的信念(思想)(其信念集)
- 一组它可能响应的事件(发生的事情)
- 一组它可能希望作为事件结果实现的目标
- 一组描述它如何处理可能出现的目标或计划。
系统在代理存在于任何环境中并等待事件发生的感知下工作。当事件发生时,它会探索其信念集以查看是否可以处理该事件。如果它相信它知道解决方案,这意味着它肯定有一些可以作为结果执行的计划。整个场景(事件、信念集和计划)都封装在能力定义中。除了这种事件驱动行为,代理还可以通过为自身或任何其他代理实例化目标来声明显示主动行为。
编译和执行示例项目
Jack附带了几个示例,演示了在相应环境中的典型代理行为。现在为了结束本文,我将演示如何编译和执行在Jack上开发的基于代理的系统。按照以下步骤执行ATM-Graphical示例:
- 帮助 -> 从示例创建项目 -> atm-graphical
- 选择您希望项目加载的文件夹以及Jack将放置Name.prj文件的位置。您可以在此之前创建自己的文件夹。
- 几秒钟内,项目将加载,您将看到此屏幕
- Jack提供了一个编译器实用程序。您可以从工具(Ctrl+shift+C)打开它
- 它有五个选项卡。选项已经设置好;暂时不要修改任何内容。
- 单击“Compiler Application”(编译器应用程序)。
- 不要传输或移动任何东西,只需单击“COMPILE”按钮。
- Jack将生成适当的Java兼容文件,并将编译器实用程序切换到“Output/Errors Tab”(输出/错误选项卡)。
- 在同一个选项卡中,如果您看到:[JackBuild Done],这意味着编译成功,并且Jack已将源代码转换为纯Java形式,然后是Javac的最终编译成功。
- 否则,如果您看到“couldn't execute Javac”,则表示您未在系统环境变量“PATH”中正确定义JDK/bin路径。即使在这种情况下,也不要更改“Option Tab”(选项卡)中的条目,这不会改变任何内容。
- 现在您已准备就绪。单击“Run Application Tab”(运行应用程序选项卡)。
- 每个Java应用程序都有一个入口点
main()
,它总是位于*.class文件中。 - 在此示例中,它是
Main.class
。 - 双击它,然后等待。
- 将出现图形ATM机的简单GUI。
- 您的账号是10,PIN码是10,您最初有1000美元。
- 玩玩它。享受!
智能代理自主执行简单任务的能力非常有益。使其具有吸引力的关键特性如下:
- 能够说“不”和“走”
- 高于面向对象构造的更高抽象级别
- 与主动和被动行为相关的灵活性
- 分布式人工智能(DAI)的演示
- 能够以小组形式协作(多代理系统)
历史
- 2006年4月1日:首次发布