原文出处:Multi-Agent Systems 原作者:Microsoft · 许可证:MIT License 中文译本由诸葛AI学院整理,仅供学习参考,版权归原作者与微软所有。
实现智能有一条可行的路,叫涌现(emergent)方案,也叫协同(synergetic)方案。它的出发点是:许多相对简单的智能体(agent)合在一起行动,整个系统就能表现出更复杂、更聪明的行为。理论根基是集体智能、涌现论和进化控制论。这几个学派的主张一致:低级系统按正确的方式组合成高级系统时,会多出一些附加值,也就是所谓的元系统跃迁原则。
课前测验
多智能体系统(Multi-Agent Systems)这个方向在 1990 年代进入 AI 领域,背景是互联网和分布式系统的兴起。经典教材《人工智能:一种现代方法》讲经典 AI 时,采用的就是多智能体的视角。
多智能体路线的核心概念是智能体:一个活在某个环境(environment)里的实体,能感知环境,也能对环境采取行动。这个定义很宽,智能体因此有各式各样的类型和分类法:
- 按推理能力分:
- 反应型(reactive)智能体:行为通常是一问一答式的简单响应
- 慎思型(deliberative)智能体:会做某种逻辑推理,或者具备规划能力
- 按代码运行位置分:
- 静态(static)智能体:固定在一个网络节点上工作
- 移动(mobile)智能体:可以带着代码在网络节点之间迁移
- 按行为方式分:
- 被动智能体(passive agents):没有特定目标。这类智能体能响应外部刺激,但自己不会主动发起动作。
- 主动智能体(active agents):有自己的目标,并围绕目标行动
- 认知智能体(cognitive agents):涉及复杂的规划与推理
多智能体系统如今用在不少应用场景里:
- 游戏:很多非玩家角色都带某种 AI,可以看成智能体
- 影视制作:涉及人群的复杂 3D 场景渲染,通常靠多智能体模拟来完成
- 系统建模:用多智能体方法模拟复杂系统的行为。比如它曾被成功用于预测 COVID-19 在全球的传播,同样的方法可以给城市交通建模,观察交通规则改动后车流如何反应。
- 复杂自动化系统:每台设备都是一个独立智能体,整个系统因此不那么庞大笨重,反而更抗故障。
这节课不会花太多时间深挖多智能体系统,只做一个多智能体建模的例子。
NetLogo
NetLogo 是一个多智能体建模环境,用的是改造过的 Logo 编程语言。Logo 本来是给小孩子讲编程概念用的,它让你控制一个叫海龟(turtle)的智能体:海龟会移动,一路留下轨迹。靠这个机制可以画出复杂的几何图形,也是理解智能体行为最直观的办法。
在 NetLogo 里,用 create-turtles 命令可以创建许多海龟。然后命令所有海龟一起做某件事(下面这个例子是各向前走 10 步):
create-turtles 10
ask turtles [
forward 10
]
海龟都干同一件事没什么意思,所以我们可以只 ask 某一组海龟,比如某个点附近的那些。也可以用 breed [cats cat] 命令创建不同品种的海龟。这里 cat 是品种名,单数和复数两种形式都要声明,因为不同的命令会分别使用这两种形式,语义更清楚。
✅ 这里不打算教 NetLogo 语言本身。想深入的话可以去看Beginner's Interactive NetLogo Dictionary,是一份很出色的互动学习资源。
你可以下载 NetLogo 装上试用。
模型库
NetLogo 的一大好处是自带一批能直接跑的模型。打开 File → Models Library,有很多类别可以挑。
原文此处有一张图,画的是 NetLogo 模型库的窗口,左侧按 Biology、Social Science 等类别列出可选模型(Dmitry Soshnikov 的截图)。
随便打开一个模型,比如 Biology → Flocking(群飞)。
主要原理
模型打开后进入 NetLogo 主界面。下面这个示例模型描述的是狼和羊的种群,食物(草)资源有限。
原文此处有一张图,画的是 NetLogo 主界面:左边是仿真场地和操作按钮,右边是代码区(Dmitry Soshnikov 的截图)。
在这个界面上你能看到:
- Interface(界面)区,包含:
- 主场地,所有智能体住在上面
- 各种控件:按钮、滑块等
- 图表,用来显示仿真的参数
- Code 标签页,里面是编辑器,可以输入 NetLogo 程序
多数模型界面上有一个 Setup 按钮负责初始化仿真状态,一个 Go 按钮负责开始运行。两者对应代码里形如下面的处理函数:
to go [
...
]
NetLogo 的世界由以下对象组成:
- 智能体(agents,即海龟):可以在场地上移动、做事情。命令的方式是
ask turtles [...]语法,括号里的代码会以海龟模式被所有智能体同时执行。 - 小块(patches):场地上的一块块正方形区域,海龟住在上面。你可以引用同一块区域上的所有智能体,也可以改变小块的颜色和一些其他属性。同样可以
ask patches让它们做事情。 - 观察者(observer):独一无二的、控制整个世界的智能体。所有按钮的处理函数都在观察者模式下执行。
✅ 多智能体环境的妙处在于:跑在海龟模式或小块模式里的代码,会被所有智能体同时并行执行。你只要写一点代码、编排好单个智能体的行为,整个仿真系统就能表现出复杂的行为。
群飞
多智能体行为的一个例子是群飞(flocking)。群飞是一种复杂的运动模式,很像鸟群飞行。看鸟群上天,你会以为它们在执行某种集体算法,或者拥有某种集体智能。其实这种复杂行为,来自每个个体(在这个例子里是一只鸟)只观察离自己不远的同类,并且遵守三条简单规则:
- 对齐(alignment):转向邻居平均飞行方向
- 凝聚(cohesion):朝邻居的平均位置靠拢(远程吸引)
- 分离(separation):离别的鸟太近时,试图躲开(近程排斥)
你可以运行群飞示例观察行为,也可以调参数,比如分离程度,或者决定每只鸟能看多远的视野范围。注意:视野范围调成 0,所有鸟变成瞎子,群飞就散了;分离程度调成 0,所有鸟会挤成一条直线。
✅ 切到 Code 标签页,看看群飞的三条规则(对齐、凝聚、分离)在代码里是怎么实现的。留意代码只引用视野之内的智能体。
其他值得一看的模型
还有几个模型适合动手玩:
- Art → Fireworks:展示烟花如何被看作一束束火流的集体行为
- Social Science → Traffic Basic 和 Social Science → Traffic Grid:一维和二维网格下的城市交通模型,可选有无红绿灯。仿真里的每辆车遵守两条规则:
- 前方有空位就加速(不超过某个最高速)
- 看到前方有障碍就刹车(驾驶员能看多远可以调)
- Social Science → Party:展示酒会上人群如何聚成一堆。你可以找到让全场幸福感上升最快的参数组合。
从这些例子能看出,多智能体仿真很适合用来理解一种复杂系统:系统由众多个体组成,个体遵守相同或相近的逻辑。它也能用来控制虚拟智能体,比如电脑游戏里的 NPC(非玩家角色),或者 3D 动画世界里的智能体。
慎思型智能体
前面说的智能体很简单,靠某种算法响应环境变化,属于反应型智能体。但有些智能体能推理、能规划自己的行动,这类叫慎思型(deliberative)。
典型例子是私人智能体:人给它一条指令,让它订一个度假行程。假设互联网上还住着许多能帮上忙的智能体,它就要去联系其他智能体,问哪些航班有位、酒店各日期什么价,试着谈出最优惠的价格。行程方案齐了、主人确认之后,它再完成预订。
要做到这一点,智能体之间得通信。通信要顺利,需要:
- 一些交换知识的标准语言,例如知识交换格式(KIF)和知识查询与操纵语言(KQML)。这两种语言都建立在言语行为理论之上。
- 语言里还应包含一些谈判协议,基于不同的拍卖类型。
- 一套公共本体(ontology),保证各智能体引用的是同一批概念,并且知道彼此的语义。
- 一种发现机制,弄清楚各个智能体能做什么,同样依托某种本体。
慎思型智能体比反应型复杂得多,因为它除了响应环境变化,还要能主动发起行动。一种被提出的慎思型智能体架构是所谓的信念-愿望-意图(Belief-Desire-Intention,BDI)智能体:
- 信念(Beliefs):关于所处环境的一组知识,可以组织成知识库,或者一组规则,供智能体套用到环境的特定情形上。
- 愿望(Desires):智能体想做的事情,也就是它的目标。比如上面私人助理智能体的目标是订成行程,酒店智能体的目标是利润最大化。
- 意图(Intentions):智能体为达成目标而计划执行的具体行动。行动通常会改变环境,并引发与其他智能体的通信。
已有一些可用于构建多智能体系统的平台,比如 JADE。这篇论文综述了多智能体平台,也简略回顾了多智能体系统的发展历程和各种使用场景。
小结
多智能体系统的形态非常多样,能用在很多应用里。它们的共同套路是:单个智能体的行为尽量简单,靠协同效应让整体系统表现出更复杂的行为。
挑战
把这节课带进现实,试着构想一个能解决问题的多智能体系统。比如,要优化校车路线,这样一个系统该做些什么?放到一家面包店里又能怎么玩?
课后测验
复习与自学
去查一查这类系统在工业界的实际用法。挑一个领域,比如制造业或游戏行业,看看多智能体系统能解决哪些别处碰不到的问题。