将高度自治的参与者视为代理人是否合理?

9

我的学术背景是多智能体系统(用JADE开发的Java程序),对并发编程中的Actor范式只有基本了解。现在我开始探索Scala,不禁惊讶于Agent和Actor方法之间的相似之处。

我非常想在我的下一个研究项目中使用Scala的Actor库,而不仅仅是调用JADE库,因为这将迫使我更深入地掌握这门语言。此外,JADE的行为定义方式并不适用于我的问题。

高度自治的Actor和Agent之间是否存在根本差异,我是否遗漏了些什么?

1个回答

11

是的,它们是有区别的。对于非常简单的代理,actors 和 agents 可能是同一个东西。然而,在“自主代理”中,至少我通常会假定类似于一种信仰-欲望-意图模型,其中代理在内部建立了一个抽象环境的模型,以及与之交互的其他代理,这样可以制定计划来与此环境进行交互以实现其目标。

虽然 actor 也可能拥有所有这些,但单个代理也可能由多个 actor 组成,共同处理 BDI 框架的不同部分。actor 是一个调度单位。如果您的代理基本上是单线程的,那么适合使用 actor。如果它们在内部执行并行工作,则每个代理需要多个 actor。

那么,actors 和 agents 有什么共同点?

  • 它们都通过传递消息进行通信。

  • 它们都(通常)具有内部状态——即使在执行状态中隐含。

  • 预期它们都不与其他 actors/agents 共享状态。

  • 预期它们都独立于其他 actors/agents 进行调度。

代理比 actor 多什么?

  • 代理通常遵循规定代理行为的模型,例如 BDI,而 actor 通常不遵循。然而,反应式代理在这方面与 actors 类似。

  • 代理可能具有多个内部调度单元。然而,对于没有这样做的代理,它们在这方面与 actors 类似。

actors 比代理多什么?

  • 我想不出任何东西,但 Scala actors 可以共享状态。

1
我绝对不同意将BDI和自主代理等同起来。BDI只是一类代理的可能架构之一。有些代理架构具有显式环境模型,而不是BDI,例如在部分可观察环境中的反射代理。我确实相信你回答的第二部分是有价值的。演员并不像线程那样是代理,但是任何一个都可以用来实现创建自主代理的目标。例如,JADE的代理程序位于Java线程之上。感谢您的帮助。 - DuncanACoulter
1
啊,我看到你在更新你的回答,而我正在写我的评论……我认为你的新回答很好地回答了我的问题。 - DuncanACoulter
抱歉,我从来没有想过将自主代理与BDI等同起来。我只是打算以BDI作为例子。我不太确定如何重新表述我的答案,但我已经稍作改进。 - Daniel C. Sobral

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接