遊戲開發中的人工智能——有限狀態機和神經網絡

轉載至 閱讀筆記-遊戲開發中的人工智能-第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可以。



發佈了133 篇原創文章 · 獲贊 4 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章