状态驱动的游戏智能体设计(上)
- They are quick and simple to code.There are many ways of programming a finite state machine and almost all of them are reasonably simple to implement. You’ll see several alternatives described in this article together with the pros and cons of using them.
- 可以快速简单地编写代码。实现有限状态机有多种途径,而且都可以简单实现。在本文你就能看到多种描述和赞成或者反对使用它们的理由。
- They are easy to debug.Because a game agent’s behavior is broken down into easily manageable chunks, if an agent starts acting strangely, it can be debugged by adding tracer code to each state. In this way, the AI programmer can easily follow the sequence of events that precedes the buggy behavior and take action accordingly.
- 易于调试。因为一个游戏智能体的行为由一个易于管理的代码段来实现,如果一个智能出现奇怪的行为,可以通过为每一个状态增加Tracer来调试。这样能够容易地跟踪事件序列,就可以针对之前的怪异行为修改代码了。
- They have little computational overhead.Finite state machines use hardly any precious processor time because they essentially follow hard- coded rules. There is no real “thinking” involved beyond the if-this-then-that sort of thought process.
- 需要付出一点计算代价。有限状态机几乎不使用宝贵的处理器时间,因为他们本质上跟硬编码是一样的。在那种“如果这样就那样”的思考处理中根本不存在真正的“思考”。
- They are intuitive.It’s human nature to think about things as being in one state or another and we often refer to ourselves as being in such and such a state. How many times have you “got yourself into a state” or found yourself in “the right state of mind”? Humans don’t really work like finite state machines of course, but sometimes we find it useful to think of our behavior in this way. Similarly, it is fairly easy to break down a game agent’s behavior into a number of states and to create the rules required for manipulating them. For the same reason, finite state machines also make it easy for you to discuss the design of your AI with non-programmers (with game producers and level designers for example), providing improved communication and exchange of ideas.
- 符合直觉。人类天生就以当前处以这种或者哪种状态来思考事情,所以我们常常听到我们自己处于什么状态的说法。多少次你“让你自己进入状态”或者发现你自己处于“正确的精神状态”?尽管人类并非真的像有限状态机那样工作,但通常我们发现这样有利于我们思考我们的行为。同样地,这易于通过一系列的状态和创造操作规则来实现一个游戏智能体的行为。基于同样的原因,有限状态机能让你和非程序员(如游戏策划和关卡设计师等)更好地进行关于你的AI设计的讨论,改进交流和交换观点。
- They are flexible.A game agent’s finite state machine can easily be adjusted and tweaked by the programmer to provide the behavior required by the game designer. It’s also a simple matter to expand the scope of an agent’s behavior by adding new states and rules. In addition, as your AI skills grow you’ll find that finite state machines provide a solid backbone with which you can combine other techniques such as fuzzy logic or neural networks.
- 可伸缩性。游戏智能体的有限状态机易于调整,能够很容易让程序员实现游戏设计师需要的行为,也易于通过增加新的状态和规则来扩展智能体的行为。此外,随着你AI技术的增进,你将发现有限状态机提供坚实的基础,让你能够把模糊逻辑和神经网络之类的技术组合到游戏中。
enum StateType{state_RunAway, state_Patrol, state_Attack};
void Agent::UpdateState(StateType CurrentState)
{
switch(CurrentState)
{
case state_RunAway:
EvadeEnemy();
if (Safe())
{
ChangeState(state_Patrol);
}
break;
case state_Patrol:
FollowPatrolPath();
if (Threatened())
{
if (StrongerThanEnemy())
{
ChangeState(state_Attack);
}
else
{
ChangeState(state_RunAway);
}
}
break;
case state_Attack:
if (WeakerThanEnemy())
{
ChangeState(state_RunAway);
}
else
{
BashEnemyOverHead();
}
break;
}//end switch
}
|
Current State
|
Condition
|
State Transition
|
Runaway
|
Safe
|
Patrol
|
Attack
|
WeakerThanEnemy
|
RunAway
|
Patrol
|
Threatened AND StrongerThanEnemy
|
Attack
|
Patrol
|
Threatened AND WeakerThanEnemy
|
RunAway
|
Class State
{
public:
virtual void Execute (Troll* troll) = 0;
};
|
class Troll
{
/* ATTRIBUTES OMITTED */
State* m_pCurrentState;
public:
/* INTERFACE TO ATTRIBUTES OMITTED */
void Update()
{
m_pCurrentState->Execute(this);
}
void ChangeState(const State* pNewState)
{
delete m_pCurrentState;
m_pCurrentState = pNewState;
}
};
|
//----------------------------------State_Runaway
class State_RunAway : public State
{
public:
void Execute(Troll* troll)
{
if (troll->isSafe())
{
troll->ChangeState(new State_Sleep());
}
else
{
troll->MoveAwayFromEnemy();
}
}
};
//----------------------------------State_Sleep
class State_Sleep : public State
{
public:
void Execute(Troll* troll)
{
if (troll->isThreatened())
{
troll->ChangeState(new State_RunAway())
}
else
{
troll->Snore();
}
}
};
|
状态驱动的游戏智能体设计(中)http://blog.csdn.net/lanphaday/archive/2007/07/03/1677115.aspx
状态驱动的游戏智能体设计(上)相关推荐
- 状态驱动的游戏智能体设计(下)
本文由恋花蝶最初发表于http://blog.csdn.net/lanphaday,欢迎转载,但必须保持全文完整,也必须包含本声明. 译者并示取得中文版的翻译授权,翻译本文只是出于研究和学习目的.任何 ...
- 状态驱动的游戏智能体设计(中)
本文由恋花蝶最初发表于http://blog.csdn.net/lanphaday,欢迎转载,但必须保持全文完整,也必须包含本声明. 译者并示取得中文版的翻译授权,翻译本文只是出于研究和学习目的.任何 ...
- 状态驱动的游戏智能体设计
State-Driven Game Agent Design 状态驱动的游戏智能体设计 Mat Buckland著 赖勇浩(http://blog.csdn.net/lanphaday) 译 Note ...
- 游戏程序开发:状态驱动的游戏智能体设计 (二)
转自: 状态驱动的游戏智能体设计(一) http://edu.gamfe.com/tutor/d/30601.html 状态驱动的游戏智能体设计(二) http://edu.gamfe.com/tut ...
- 通过深度Q网络DQN构建游戏智能体
目录 什么是深度Q网络(DQN) DQN的基本结构 DQN的关键技术 用Python和Gym实现DQN 算法优化 1. 网络结构优化 2. 训练策略优化 3. 超参数优化 欢迎来到我的博客,今天我们将 ...
- 2022年第十七届研电赛报名|安谋科技(Arm China)命题:基于特定开发平台的理性智能体设计
"兆易创新杯"第十七届中国研究生电子设计竞赛(以下简称"研电赛")现已正式开赛,企业命题已在官网发布,现官网已启动报名啦~ 安谋科技作为研电赛多年的合作单位及& ...
- 软件学院20周年院庆系列讲座 | 可微仿真与机器人智能体设计
可微仿真与机器人智能体设计 来源:清软小研
- 传奇黑客成『吹哨人』,推特麻烦了;谷歌20+技术学习路线;Python数据科学电子书;游戏智能体开发平台;前沿论文 | ShowMeAI资讯日报
ShowMeAI日报系列全新升级!覆盖AI人工智能 工具&框架 | 项目&代码 | 博文&分享 | 数据&资源 | 研究&论文 等方向.点击查看 历史文章列表, ...
- 多智能体强化学习及其在游戏AI上的应用与展望
近年来,人工智能技术在很多领域都取得了亮眼成就,并逐步从感知智能向决策智能迈进.强化学习是实现决策智能的重要路径,而现实世界中往往存在着多智能体的交互,也催生了多智能体强化学习的发展.这篇文章主要对多 ...
最新文章
- 两步设置:visual studio code(vscode)如何设置文本自动换行
- leetcode算法题--盛最多水的容器
- 如何优雅的实现pandas DataFrame 和spark dataFrame 相互转换
- Linux中的Kdump
- iOS 从相机或相册获取图片并裁剪
- 1-5docker私有镜像仓库
- mysql未找到bcrypt_使用mysql和bcryptjs时出现意外的标识符语法错误
- Ajax用户名验证、服务条款加载、验证码生成
- 【HDOJ6958】KD-Graph(并查集)
- java加解密之DES多种使用方式
- java csv api_CSVAPIforJava
- IDEA 插件开发 中文乱码
- 人脸活体检测人脸识别:眨眼+张口
- html语言标题怎么居中,HTML – 如何在标题中垂直居中文本?
- isodata算法确定k均值聚类的k值
- 关于二进制的起源,莱布尼茨以及中国伏羲八卦图
- KL-MPLC无人值守系统
- Python爬虫的起点,一文轻松入门
- 1000行代码实现定制形象送虎年祝福
- 什么是CT 技术。。。你懂了么?
热门文章
- 图像处理算法(三)---图像常用操作
- 跟同事弃用webpack一次 体积减少了10倍
- 最新代shua网秒shua订单量源码 上传即可使用
- ftp传输图片损坏原因
- 英国皇家邮政申请退款及自助兑换一张英国支票
- Python通过word模板生成word表格(含写入表格和图片)(不废话上代码系列)
- 信息收集道道之外网信息收集
- 文献学习(part96)--Subspace Clustering by Block Diagonal Representation
- 有趣的汉语:同音文(一):《季姬击鸡记》
- dueros模拟测试没有请求后台_小度音箱对接之DuerOS开放平台功能分析