跳转至

虚拟世界仿真引擎

概述

虚拟世界仿真引擎为虚拟具身智能体提供运行环境。从简单的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}\]
  1. 感知(Perceive): 获取视野范围内的环境状态和其他智能体
  2. 检索(Retrieve): 从记忆流中检索相关记忆
  3. 规划(Plan): 生成或更新行动计划
  4. 行动(Act): 执行计划中的当前动作
  5. 反思(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)\]

优化策略:

  1. 异步LLM调用: 并行处理多个智能体的LLM请求
  2. 缓存机制: 相似情境使用缓存的LLM响应
  3. 分层时间步: 不同层次的决策使用不同频率
  4. 选择性更新: 只有状态变化的智能体才触发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集成: 社会仿真原生支持,其他需要自定义集成

评论 #