徐守祥,徐人鳳,于成龍,馬超
(1. 深圳信息職業(yè)技術(shù)學(xué)院數(shù)字媒體學(xué)院,廣東 深圳 518172;2. 深圳職業(yè)技術(shù)學(xué)院計(jì)算機(jī)學(xué)院,廣東 深圳 518055)
虛擬現(xiàn)實(shí)硬件的快速發(fā)展使得虛擬現(xiàn)實(shí)內(nèi)容的制作與開(kāi)發(fā)成為了產(chǎn)業(yè)發(fā)展的瓶頸,智能虛擬人的研究是應(yīng)對(duì)這一問(wèn)題的有效方法[1]。正如人類需要自身生存環(huán)境一樣,虛擬人同樣需要其生存環(huán)境。語(yǔ)義虛擬環(huán)境是在模型環(huán)境基礎(chǔ)上疊加上語(yǔ)義對(duì)象的虛擬環(huán)境,在這樣的環(huán)境中,虛擬人通過(guò)與環(huán)境的互動(dòng),感知虛擬環(huán)境、規(guī)劃自身行為。語(yǔ)義虛擬環(huán)境由語(yǔ)義實(shí)體構(gòu)成。Bowman等人在Information-Rich virtual environments-IRVEs中提出了語(yǔ)義對(duì)象(semantic object)的概念[2],對(duì)象根據(jù)它被感知的距離確定其不同的顯示特性。文獻(xiàn)[3]從實(shí)現(xiàn)面向語(yǔ)義的高層交互隱喻的目標(biāo)出發(fā),提出語(yǔ)義對(duì)象是指虛擬場(chǎng)景中那些用戶可感知的物體或?qū)ο?,它們能夠根?jù)一定的規(guī)則對(duì)交互事件進(jìn)行響應(yīng)和反饋,并執(zhí)行特定交互任務(wù)。其屬性不僅包括外觀幾何信息,而且包含交互上下文的語(yǔ)義信息。我們以虛擬人感知虛擬環(huán)境、規(guī)劃自身行為為目標(biāo),針對(duì)三維虛擬環(huán)境,給出了基于流演算方法構(gòu)建智能體,以智能體作為虛擬環(huán)境中的語(yǔ)義實(shí)體,以虛擬人與環(huán)境交互的方式實(shí)現(xiàn)虛擬人對(duì)環(huán)境的感知。
概括地講,智能體是一種通過(guò)傳感器感知周圍環(huán)境并通過(guò)執(zhí)行器作用于環(huán)境的任何事物[4]。著名人工智能學(xué)者、美國(guó)斯坦福大學(xué)的Hayes-Roth認(rèn)為“智能體能夠持續(xù)執(zhí)行三項(xiàng)功能:感知環(huán)境中的動(dòng)態(tài)條件;執(zhí)行動(dòng)作影響環(huán)境條件;進(jìn)行推理以解釋感知信息、求解問(wèn)題、產(chǎn)生推斷和決定動(dòng)作”。智能體與對(duì)象的差別主要體現(xiàn)在智能性、自治性和知識(shí)的傳遞性上。但是,它又可以被看成是一種具有心智狀態(tài)和智能的特殊對(duì)象,智能體本身可以通過(guò)對(duì)象技術(shù)進(jìn)行構(gòu)造。根據(jù)智能體的內(nèi)部模型以及它的使用環(huán)境,可以將智能體分為多種類型,例如:理性智能體、BDI(信念、期望和意圖)智能體和推理智能體[5]。盡管各種智能體中的模塊構(gòu)成和實(shí)現(xiàn)步驟有所區(qū)別,但是,基本上遵循“環(huán)境感知、行動(dòng)推理和動(dòng)作執(zhí)行”的循環(huán)流程,其智能性主要體現(xiàn)在行動(dòng)推理的知識(shí)表示和演繹推理的過(guò)程。
推理智能體源于智能的形式化知識(shí)表示和知識(shí)推理,其中最具影響力的演繹推理方法是情境演算[6]和流演算[7]。本文基于流演算的推理方法建立了一個(gè)推理類型的智能體模型,它能夠根據(jù)事先確定的行為規(guī)劃自主地完成指定的任務(wù),為實(shí)際應(yīng)用中根據(jù)具體應(yīng)用背景構(gòu)建智能體提供技術(shù)保障。
流演算有4個(gè)基本概念:流(fluent)、動(dòng)作(action)、狀態(tài)(state)、情景(situation),定義為型(sort)。流(fluent)表示物理世界中的對(duì)象隨時(shí)間變化而變化的原子性質(zhì)或狀態(tài);狀態(tài)(state)表示某一時(shí)刻環(huán)境的快照,由對(duì)象的流合成;動(dòng)作(action)是智能主體與環(huán)境的相互作用;情景(situation)表示一個(gè)可能的世界,是動(dòng)作執(zhí)行的結(jié)果,表示動(dòng)作執(zhí)行的一個(gè)歷史。宏Holds(f,s)表明了流、情景和狀態(tài)之間的聯(lián)系,表示流f在情景s下成立,也就是 f在該情景對(duì)應(yīng)的實(shí)際狀態(tài)State(s)下成立。
更多流演算的概念和流演算的公理系統(tǒng)參見(jiàn)文獻(xiàn)[8]。文獻(xiàn)[9]中對(duì)流演算的環(huán)境感知公理建立給出了具體的方法說(shuō)明。
為了描述智能體的推理行為模型,在流演算描述體系的基礎(chǔ)上給出以下幾個(gè)元素。
行為(b),等價(jià)于流演算中的一組動(dòng)作的綜合描述,是智能體為完成一個(gè)任務(wù)而執(zhí)行的一個(gè)連續(xù)的、不可分的動(dòng)作系列。在虛擬人問(wèn)題中,這些動(dòng)作表現(xiàn)為系統(tǒng)底層執(zhí)行的模型動(dòng)畫(huà)片段。在行為的執(zhí)行時(shí)需要一個(gè)前提條件,在行為運(yùn)行時(shí)需要一定的運(yùn)行條件,一個(gè)行為的執(zhí)行意味著對(duì)環(huán)境產(chǎn)生某種程度的修改,因此,行為是行為演算的基本元素。在流演算中通過(guò)前提條件公理、流和狀態(tài)轉(zhuǎn)換公理來(lái)描述。一個(gè)智能體的各種行為構(gòu)成該智能體的行為集合(B)。
規(guī)劃(p),是指為了實(shí)現(xiàn)某個(gè)目標(biāo)智能體所要執(zhí)行的行為系列,可通過(guò)決策樹(shù)、任務(wù)網(wǎng)絡(luò)和有限狀態(tài)機(jī)等方法來(lái)表示。有限狀態(tài)機(jī)是一種用受限方式來(lái)保存歷史的有效方式,不僅可以形成動(dòng)作序列,還能循環(huán)或條件執(zhí)行,目前的商業(yè)引擎通常都提供了有限狀態(tài)機(jī)的實(shí)現(xiàn),因此,采用有限狀態(tài)機(jī)來(lái)表示規(guī)劃,每個(gè)規(guī)劃都是一個(gè)有關(guān)狀態(tài)及狀態(tài)轉(zhuǎn)換的結(jié)構(gòu),構(gòu)成一個(gè)有向圖,其中狀態(tài)為節(jié)點(diǎn),轉(zhuǎn)換為邊。一個(gè)智能體能夠執(zhí)行的各種規(guī)劃構(gòu)成它的規(guī)劃集合(P)。
任務(wù)(t),是智能體為實(shí)現(xiàn)一個(gè)目標(biāo)要完成的具體工作,任務(wù)是規(guī)劃的目的,即一個(gè)規(guī)劃是為了完成一個(gè)指定的任務(wù)。一個(gè)智能體能夠執(zhí)行的各種任務(wù)構(gòu)成該智能體的任務(wù)集合(T)。自動(dòng)機(jī)是規(guī)劃的描述必然,和任務(wù)有對(duì)應(yīng)關(guān)系,因此,定義初始化函數(shù)Init(p,t)給出規(guī)劃p中任務(wù)t的初始狀態(tài)。
流演算的其他元素在這里直接引入應(yīng)用,虛擬環(huán)境的狀態(tài)由虛擬環(huán)境中各對(duì)象的流的組合來(lái)產(chǎn)生,例如:圖1給出的情景,智能體自主追擊房間里的敵人。以智能體在房間外作為初始狀態(tài),房間外這個(gè)狀態(tài)的流包括:追擊智能體在房間外;敵人智能體在房間內(nèi);房間有門(mén);房間對(duì)象有到達(dá)房門(mén)的路徑等,流的設(shè)置根據(jù)問(wèn)題域的要求可以增減。下面以圖1到房間里追擊敵人的規(guī)劃為例說(shuō)明上述各元素之間的關(guān)系,并給出規(guī)劃的層次化有限狀態(tài)機(jī)。
主狀態(tài)機(jī)的規(guī)劃是根據(jù)用戶的任務(wù)要求,建立任務(wù)的總體規(guī)劃,將任務(wù)的完成分為兩個(gè)行為,即進(jìn)入房間和擊斃敵人。子狀態(tài)機(jī)1細(xì)化了進(jìn)入房間子任務(wù)的行為規(guī)劃,子狀態(tài)機(jī)2細(xì)化了擊斃敵人子任務(wù)的行為規(guī)劃。狀態(tài)機(jī)結(jié)構(gòu)和運(yùn)行機(jī)制是按照流演算的方法建立的。每個(gè)圓圈表示環(huán)境的狀態(tài),它是由該問(wèn)題域設(shè)定的相關(guān)對(duì)象的流組合運(yùn)算而來(lái),狀態(tài)之間的有向線表示狀態(tài)之間的轉(zhuǎn)換,遵循狀態(tài)更新公理。有向線的描述文字表示一個(gè)行為的執(zhí)行。
圖1 向室內(nèi)追擊行為規(guī)劃Fig.1 The behavior plan of chasing into room
在上述語(yǔ)法元素的基礎(chǔ)上給出智能體的語(yǔ)義定義。
定義1.智能體,由一個(gè)元組(Z, R, E, B, F)構(gòu)成,其中:
Z是該智能體的狀態(tài)基,表示虛擬環(huán)境的當(dāng)前狀態(tài),由感知器和行為執(zhí)行引起的流演算生成當(dāng)前狀態(tài)。
R是該智能體的規(guī)劃基,是由規(guī)劃p、任務(wù)t和狀態(tài)z組成的三元組(p,t,z)的集合,是一個(gè)基于環(huán)境狀態(tài)完成指定任務(wù)的規(guī)劃庫(kù)即知識(shí)庫(kù),如圖1所示的各個(gè)狀態(tài)機(jī);規(guī)劃的產(chǎn)生依據(jù)是問(wèn)題域的規(guī)則。
E是智能體的執(zhí)行基,它是一個(gè)二元組(b,z),表示行為b在狀態(tài)z中發(fā)生。規(guī)劃是各種行為的序列,因此(b,z)發(fā)生的前提是,智能體具有z狀態(tài),同時(shí),存在包含行為b的規(guī)劃p和當(dāng)前任務(wù)t構(gòu)成的三元組(p,t,z)是規(guī)劃基中的一個(gè)元素。行為b的實(shí)際執(zhí)行過(guò)程是由運(yùn)行平臺(tái)支持的動(dòng)作序列完成。
B是該智能體行為(b)的集合。
F是該智能體流(f)的集合,流的變化決定智能體狀態(tài)的轉(zhuǎn)換。
定義2.語(yǔ)義實(shí)體,是指虛擬環(huán)境中具有智能體屬性的實(shí)體,是形象模型、基本動(dòng)畫(huà)和智能體的組合,其語(yǔ)義特性體現(xiàn)在智能體的行為和流。
根據(jù)智能體五元組的實(shí)現(xiàn)程度可以區(qū)分該語(yǔ)義實(shí)體的智能化程度。
定義3.虛擬人,是具有人類形象模型的一種特殊語(yǔ)義實(shí)體,它的智能體具有完整的五元組實(shí)現(xiàn),使得該語(yǔ)義實(shí)體能夠模擬人類的感知及行為方式。
定義4.語(yǔ)義虛擬環(huán)境,是指由語(yǔ)義實(shí)體構(gòu)成的虛擬環(huán)境。
虛擬環(huán)境中的物體可以分為語(yǔ)義實(shí)體和不具有語(yǔ)義的實(shí)體,而語(yǔ)義實(shí)體又可以分為靜態(tài)和動(dòng)態(tài)實(shí)體兩類。
定義5.語(yǔ)義實(shí)體的流,是描述實(shí)體及其所處環(huán)境的狀態(tài)屬性的函數(shù)集合。對(duì)于一個(gè)靜態(tài)實(shí)體,例如一個(gè)房間,它給出房門(mén)位置和房門(mén)狀態(tài)等描述信息。對(duì)于一個(gè)動(dòng)態(tài)實(shí)體,例如一個(gè)虛擬人,它除了上述自身的狀態(tài)描述信息外,還要能夠獲得相關(guān)實(shí)體的狀態(tài)信息,即通過(guò)語(yǔ)義互動(dòng)獲得環(huán)境信息,例如獲得一個(gè)房間門(mén)的位置和狀態(tài)的信息。
定義6.語(yǔ)義實(shí)體的行為,是實(shí)現(xiàn)實(shí)體功能的函數(shù)集合。例如,一支槍的使用過(guò)程函數(shù)。
感知器是由筒視線方式專門(mén)為虛擬人實(shí)現(xiàn)的一個(gè)專用組件[9],它根據(jù)監(jiān)測(cè)到的物體不同采用不同的方法獲得環(huán)境信息,其一,當(dāng)它檢測(cè)到的是非語(yǔ)義實(shí)體時(shí),僅提供距離信息;其二,當(dāng)它檢測(cè)到的是語(yǔ)義實(shí)體時(shí),以互動(dòng)方式獲得該實(shí)體的環(huán)境狀態(tài)信息,為環(huán)境模型的狀態(tài)變化提供必要的場(chǎng)景信息。
假定一個(gè)智能體有n個(gè)流,分別為f1…fn,在整個(gè)問(wèn)題域的求解情境s中有m個(gè)影響解決方案的關(guān)鍵點(diǎn),由宏State(s)得到該m個(gè)關(guān)鍵的狀態(tài)為z1…zm,用fij表示智能體的流i(fi)在狀態(tài)j(zj)時(shí)的結(jié)果,則有:
根據(jù)流演算的基本公理,一個(gè)行為b在狀態(tài)z下可執(zhí)行的前提條件可以表示為
這里z≡f1?…?fs?z’而約束條件則是針對(duì)問(wèn)題域的具體要求,例如,執(zhí)行基E中的(b,z)發(fā)生還要滿足規(guī)劃基中存在對(duì)應(yīng)的規(guī)劃(p,t,z)。
即在狀態(tài)z中s個(gè)流fi(i=1-s)成立,同時(shí)又滿足一定的約束條件下,行為b可以在狀態(tài)z下執(zhí)行。
給出兩個(gè)運(yùn)算符“+”和“-”的宏定義如下:
由此,可以推出流演算的基本公理:
即行為b使得狀態(tài)z中的m個(gè)流fi(i=1-m)不成立,同時(shí)又新成立n個(gè)流gi(i=1-n)。
智能體五元組(Z, R, E,B, F)中,狀態(tài)Z是環(huán)境感知流包括自身F中的流及行為B中元素的演算形成的狀態(tài);規(guī)劃基R是智能體的控制中心,其附帶有一個(gè)規(guī)則庫(kù),規(guī)劃的實(shí)施受到規(guī)則中各類條件和約束的限制,是智能體的智能化體現(xiàn);執(zhí)行基E中的一個(gè)執(zhí)行是在相應(yīng)的狀態(tài)條件下執(zhí)行一個(gè)行為b,該行為b一定是屬于某個(gè)規(guī)劃p中。智能體五元組之間的關(guān)系可以通過(guò)圖1中的一個(gè)子狀態(tài)機(jī)的規(guī)
給出狀態(tài)轉(zhuǎn)換公理的形式為:劃來(lái)說(shuō)明,例如:子狀態(tài)機(jī)2描述了完成擊斃敵人子任務(wù)的行為規(guī)劃,這里有:
任務(wù)t:擊斃敵人;
狀態(tài)z:虛擬人處于有效射程;z’:敵人死亡;z”:敵人逃脫,這里的敵人逃脫,應(yīng)當(dāng)是指敵人不是處于死亡狀態(tài),可能受傷或沒(méi)有受傷;
行為b:開(kāi)槍射擊;b’:追擊敵人;
流f和行為b分別作用于一個(gè)行為的開(kāi)始狀態(tài)和結(jié)束狀態(tài),流主要來(lái)自于環(huán)境感知,決定行為的外部條件,構(gòu)成虛擬環(huán)境的狀態(tài)。行為則是虛擬人為實(shí)現(xiàn)某個(gè)目標(biāo)的主動(dòng)實(shí)施,作用于外部環(huán)境,從而改變環(huán)境狀態(tài)。
對(duì)于一個(gè)復(fù)雜的行為b其自身可以設(shè)置一個(gè)基于流演算的內(nèi)部控制結(jié)構(gòu),即行為控制執(zhí)行基。如圖2所示。這樣形成一個(gè)層次化的流演算控制模型。
圖2 射擊行為狀態(tài)機(jī)Fig.2 Finite-State Machine for shooting behavior
一個(gè)行為可以根據(jù)系統(tǒng)底層動(dòng)畫(huà)的實(shí)現(xiàn)通過(guò)一系列動(dòng)作來(lái)實(shí)現(xiàn),例如圖2中給出的動(dòng)作有:Shooting射擊、LoadedGun裝子彈(子彈上膛)、FindingBullets找子彈、LoadedInventory裝到庫(kù)存等動(dòng)作;同時(shí),有內(nèi)部流:f1槍有子彈、f2庫(kù)存有子彈、f3找到子彈等。設(shè)定該行為的初始狀態(tài)為Zb0,則形成的智能體的內(nèi)部狀態(tài)和動(dòng)作執(zhí)行的前提條件公理:
由流演算的“+”和“-”的宏定義得到如下的推理。
推理1.
(1)如果流f滿足Holds(f,z)則有z-f+f=z;
(2)對(duì)任意的流f和狀態(tài)z有z+f-f=z。
證明
首先證明(1),由條件f滿足Holds(f,z)可知
在虛擬環(huán)境中,典型的語(yǔ)義主體是具有行為能力的虛擬人,基于智能體模型給出圖3所示的虛擬人體系結(jié)構(gòu)。
圖3 流演算虛擬人體系結(jié)構(gòu)Fig. 3 The architecture of VH based on Fluent Calculus
該體系結(jié)構(gòu)是以感知器為基礎(chǔ),形成環(huán)境狀態(tài)、行為規(guī)劃、行為控制、動(dòng)作執(zhí)行、進(jìn)而影響環(huán)境的循環(huán)結(jié)構(gòu)。圖中的深色部分是虛擬人的內(nèi)部結(jié)構(gòu),當(dāng)有多個(gè)虛擬人的情況下則需要協(xié)同工作,因此,還需要環(huán)境狀態(tài)的共享機(jī)制。
感知器通過(guò)使用該智能體的流集合,進(jìn)行流演算得到智能體的環(huán)境認(rèn)知模型,是當(dāng)前環(huán)境的狀態(tài)基?;谏虡I(yè)引擎的規(guī)劃基是整個(gè)結(jié)構(gòu)的智能化規(guī)劃模塊,它以層次化有限狀態(tài)機(jī)的方式,形成和保存規(guī)劃庫(kù)。按照用戶的命令要求,根據(jù)環(huán)境的當(dāng)前狀態(tài),選擇相應(yīng)的規(guī)劃完成具體任務(wù)。行為控制根據(jù)規(guī)劃基的要求,由執(zhí)行基執(zhí)行具體的行為序列,最終由底層的商業(yè)引擎完成動(dòng)畫(huà)的執(zhí)行和功能的實(shí)施,并產(chǎn)生對(duì)環(huán)境的作用。
商業(yè)引擎通常不具備智能化的行為規(guī)劃模塊,但是,通常都為這樣的功能實(shí)現(xiàn)提供了基本的支撐平臺(tái),例如,實(shí)驗(yàn)系統(tǒng)使用的Unity3D引擎,就提供了層次化的有限狀態(tài)機(jī)組件。有些插件還專門(mén)實(shí)現(xiàn)了行為樹(shù),為行為規(guī)劃提供了更便捷的實(shí)現(xiàn)方法。
虛擬人與其他語(yǔ)義主體的區(qū)別在于其感知方式的主動(dòng)性。虛擬人作為認(rèn)知的主體,依據(jù)已感知的環(huán)境信息形成對(duì)環(huán)境再感知的反饋控制,這樣的感知過(guò)程稱為主動(dòng)感知[10]。虛擬場(chǎng)景中的其他語(yǔ)義實(shí)體不具備主動(dòng)感知的能力,更確切地講,是為虛擬人的主動(dòng)感知提供環(huán)境狀態(tài)的流。
智能體的狀態(tài)是由狀態(tài)基對(duì)智能體的感知數(shù)據(jù)、內(nèi)部屬性和通信行為進(jìn)行運(yùn)算所得到的,最終可以轉(zhuǎn)化為當(dāng)前狀態(tài)和這三類流的運(yùn)算,可以表示為
其中Z和Z’分別表示更新后和更新前的狀態(tài)。
智能體在接受了用戶命令后首先是通過(guò)規(guī)劃基R確定該智能體如何完成該命令,規(guī)劃基將該命令分解為j個(gè)任務(wù),表示為
按照規(guī)劃三元組(p,t,z)由執(zhí)行基E完成相應(yīng)的行為執(zhí)行,這里要注意的是,執(zhí)行基E所要執(zhí)行的行為b必須滿足相應(yīng)的狀態(tài)條件,若狀態(tài)z時(shí)可以執(zhí)行的行為表示為Behaviors(z),則執(zhí)行基E的操作語(yǔ)句必須保證
規(guī)劃基主要是提供任務(wù)的劃分和任務(wù)完成的行為及條件,而執(zhí)行基則是實(shí)際的行為執(zhí)行結(jié)構(gòu),因此,規(guī)劃基給出了一個(gè)規(guī)劃(p,t,z)及其行為二元組(b, z),執(zhí)行基E則必須通過(guò)獲取智能體的當(dāng)前狀態(tài)z確定行為b的執(zhí)行時(shí)機(jī)。
很多科研課題在研究問(wèn)題的時(shí)候,多采用一種原型式的語(yǔ)言體系及實(shí)現(xiàn)系統(tǒng),雖然這樣更專注問(wèn)題域的研究,但是,也容易使理論成果脫離應(yīng)用實(shí)踐,出現(xiàn)成果轉(zhuǎn)化的困難。對(duì)于應(yīng)用科學(xué)的研究直接采用商業(yè)化的研發(fā)平臺(tái),既能夠節(jié)省成果轉(zhuǎn)化的時(shí)間,也能夠及時(shí)解決在成果應(yīng)用中產(chǎn)生的技術(shù)問(wèn)題。Unity是一個(gè)專業(yè)級(jí)、商業(yè)化的高質(zhì)量游戲引擎,在目前也是最流行的虛擬現(xiàn)實(shí)引擎,它采用模塊化組件系統(tǒng)構(gòu)建游戲?qū)ο?,事?shí)上,它更像一個(gè)基礎(chǔ)的智能體(Agent)系統(tǒng),在該系統(tǒng)中,一個(gè)實(shí)體存在于一個(gè)扁平的層級(jí)結(jié)構(gòu),不同的實(shí)體有不同的組件集合,智能體是實(shí)體的實(shí)現(xiàn)方式。
智能體五元組(Z, R, E, B, F)在Unity中的實(shí)現(xiàn)結(jié)構(gòu)可以有如下的表示:
狀態(tài)基Z:是當(dāng)前成立的流的邏輯演算,設(shè)該邏輯演算的算子為Reason有如下的公式,
狀態(tài)基是一個(gè)定時(shí)產(chǎn)生智能體狀態(tài)的程序組件,實(shí)現(xiàn)邏輯演算算子的操作,為智能體提供實(shí)時(shí)狀態(tài)及其變化。
規(guī)劃基R:規(guī)劃基接受用戶命令,產(chǎn)生智能體的任務(wù)序列,給出任務(wù)執(zhí)行的規(guī)劃,驅(qū)動(dòng)執(zhí)行基E完成相關(guān)的行為。規(guī)劃基是一個(gè)狀態(tài)機(jī)組件或是行為樹(shù)組件,它實(shí)現(xiàn)的是一個(gè)知識(shí)庫(kù)。
執(zhí)行基E:根據(jù)規(guī)劃的安排依據(jù)行為執(zhí)行的前提條件,執(zhí)行完成該任務(wù)的相關(guān)行為。執(zhí)行基是程序運(yùn)行的綜合控制核心。
行為集合B:是掛接在智能體上的行為組件集合,由執(zhí)行基E調(diào)用完成智能體的實(shí)際任務(wù)。
流的集合F:是掛接在實(shí)體上的狀態(tài)流組件集合,這些組件能夠感知環(huán)境信息、表示內(nèi)部屬性與其他智能體交換信息,為智能體獲取所處狀態(tài)提供基本信息。
圖4 流演算智能體的運(yùn)行結(jié)構(gòu)Fig. 4 The running structure of Fluent Calculusbasic agent
圖4給出了五元組智能體的運(yùn)行結(jié)構(gòu),用戶的命令首先由規(guī)劃基R接收,將該命令分解為任務(wù)序列,通過(guò)查找規(guī)劃庫(kù),確定執(zhí)行各任務(wù)的三元組(p, t, z),然后,將該三元組交給執(zhí)行基E,執(zhí)行基E按照該規(guī)劃,確定行為狀態(tài)二元組(b, z)序列,根據(jù)狀態(tài)z的變換,執(zhí)行對(duì)應(yīng)的行為b。注意:執(zhí)行基的執(zhí)行過(guò)程會(huì)引入一個(gè)重要的參數(shù),時(shí)間T,因此,它會(huì)在Unity的Update腳本中執(zhí)行。在Unity中行為b如果作為獨(dú)立的組件可以通過(guò)激活來(lái)運(yùn)行,也可以通過(guò)遠(yuǎn)程調(diào)用等方式來(lái)執(zhí)行,它的執(zhí)行通常會(huì)影響環(huán)境、智能體本身的狀態(tài)、屬性的變化,即,影響流組件序列中各流f的變化,在Unity中流集合F中的流f通常是持續(xù)執(zhí)行的,通常也是在Update腳本中執(zhí)行。流序列的變化直接影響狀態(tài)的變化。
Unity3D引擎提供了層次化的動(dòng)畫(huà)狀態(tài)機(jī),其基本思想是使角色在某—給定時(shí)刻進(jìn)行一個(gè)特定的動(dòng)作。動(dòng)作類型可因游戲類型的不同而不同,其中每一個(gè)動(dòng)作被稱為一種狀態(tài)(States)。角色從一個(gè)狀態(tài)切換到另外—個(gè)狀態(tài)是需要一定的限制條件的,這些限制條件被稱為狀態(tài)過(guò)渡條件(State Transitions)。狀態(tài)集合、狀態(tài)過(guò)渡條件以及記錄當(dāng)前狀態(tài)的變量放在一起,就組成了最簡(jiǎn)單的狀態(tài)機(jī)。該狀態(tài)機(jī)以角色動(dòng)畫(huà)的控制為核心,為虛擬人的行為控制提供了一個(gè)比較方便的手段。在此基礎(chǔ)上,還可以通過(guò)級(jí)鏈方式得到更多的狀態(tài)。
PlayMaker是Unity的第三方插件。它既是一個(gè)可視化腳本工具,是一個(gè)基于有限狀態(tài)機(jī)的分層邏輯框架。使用PlayMaker能夠方便的建立規(guī)劃庫(kù)和行為集合。Behave是Unity的另一個(gè)插件,它通過(guò)行為樹(shù)來(lái)設(shè)計(jì)對(duì)象的行為邏輯,開(kāi)發(fā)者可以根據(jù)行為的目標(biāo)實(shí)現(xiàn)具體的行為動(dòng)作。行為庫(kù)是保存行為邏輯的動(dòng)態(tài)連接庫(kù),名稱為AgentBehaveLib.dll。規(guī)劃基R的規(guī)劃庫(kù)也可以通過(guò)該行為庫(kù)的方式存儲(chǔ)。
在Unity引擎中使用簡(jiǎn)化的五元組智能體結(jié)構(gòu)實(shí)現(xiàn)一個(gè)虛擬人行走、開(kāi)門(mén)的交互過(guò)程,從而說(shuō)明虛擬人智能體和物體智能體的配置結(jié)構(gòu)與運(yùn)行過(guò)程。虛擬人的任務(wù)是進(jìn)到房間里。這里假定該房間有一個(gè)門(mén)。首先確定該應(yīng)用的規(guī)則如下:人進(jìn)屋的時(shí)候要開(kāi)門(mén),人進(jìn)去以后要關(guān)門(mén)。根據(jù)這兩條規(guī)則對(duì)虛擬人智能體形成如下的規(guī)劃:當(dāng)門(mén)沒(méi)有開(kāi)的狀態(tài)下人進(jìn)屋時(shí)先開(kāi)門(mén);當(dāng)門(mén)打開(kāi)的狀態(tài)下人可以進(jìn)屋;當(dāng)人已經(jīng)進(jìn)屋了要關(guān)門(mén)。設(shè)計(jì)如下的流函數(shù):mf1,人在屋內(nèi)manInside。設(shè)計(jì)如下的行為函數(shù):mb1,走向指定的目的地gotoDestination;mb2,休閑等待idleWaiting。對(duì)門(mén)智能體形成如下的規(guī)劃:當(dāng)門(mén)沒(méi)有開(kāi)的狀態(tài)下有人走到門(mén)鎖附近則開(kāi)門(mén);當(dāng)門(mén)打開(kāi)的狀態(tài)下人進(jìn)屋了要關(guān)門(mén)。設(shè)計(jì)如下的流函數(shù):df1,有人在門(mén)鎖附近manNearbylock;df2,門(mén)是打開(kāi)的doorOpened。設(shè)計(jì)如下的行為函數(shù):db1,開(kāi)門(mén)openDoor;db2,關(guān)門(mén)closeDoor。
設(shè)計(jì)虛擬人智能體的執(zhí)行基E為manAgentExec,其實(shí)現(xiàn)過(guò)程為,收到規(guī)劃基R的任務(wù)后按照其確定的(b, z)執(zhí)行相應(yīng)的行為,它們是:
設(shè)計(jì)門(mén)智能體的執(zhí)行基E通過(guò)Unity的觸發(fā)區(qū)來(lái)控制, 其實(shí)現(xiàn)過(guò)程為,收到規(guī)劃基R的任務(wù)后按照其確定的(b, z)執(zhí)行相應(yīng)的行為,它們是:
圖5 簡(jiǎn)化智能體的應(yīng)用Fig.5 Application of simplified agent
圖6 簡(jiǎn)化智能體及其構(gòu)成Fig.6 Simplified agent and its composition
圖5給出了在Unity引擎上實(shí)現(xiàn)的簡(jiǎn)化智能體語(yǔ)義環(huán)境的應(yīng)用。圖6列出了該應(yīng)用的智能體及其構(gòu)成,manAgent實(shí)現(xiàn)虛擬人智能體,doorAgent實(shí)現(xiàn)門(mén)智能體,后面的復(fù)雜智能體語(yǔ)義環(huán)境還需要給出的是一個(gè)房間智能體roomAgent。在實(shí)現(xiàn)中要注意智能體之間的通信方法。這里使用觸發(fā)區(qū)功能實(shí)現(xiàn)門(mén)的開(kāi)關(guān),以sendMessage的遠(yuǎn)程調(diào)用的方式,通知虛擬人智能體的動(dòng)和靜。
前面的簡(jiǎn)化智能體結(jié)構(gòu)實(shí)現(xiàn)一個(gè)虛擬人行走、開(kāi)門(mén)的交互過(guò)程,主要說(shuō)明了智能體基本語(yǔ)義的作用。對(duì)于較復(fù)雜的應(yīng)用需要更多的智能體和較復(fù)雜的組件。在上一節(jié)實(shí)例的基礎(chǔ)上,設(shè)置一個(gè)更復(fù)雜的情況,這里,追逐的目標(biāo)是一個(gè)活動(dòng)的目標(biāo),例如:是人控制的角色,因此,需要虛擬人智能體與語(yǔ)義環(huán)境進(jìn)行更多的交互,才能確定自己的路徑,同時(shí)還要隨時(shí)響應(yīng)當(dāng)前環(huán)境狀態(tài)的變化。首先確定該應(yīng)用的規(guī)則,在保持前面情景規(guī)則的基礎(chǔ)上,添加如下規(guī)則:虛擬人具備識(shí)別房間和找到房門(mén)的智能;房間智能體能夠告知虛擬人目標(biāo)是否在房間中;障礙物能夠告知虛擬人如何繞過(guò)它。根據(jù)這三條新增的規(guī)則對(duì)虛擬人智能體新增如下的規(guī)劃:
p1,當(dāng)不能直達(dá)目標(biāo)時(shí)虛擬人要根據(jù)障礙物的屬性分別進(jìn)行處理,如果是房間執(zhí)行規(guī)劃p2,如果是普通障礙物執(zhí)行規(guī)劃p3。
p2,當(dāng)目標(biāo)和虛擬人在房間內(nèi)外不同空間時(shí)人要先進(jìn)屋或出屋,如果不能直達(dá)房門(mén)則要先與房間交互獲得通往房門(mén)的路徑,然后開(kāi)門(mén)進(jìn)出房間。
p3,當(dāng)目標(biāo)和虛擬人之間有障礙物時(shí)障礙物要告知虛擬人繞過(guò)它的路徑。
新增如下的流函數(shù):mf2,正在直接追逐目標(biāo)canSeeTarget,這一狀態(tài)表明目標(biāo)對(duì)虛擬人是可見(jiàn)的,它的相反狀態(tài)則代表了很多種情況,例如:前面有障礙物或者目標(biāo)和虛擬人分處屋的內(nèi)外。新增如下的行為函數(shù):mb3,沿著路徑前進(jìn)goFollowRoute。
對(duì)新的應(yīng)用需要增加兩個(gè)新的語(yǔ)義智能體,房間智能體roomAgent和障礙物智能體obstacleAgent。
根據(jù)規(guī)劃要求,房間智能體roomAgent要設(shè)計(jì)識(shí)別目標(biāo)是否在房間內(nèi)的流rf1: 目標(biāo)在房間中targetInRoom。設(shè)計(jì)到達(dá)房門(mén)的路徑并提供最近到達(dá)房門(mén)的路點(diǎn)行為函數(shù)getClosestRoutePoint。障礙物智能體obstacleAgent是一個(gè)不可進(jìn)入的物體,需要給出繞過(guò)該物體的路徑和進(jìn)入該路徑和離開(kāi)該路徑的路點(diǎn)行為函數(shù)getEntryRoutePoint和getExitRoutePoint。
2017年底 Unity推出了第一款機(jī)器學(xué)習(xí)開(kāi)源插件,Unity機(jī)器學(xué)習(xí)代理(Unity Machine Learning Agents)。通過(guò)簡(jiǎn)單的Python API,使用強(qiáng)化學(xué)習(xí)和演化法訓(xùn)練智能代理,能夠用于研究視覺(jué)內(nèi)容和現(xiàn)實(shí)復(fù)雜行為;可將其用于為機(jī)器人技術(shù)、自動(dòng)駕駛技術(shù)和其他工業(yè)應(yīng)用實(shí)施大規(guī)模的平行訓(xùn)練制度;還可將其用于應(yīng)對(duì)一些挑戰(zhàn)性任務(wù)。接下來(lái)的工作是將流演算智能體模型與機(jī)器學(xué)習(xí)相結(jié)合解決復(fù)雜的行為模型和多人協(xié)同的智能行為。
隨著虛擬現(xiàn)實(shí)、機(jī)器人和人工智能逐步推進(jìn)到實(shí)用階段,Agent智能體的構(gòu)造研究也逐步由原型實(shí)驗(yàn)提升為商業(yè)應(yīng)用。本文以流演算的狀態(tài)推演為基礎(chǔ),針對(duì)虛擬環(huán)境中的語(yǔ)義應(yīng)用,給出了智能體的五元組結(jié)構(gòu),分析了以規(guī)則為基礎(chǔ)建立智能體規(guī)劃庫(kù)并實(shí)現(xiàn)智能體自主行為的關(guān)鍵技術(shù)。基于商業(yè)引擎Unity給出的虛擬環(huán)境中,智能虛擬人追擊行為的應(yīng)用實(shí)例,詳細(xì)闡述了智能體五元組在實(shí)際開(kāi)放過(guò)程中的應(yīng)用。進(jìn)一步的工作包括建立行為樹(shù)與狀態(tài)機(jī)相結(jié)合的規(guī)劃庫(kù),應(yīng)用Unity機(jī)器學(xué)習(xí)代理的最新進(jìn)展,基于智能體五元組建立機(jī)器學(xué)習(xí)模型。
深圳信息職業(yè)技術(shù)學(xué)院學(xué)報(bào)2018年2期