游戏开发中的人工智能——有限状态机和神经网络

转载至 阅读笔记-游戏开发中的人工智能-第9章-有限状态机

1. 简述

    记得,在上面向对象程序设计的课中,就学过有限状态机,后来上编译原理的时候,接着有限状态机,直到研一的形式语言自动机中,还是有限状态机。貌似有一个很列害的ERP中的核心解决方法也是状态机。不过给我印象最深的还是本科做的百项工程时,使用有限状态机实现无线模块的自动组网与通信,状态机说简单吧,确实挺简单,尤其是实际用的时候,但是想用好吧,也不轻松,状态机的实现是很简单,但是状态机得设计是要花一些心思的。
    这一章主要是通过两个例子,来说明状态机在游戏中的使用,下面分别简单说一下其中一个例子。第二个例子主要是代码较多,没有太多的不同,具体想实现状态机的时候,参考一下更有价值。

2. 有限状态机

    计算机控制鬼怪,有三种可能的状态:游走(roam)、闪躲(evade)以及追逐(chase),初始状态是“游走”。三个转化行为:当玩家吃了大力丸时,触发“我已变为蓝色”,当鬼怪看到玩家时,触发“看到了玩家”,当鬼怪看不到玩家时,触发“看不到玩家”。状态转化如图:
   
    相关的程序代码:

switch(currentState) {
  case kRoam:
    if (imBlue==true) currentState=kEvade;
    else if(canSeePlayer==true) currentState=kChase;
    else if(canSeePlayer==false) currentState=kRoam;
  case kChase:
    if(imBlue==true) currentState=kEvade;
    else if(canSeePlayer==false) currentState=kRoam;
    else if(canSeePlayer==true) currentState=kChase;
  case kEvade:
    if(imBlue==true) currentState=kEvade;
    else if(canSeePlayer==true) currentState=kChase;
    else if(canSeePlayer==false) currentState=kRoam;
}

 

其实,三个case里面,代码都是一样的,只要保证imBlue先判断就行了,后面就是判断canSeePlayer了。当然这个代码不是最高效的,但是比较直观,容易展示。

个人感觉,一般优先状态机主要把握两个部分,第一部分就是在一个循环中,根据状态机做一些事情,第二个就是,做事的过程中,由于发生了一些情况,导致状态改变了,从而影响到了前面循环的过程。


3、人工神经网络

人工神经网络(artificial neural network,缩写ANN),简称神经网络(neural network,缩写NN),是一种模仿生物神经网络的结构和功能的数学模型或计算模型。神经网络由大量的人工神经元联结进行计算。大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自适应系统。现代神经网络是一种非线性统计性数据建模工具,常用来对输入和输出间复杂的关系进行建模,或用来探索数据的模式。

 维基百科的解释:

神经元示意图:

Ncell.png

  • a1~an为输入向量的各个分量
  • w1~wn为神经元各个突触的权值
  • b为偏置
  • f为传递函数,通常为非线性函数。一般有traingd(),tansig(),hardlim()。以下默认为hardlim()
  • t为神经元输出

数学表示 t = f(\vec{W}\vec{A'}+b)

  • \vec{W}为权向量
  • \vec{A}为输入向量,\vec{A'}\vec{A}的转置
  • b为偏置
  • f传递函数(激活函数,阈值逻辑单元)

可见,一个神经元的功能是求得输入向量与权向量的内积后,经一个非线性传递函数得到一个标量结果。

单个神经元的作用:把一个n维向量空间用一个超平面分割成两部分(称之为判断边界),给定一个输入向量,神经元可以判断出这个向量位于超平面的哪一边。

该超平面的方程:\vec{W}\vec{p}+b=0

  • \vec{W}权向量
  • b偏置
  • \vec{p}超平面上的向量


人工神经网络的优点:

(1)它不需要吧实际问题的内部结构搞明白,甚至不需要针对不同的问题采用不同的方法,只需要关心系统外部的输入和输出关系;他可以观察学习实际问题的输入和输出关系。(训练调整优化权值,是的神经网络的输入输出行为和实际问题的例子相吻合);

(2)有神经网络形成的行为系统往往不是死的,是可以通过不断的学习训练来动态的调整,去适应新的情况;具有学习和自适应能力。而FSM(有限状态机)和FuSM(模糊状态机)对此无能为力。

人工神经网络的缺点:

(1)选择合适恰当的输入和输出变量十分困难;

(2)训练过程。神经网络的训练过程需要游戏高手,一般是游戏设计师,来充当师傅的角色,费事费力(监督式学习);虽然神经网络实际上可以不需要老师来教,可以自行摸索学习,但效果一般没有保证。

(3)无论训练的多么好的神经网络,都有可能出现不可解释不可理喻的行为。因为它终究为遇到从未遇到的新情况。由于神经网络是个黑匣子,无法分析其内部逻辑关系,出现问题很难找到原因。但是FSM和FuSM可以。



  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值