虚拟世界仿真引擎
概述
虚拟世界仿真引擎为虚拟具身智能体提供运行环境。从简单的2D格子世界到复杂的3D物理仿真,不同的仿真引擎适用于不同的研究和应用场景。
Smallville 架构
Stanford 的 Generative Agents 项目使用了一个名为 Smallville 的2D格子世界作为仿真环境。
世界结构
graph TD
subgraph Smallville 2D Tile World
A[World Map<br/>格子地图] --> B[Zones 区域]
B --> C1[住宅区<br/>Lin家/Moreno家/...]
B --> C2[商业区<br/>药店/咖啡馆/...]
B --> C3[公共区<br/>公园/学校/...]
C1 --> D1[房间: 卧室/厨房/客厅]
D1 --> E1[物体: 床/冰箱/沙发]
end
subgraph Agent Loop
F[感知 Perceive] --> G[检索 Retrieve]
G --> H[规划 Plan]
H --> I[反思 Reflect]
I --> J[行动 Act]
J --> F
end
A -.-> F
J -.-> A
环境树结构
Smallville 的环境采用树状结构组织:
Smallville
├── Lin Family House
│ ├── Bedroom
│ │ ├── Bed (sleeping, making bed)
│ │ ├── Desk (writing, reading)
│ │ └── Closet (getting dressed)
│ ├── Kitchen
│ │ ├── Stove (cooking)
│ │ ├── Refrigerator (getting food)
│ │ └── Table (eating)
│ └── Living Room
│ ├── Sofa (relaxing, chatting)
│ └── TV (watching)
├── Hobbs Cafe
│ ├── Counter (ordering)
│ ├── Tables (eating, socializing)
│ └── Kitchen (preparing food)
└── ...
每个物体(叶节点)附带一组可用动作(affordances),智能体只能执行物体支持的动作。
智能体循环 (Agent Loop)
每个仿真时间步(通常1分钟),每个智能体执行以下循环:
\[\text{Agent Step} = \text{Perceive}(E_t) \rightarrow \text{Retrieve}(M) \rightarrow \text{Plan}(P) \rightarrow \text{Act}(A) \rightarrow E_{t+1}\]
- 感知(Perceive): 获取视野范围内的环境状态和其他智能体
- 检索(Retrieve): 从记忆流中检索相关记忆
- 规划(Plan): 生成或更新行动计划
- 行动(Act): 执行计划中的当前动作
- 反思(Reflect): 条件触发的高层思考
Unity ML-Agents
Unity ML-Agents Toolkit 是用于在Unity游戏引擎中训练和部署智能体的开源框架。
架构
graph LR
subgraph Unity Environment
A[Agent] --> B[Sensors<br/>视觉/射线/向量]
A --> C[Actions<br/>离散/连续]
A --> D[Rewards<br/>奖励信号]
end
subgraph Python Training
E[Trainer<br/>PPO/SAC/MA-POCA]
F[TensorBoard<br/>可视化]
end
B --> E
E --> C
D --> E
E --> F
关键特性
| 特性 | 说明 |
|---|---|
| 传感器类型 | 向量观察、视觉观察(摄像机)、射线感知 |
| 动作类型 | 离散动作、连续动作、混合动作 |
| 训练算法 | PPO、SAC、MA-POCA(多智能体) |
| 推理模式 | ONNX模型导出,可直接在Unity中运行 |
| 课程学习 | 支持自动调整难度的课程学习 |
典型应用
// Unity ML-Agents 智能体示例
public class NavigationAgent : Agent
{
public override void CollectObservations(VectorSensor sensor)
{
// 收集观察:位置、速度、目标方向
sensor.AddObservation(transform.localPosition);
sensor.AddObservation(rb.velocity);
sensor.AddObservation(target.localPosition - transform.localPosition);
}
public override void OnActionReceived(ActionBuffers actions)
{
// 执行动作:移动
float moveX = actions.ContinuousActions[0];
float moveZ = actions.ContinuousActions[1];
rb.AddForce(new Vector3(moveX, 0, moveZ) * speed);
// 计算奖励
float distance = Vector3.Distance(transform.localPosition,
target.localPosition);
if (distance < 1.42f) {
SetReward(1.0f);
EndEpisode();
}
}
}
Unreal Engine + AI
Unreal Engine 提供了高保真的3D环境,适合需要逼真视觉的具身智能体研究。
关键组件
- AI Controller: 控制NPC行为的核心类
- Behavior Tree: 内置的行为树系统
- Environment Query System (EQS): 环境感知查询
- Navigation Mesh (NavMesh): 自动路径规划
- Perception System: 视觉/听觉感知模拟
NVIDIA ACE 集成
NVIDIA Avatar Cloud Engine (ACE) 与 Unreal Engine 集成,提供:
- Audio2Face: 语音驱动面部动画
- Riva ASR/TTS: 语音识别和合成
- NeMo LLM: 对话生成
- Omniverse: 物理仿真
PettingZoo 多智能体环境
PettingZoo 是多智能体强化学习的标准API库:
from pettingzoo.classic import chess_v6
# 创建环境
env = chess_v6.env()
env.reset()
# AEC (Agent Environment Cycle) API
for agent in env.agent_iter():
observation, reward, termination, truncation, info = env.last()
if termination or truncation:
action = None
else:
action = policy(observation) # 智能体决策
env.step(action)
环境类别
| 类别 | 示例 | 特点 |
|---|---|---|
| Classic | 围棋、象棋、扑克 | 完全/不完全信息博弈 |
| Atari | Pong、Space Invaders | 像素观察,多玩家 |
| Butterfly | 合作追逐、协作 | 合作任务 |
| MPE | 简单标签、通信 | 连续空间,通信 |
| SISL | 交通、水运 | 社会模拟 |
环境设计原则
观察空间设计
智能体能感知什么,决定了它能做什么:
\[\mathcal{O} = \{o_{\text{visual}}, o_{\text{spatial}}, o_{\text{social}}, o_{\text{internal}}\}\]
- 视觉观察: 渲染图像或结构化场景描述
- 空间观察: 位置、距离、方向
- 社会观察: 其他智能体的状态和行为
- 内部观察: 自身状态(饥饿、疲劳、情绪)
动作空间设计
\[\mathcal{A} = \mathcal{A}_{\text{movement}} \times \mathcal{A}_{\text{interaction}} \times \mathcal{A}_{\text{communication}}\]
- 移动动作: 导航、寻路
- 交互动作: 使用物体、操作环境
- 通信动作: 语言交流、非语言信号
奖励设计
对于LLM驱动的智能体,传统的数值奖励被自然语言反馈替代:
| 范式 | 信号形式 | 适用场景 |
|---|---|---|
| RL奖励 | \(r \in \mathbb{R}\) | 训练阶段 |
| 语言反馈 | 自然语言评价 | LLM智能体 |
| 社会反馈 | 其他智能体的反应 | 社会仿真 |
| 内在动机 | 好奇心/新颖性 | 探索驱动 |
仿真引擎对比
| 引擎 | 维度 | 物理仿真 | LLM集成 | 多智能体 | 开源 | 适用场景 |
|---|---|---|---|---|---|---|
| Smallville | 2D | 无 | 原生 | 25体 | 是 | 社会仿真研究 |
| Unity ML-Agents | 3D | 有 | 可扩展 | 支持 | 是 | 游戏AI/通用 |
| Unreal Engine | 3D | 高保真 | 通过ACE | 支持 | 部分 | AAA游戏/高保真 |
| PettingZoo | 2D/抽象 | 无 | 可扩展 | 原生 | 是 | MARL研究 |
| AI Habitat | 3D | 有 | 可扩展 | 支持 | 是 | 具身导航 |
| Minecraft | 3D | 有 | 通过API | 支持 | 否 | 开放世界探索 |
性能与可扩展性
仿真速度
仿真速度是关键瓶颈,尤其是当每个智能体每步都需要LLM调用时:
\[T_{\text{step}} = \max_{i \in \text{agents}} \left( T_{\text{perceive}}^i + T_{\text{LLM}}^i + T_{\text{act}}^i \right)\]
优化策略:
- 异步LLM调用: 并行处理多个智能体的LLM请求
- 缓存机制: 相似情境使用缓存的LLM响应
- 分层时间步: 不同层次的决策使用不同频率
- 选择性更新: 只有状态变化的智能体才触发LLM调用
可扩展性挑战
\[\text{Cost} = N_{\text{agents}} \times K_{\text{LLM calls/step}} \times C_{\text{per call}} \times T_{\text{total steps}}\]
对于 \(N = 25\) 个智能体运行2天仿真(约2880步),Park et al. 报告了数千美元的API成本。
总结
选择仿真引擎需要权衡:
- 研究目标: 社会仿真选Smallville类,具身操作选Unity/Unreal
- 保真度需求: 高保真选Unreal,快速迭代选2D环境
- 智能体规模: 大规模选PettingZoo类轻量级框架
- LLM集成: 社会仿真原生支持,其他需要自定义集成