第6章 决策制定
本章主题:
- 为智能体行为创建可重用动作;
- 构建用于决策的条件求值器;
- 创建构成自治智能体的决策树结构;
- 创建有限状态机来处理基于状态的智能体;
- 为反应式智能体创建行为树。
我们的智能体已经有了动画并能在环境中移动,现在我们将给它添加高层的决策能力。这些数据结构最终将使得智能体能够自主地与周围环境以及其他智能体进行交互。
6.1 创建自定义类型
迄今为止,我们一直在使用全局数据来存储智能体的信息。由于创建决策结构需要了解智能体的信息,我们将创建一个自定义类型表的局部变量来存储一些特别的智能体数据和用于管理动画处理的智能体控制器。
local userData =
{
alive, -- terminal flag
agent, -- Sandbox agent
ammo, -- current ammo
controller, -- Agent animation controller
enemy, -- current enemy, can be nil
health, -- current health
maxHealth -- max Health
};
更进一步,我们将封装更多的数据以便把系统代码从全局变量中分离出来。一个userData
表是存储智能体尚未拥有的任意数据的理想位置,它同时还提供了一个通用的存储区域来存储用于智能体数据操作的数据结构。目前为止,列表中的数据成员就是一些将要存储的通用信息;当我们开始创建各个行为时,将访问和修改这些数据。
6.2 智能体动作
我们创建的任何决策逻辑和结构最终都要归结于决定智能体需要执行的动作。动作本身是一种独立的数据结构,它由3种状态组成: ...
Get Lua游戏AI开发指南 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.