多智能体系统#

实现智能的一种可能方法是所谓的涌现(或协同)方法,其基于这样一个事实:许多相对简单的智能体的组合行为可以导致整个系统表现出更复杂(或更智能)的行为。从理论上讲,这种方法基于集体智能涌现论进化控制论的原则,这些理论认为,当低级系统被适当地组合成高级系统时,高级系统会获得某种附加价值(即所谓的元系统转变原则)。

课前测验#

多智能体系统这一方向在1990年代随着互联网和分布式系统的发展在人工智能领域兴起。经典的人工智能教材之一《人工智能:现代方法》从多智能体系统的角度探讨了经典人工智能的观点。

多智能体方法的核心是智能体的概念——一个生活在某种环境中的实体,它可以感知环境并对其采取行动。这是一个非常广泛的定义,智能体可以有许多不同的类型和分类:

  • 按其推理能力:
    • 反应型智能体通常具有简单的请求-响应行为
    • 推理型智能体采用某种逻辑推理和/或规划能力
  • 按智能体代码执行的位置:
    • 静态智能体在专用网络节点上工作
    • 移动智能体可以在网络节点之间移动其代码
  • 按其行为:
    • 被动智能体没有具体目标。这类智能体可以对外部刺激做出反应,但不会主动采取行动。
    • 主动智能体有一些目标并努力实现这些目标
    • 认知智能体涉及复杂的规划和推理

如今,多智能体系统被应用于许多领域:

  • 在游戏中,许多非玩家角色使用某种人工智能,可以被视为智能体
  • 在视频制作中,渲染涉及人群的复杂3D场景通常使用多智能体模拟
  • 在系统建模中,多智能体方法用于模拟复杂模型的行为。例如,多智能体方法已成功用于预测COVID-19疾病在全球的传播。类似的方法可以用于模拟城市交通,并观察其对交通规则变化的反应。
  • 在复杂的自动化系统中,每个设备可以作为一个独立的智能体,这使得整个系统不那么单一且更具鲁棒性。

我们不会深入探讨多智能体系统,但会考虑一个多智能体建模的示例。

NetLogo是一个基于修改版Logo编程语言的多智能体建模环境。这种语言是为教授编程概念给孩子而开发的,它允许你控制一个名为乌龟的智能体,该智能体可以移动并留下痕迹。这使得创建复杂的几何图形成为可能,这是一种非常直观的方式来理解智能体的行为。

在NetLogo中,我们可以使用create-turtles命令创建许多乌龟。然后我们可以命令所有乌龟执行一些动作(例如下面的例子中向前移动10点):

create-turtles 10
ask turtles [
  forward 10
]

当然,如果所有乌龟都做同样的事情就没什么意思了,所以我们可以ask某些乌龟群体,例如那些在某个点附近的乌龟。我们还可以使用breed [cats cat]命令创建不同种类的乌龟。这里cat是种类的名称,我们需要同时指定单数和复数形式,因为不同的命令使用不同的形式以提高清晰度。

✅ 我们不会深入学习NetLogo语言本身——如果你感兴趣,可以访问优秀的初学者互动NetLogo词典资源。

你可以下载并安装NetLogo来尝试。

模型库#

NetLogo的一个优点是它包含一个可供尝试的工作模型库。进入File → Models Library,你会发现许多类别的模型可供选择。

NetLogo模型库

Dmitry Soshnikov提供的模型库截图

你可以打开其中一个模型,例如Biology → Flocking

主要原则#

打开模型后,你会进入NetLogo的主界面。以下是一个描述狼和羊种群的示例模型,考虑到有限资源(草地)。

NetLogo主界面

Dmitry Soshnikov提供的截图

在这个界面上,你可以看到:

  • 界面部分包含:
    • 智能体生活的主场地
    • 不同的控件:按钮、滑块等
    • 用于显示模拟参数的图表
  • 代码标签包含编辑器,你可以在其中编写NetLogo程序

在大多数情况下,界面会有一个Setup按钮,用于初始化模拟状态,以及一个Go按钮,用于启动执行。这些按钮由代码中的相应处理程序处理,代码如下所示:

to go [
...
]

NetLogo的世界由以下对象组成:

  • 智能体(乌龟),可以在场地上移动并执行某些操作。你可以使用ask turtles [...]语法命令智能体,括号中的代码由所有智能体以乌龟模式执行。
  • 补丁是场地上的方块区域,智能体生活在其上。你可以引用同一补丁上的所有智能体,或者更改补丁的颜色和其他属性。你也可以ask patches执行某些操作。
  • 观察者是一个独特的智能体,控制整个世界。所有按钮处理程序都以观察者模式执行。

✅ 多智能体环境的美妙之处在于,以乌龟模式或补丁模式运行的代码会由所有智能体同时并行执行。因此,通过编写少量代码并编程单个智能体的行为,你可以创建整个模拟系统的复杂行为。

群体行为#

作为多智能体行为的一个示例,我们来看看**群体行为。群体行为是一种复杂模式,非常类似于鸟群飞行的方式。观察它们飞行时,你可能会认为它们遵循某种集体算法,或者它们拥有某种形式的集体智能*。然而,这种复杂行为的产生仅仅是因为每个单独的智能体(在这种情况下是*鸟)只观察短距离内的其他智能体,并遵循三个简单规则:

  • 对齐 - 朝邻近智能体的平均方向转向
  • 凝聚 - 尝试朝邻居的平均位置转向(远距离吸引
  • 分离 - 当与其他鸟靠得太近时,尝试远离(短距离排斥

你可以运行群体行为示例并观察其行为。你还可以调整参数,例如分离程度视距,定义每只鸟能看到的范围。注意,如果你将视距减少到0,所有鸟都会变得“盲目”,群体行为会停止。如果你将分离减少到0,所有鸟会聚集成一条直线。

✅ 切换到代码标签,查看群体行为的三个规则(对齐、凝聚和分离)如何在代码中实现。注意我们如何仅引用视野范围内的智能体。

其他可查看的模型#

还有一些有趣的模型可以供你实验:

  • Art → Fireworks展示了烟花如何被视为单个火流的集体行为
  • Social Science → Traffic BasicSocial Science → Traffic Grid展示了城市交通在1D和2D网格中有或没有交通灯的模型。模拟中的每辆车遵循以下规则:
    • 如果前方空间为空——加速(直到某个最大速度)
    • 如果看到前方有障碍物——刹车(你可以调整司机的视距)
  • Social Science → Party展示了人们在鸡尾酒会上如何聚集。你可以找到导致群体幸福度最快提升的参数组合。

从这些示例中可以看出,多智能体模拟可以成为理解由遵循相同或类似逻辑的个体组成的复杂系统行为的一种有用方式。它还可以用于控制虚拟智能体,例如计算机游戏中的NPC,或3D动画世界中的智能体。

推理型智能体#

上述智能体非常简单,通过某种算法对环境变化做出反应。因此它们是反应型智能体。然而,有时智能体可以进行推理和规划其行动,这种情况下它们被称为推理型智能体

一个典型的例子是个人智能体,它接收到人类的指令去预订一个度假行程。假设互联网上有许多智能体可以帮助它。它需要联系其他智能体以查看哪些航班可用,不同日期的酒店价格是多少,并尝试协商最佳价格。当度假计划完成并得到主人确认后,它可以继续预订。

为了实现这一点,智能体需要通信。为了成功通信,它们需要:

  • 一些标准语言来交换知识,例如知识交换格式(KIF)和知识查询与操作语言(KQML)。这些语言基于言语行为理论设计。
  • 这些语言还应包括一些协商协议,基于不同的拍卖类型
  • 一个通用本体,以便它们引用相同的概念并了解其语义
  • 一种发现不同智能体功能的方法,也基于某种本体

推理型智能体比反应型智能体复杂得多,因为它们不仅对环境变化做出反应,还需要能够主动采取行动。一种提出的推理型智能体架构是所谓的信念-愿望-意图(BDI)智能体:

  • 信念构成了智能体对环境的知识集合。它可以被结构化为知识库或智能体可以应用于环境中特定情况的一组规则。
  • 愿望定义了智能体想要做什么,即它的目标。例如,上述个人助理智能体的目标是预订旅行,而酒店智能体的目标是最大化利润。
  • 意图是智能体为实现其目标而计划的具体行动。行动通常会改变环境并导致与其他智能体的通信。

有一些平台可用于构建多智能体系统,例如JADE这篇论文包含了多智能体平台的综述,以及多智能体系统的简史及其不同的使用场景。

结论#

多智能体系统可以采取非常不同的形式,并应用于许多不同的领域。 它们通常专注于单个智能体的简单行为,并通过协同效应实现整个系统的更复杂行为。

🚀 挑战#

将本课内容应用于现实世界,尝试构思一个可以解决问题的多智能体系统。例如,多智能体系统需要做些什么来优化校车路线?它如何在面包店中工作?

课后测验#

复习与自学#

复习这种系统在工业中的应用。选择一个领域,例如制造业或视频游戏行业,探索多智能体系统如何用于解决独特问题。

NetLogo作业#