我的学术背景是多智能体系统(用JADE开发的Java程序),对并发编程中的Actor范式只有基本了解。现在我开始探索Scala,不禁惊讶于Agent和Actor方法之间的相似之处。
我非常想在我的下一个研究项目中使用Scala的Actor库,而不仅仅是调用JADE库,因为这将迫使我更深入地掌握这门语言。此外,JADE的行为定义方式并不适用于我的问题。
高度自治的Actor和Agent之间是否存在根本差异,我是否遗漏了些什么?
我的学术背景是多智能体系统(用JADE开发的Java程序),对并发编程中的Actor范式只有基本了解。现在我开始探索Scala,不禁惊讶于Agent和Actor方法之间的相似之处。
我非常想在我的下一个研究项目中使用Scala的Actor库,而不仅仅是调用JADE库,因为这将迫使我更深入地掌握这门语言。此外,JADE的行为定义方式并不适用于我的问题。
高度自治的Actor和Agent之间是否存在根本差异,我是否遗漏了些什么?
是的,它们是有区别的。对于非常简单的代理,actors 和 agents 可能是同一个东西。然而,在“自主代理”中,至少我通常会假定类似于一种信仰-欲望-意图模型,其中代理在内部建立了一个抽象环境的模型,以及与之交互的其他代理,这样可以制定计划来与此环境进行交互以实现其目标。
虽然 actor 也可能拥有所有这些,但单个代理也可能由多个 actor 组成,共同处理 BDI 框架的不同部分。actor 是一个调度单位。如果您的代理基本上是单线程的,那么适合使用 actor。如果它们在内部执行并行工作,则每个代理需要多个 actor。
那么,actors 和 agents 有什么共同点?
它们都通过传递消息进行通信。
它们都(通常)具有内部状态——即使在执行状态中隐含。
预期它们都不与其他 actors/agents 共享状态。
预期它们都独立于其他 actors/agents 进行调度。
代理比 actor 多什么?
代理通常遵循规定代理行为的模型,例如 BDI,而 actor 通常不遵循。然而,反应式代理在这方面与 actors 类似。
代理可能具有多个内部调度单元。然而,对于没有这样做的代理,它们在这方面与 actors 类似。
actors 比代理多什么?