殷兆燕 唐小燕 李建新
(常州信息職業(yè)技術(shù)學(xué)院 軟件與大數(shù)據(jù)學(xué)院 江蘇省常州市 213164)
面向Agent 的理論與技術(shù)是人工智能研究的重要內(nèi)容,已取得了一系列的研究成果,如智能Agent 的BDI 理論框架和體系結(jié)構(gòu)、以AGENT-0 為代表的面向Agent 程序設(shè)計語言、以KQML 和FIPA ACL 為代表的Agent 通訊語言及其語義和語用等等[1],而面向Agent 的程序設(shè)計語言(AOPL)是Agent 理論與技術(shù)研究的核心內(nèi)容[2]。面向Agent 的智能系統(tǒng)與普通軟件系統(tǒng)的最顯著的差別在于Agent 的行為由其心智狀態(tài)所決定,而不是由預(yù)先設(shè)定的程序決定,因此實現(xiàn)Agent 及操縱Agent 所使用的程序設(shè)計語言通常不同于傳統(tǒng)的程序設(shè)計語言。早期Agent 程序設(shè)計語言Agent-0[3][4]實現(xiàn)的Agent 包含意向、承諾、能力等,能處理Agent 的某些心智屬性,但該語言在形式上做了大量簡化。后來研究人員對Agent-0 進行了擴充,在實現(xiàn)Agent 編程時,增加了期望、信念等成份。近年來,又出現(xiàn)了一些新的面向Agent 的程序設(shè)計語言,如GOLOG[5]、CONGOLOG[6]、SARL[7]等,實際上這些語言缺乏對Agent 心智狀態(tài)的表示與處理,還算不上真正的面向人工智能的Agent 語言,且根據(jù)這些語言規(guī)范實現(xiàn)的Agent 具有較高的計算復(fù)雜度,因為它們的刻畫工具大都基于多模態(tài)邏輯或多模態(tài)分支時態(tài)邏輯。針對現(xiàn)有Agent 語言的存在不足,筆者提出一種面向智能Agent 程序設(shè)計語言IAPL(Intelligent Agent Programming Language)[8],本文在分析IAPL 結(jié)構(gòu)的基礎(chǔ)上,根據(jù)IAPL 語言形式規(guī)范運用JavaCC 實現(xiàn)其編譯器。
IAPL 語言是基于智能Agent 結(jié)構(gòu)AASC[9]的一種面向智能Agent 的程序設(shè)計語言,其形式規(guī)范詳見[8]。IAPL 實現(xiàn)的Agent 結(jié)構(gòu)主要由信念庫、規(guī)劃庫、解釋器、監(jiān)控庫和行為集五大模塊組成,如圖1所示。
定義1 Agent ∷=<B,G,S,O,I>,其中,B 表示Agent 的信念庫,G 表示Agent 的目標(biāo)庫,S 表示Agent 的策略庫,O 表示Agent 的監(jiān)控庫,I 表示Agent 的解釋器。
(1)信念庫:Agent 對環(huán)境狀態(tài)及其它Agent 的認知和理解知識描述的集合,初始信念以“BELIEFS”標(biāo)識。信念可執(zhí)行增刪改查等操作。
圖1:Agent 結(jié)構(gòu)
圖2:.jj 文件結(jié)構(gòu)
圖3:IAPLParser 類結(jié)構(gòu)
信念表示形式:關(guān)系名 參數(shù)1 參數(shù)2…參數(shù)N;
(2)目標(biāo)庫:Agent 的目標(biāo)集合,以“GOALS”標(biāo)識,目標(biāo)由條件、行為和優(yōu)先級組成。目標(biāo)可執(zhí)行增加和刪除操作。
目標(biāo)表示形式:GOALS:目標(biāo)類型 目標(biāo)名 參數(shù)1 參數(shù)2…參數(shù)N<:UTILITY 數(shù)學(xué)表達式>;
(3)策略庫:Agent 為了實現(xiàn)不同的目標(biāo)而采取的實現(xiàn)方法集合。由策略名、策略要實現(xiàn)的目標(biāo)、策略執(zhí)行前提條件和策略體四部分組成,以“STRATEGY”標(biāo)識。
策略表示形式:
NAME:策略名
GOAL:目標(biāo)類型 目標(biāo)名 參數(shù)1,參數(shù)2,…,參數(shù)N;
PRECONDITION:條件表達式;
BODY:策略體;
IAPL 提供OR、DO_ANY、AND、WHILE、PARALLEL 等行為聯(lián)結(jié)符,方便用戶實現(xiàn)復(fù)雜行為。
圖4:Parser.jj 方法說明
圖5:JAVA 源程序
策略由行為集中的行為(action)組成。行為有兩種類型:
1.內(nèi)在行為:包括加載、更新查詢和刪除信念操作;以及基本的邏輯運算、數(shù)值運算、字符串運算等;
2.通信行為:包括發(fā)送、接收和編譯消息的功能,實現(xiàn)與Agent 交互平臺的交互。
(4)監(jiān)控庫:實現(xiàn)對外部環(huán)境變化的監(jiān)控,處理接受到的感知信息與通信信息,處理結(jié)果將影響信念庫中信息的值,其描述方法同上述策略描述,以“OBSERVER”標(biāo)識。
在IAPL 中,行為分為三類:心智狀態(tài)操作原語,如信念操作和目標(biāo)操作、系統(tǒng)內(nèi)置行為,包括輸出、底層通信等、目標(biāo)行為。
(5)解釋器:可視為Agent 的“大腦”,是整個Agent 結(jié)構(gòu)的核心所在,控制Agent 動態(tài)運行。
筆者使用ECA 規(guī)則來定義Agent 心智狀態(tài),如信念和能力等。
定義2 ECA 規(guī)則為三元組Reca=<e,C,A>,e 為觸發(fā)規(guī)則的事件;C 為反映系統(tǒng)和環(huán)境狀態(tài)的條件集;A 為行為集。整個規(guī)則解釋為:若C 條件滿足且e 事件發(fā)生,則執(zhí)行A 中所有行為。
復(fù)雜的狀態(tài)可由AND、OR 等基本算子合成得到。Agent 為了實現(xiàn)特定的目標(biāo),可執(zhí)行一系列行為,不同的行為序列可組織成多個不同的活動,一個服務(wù)調(diào)用對應(yīng)一個活動。
事實上,Agent 行為的執(zhí)行依賴于Agent 的信念、目標(biāo)和對外部環(huán)境變化的監(jiān)控,這種結(jié)構(gòu)的設(shè)計類似于人類的思維方式。為了方便用戶使用IAPL 語言進行Agent 編程,筆者開發(fā)出的原型支撐系統(tǒng)中提供了部分系統(tǒng)開發(fā)工具和系統(tǒng)運行環(huán)境,其中的解釋器用來解釋執(zhí)行IAPL 程序,對接收到的輸入信息進行處理,實現(xiàn)外部環(huán)境感知和目標(biāo)執(zhí)行,執(zhí)行行為后再影響外部環(huán)境及調(diào)整自身狀態(tài),最終滿足用戶的需求。
JavaCC(Java Compiler Compiler)[10]是一種基于Java 的編譯器自動生成器[11],旨在提高基于Java 語言的詞法分析器或語法分析器的開發(fā)效率,使用它生成的詞法分析器為純Java 代碼[12]。用戶根據(jù)JavaCC 的語法規(guī)范編寫JavaCC 源文件,使用JavaCC 編譯器編譯后,就能生成基于Java 語言的IAPL 編譯器,執(zhí)行相應(yīng)Java 程序,就可完成語言的詞法和語法編譯功能。
使用JavaCC 生成編譯器的關(guān)鍵是根據(jù)語言形式規(guī)范,按照JavaCC 的語法寫出對應(yīng)的.jj 文件,作為JavaCC 的輸入?yún)?shù),運行得到Java 主解析文件及其它Java 輔助文件,這樣就可在應(yīng)用程序中調(diào)用此主解析文件實現(xiàn)語言的編譯功能。
.jj 文件包含四部分:選項、語法分析器類、詞法規(guī)則及產(chǎn)生式,如圖2所示。
(1)任選項(options):若存在,則從保留字“options”聲明開始,保留字其后是一個或多個選項綁定值,每個任選項綁定值,說明對應(yīng)任選項的設(shè)置情況,用來聲明產(chǎn)生的語法分析器的特性,控制JavaCC 的調(diào)試特征等。若不存在,則所有任選項綁定取默認值。
(2)Java 編輯單元(Java_compilation_unit):主要包括類名以及成員的聲明。PARSER_BEGIN 和PARSER_END 指定要生成的Java 解析器的名稱。其內(nèi)部可含Java 包聲明(package)語句和引用包(import)語句等。此外,還必須定義一個與生成的解析器同名的類。
(3)詞法規(guī)則(lexical specification):根據(jù)不同的編譯器生成要求,此部分可忽略。若存在,可為SKIP、TOKEN、SPECIAL_TOKEN、MORE 中任意一個或多個。它們各自對應(yīng)的含義可參見JavaCC 的語法說明。TOKEN 說明詞法標(biāo)記。SPECIAL_TOKEN說明在解析過程中將被忽略的詞法標(biāo)記,SPECIAL_TOKEN 同于SKIP,但區(qū)別在于這些標(biāo)記可在解析過程中經(jīng)過適當(dāng)處理后被恢復(fù)。MORE 說明一個部分標(biāo)記(partial token),一個完整的標(biāo)記由MORE 序列后跟一TOKEN 或SPECIAL_TOKEN 組成。詞法規(guī)則用正則表達式(Regular Express ion)來描述。
(4)產(chǎn)生式(production):產(chǎn)生式用來定義語法中的非終端語法元素。每個非終端語法元素對應(yīng)一Java 方法,編譯器通過對應(yīng)的方法調(diào)用來實現(xiàn)對非終端描述的編譯。
就IAPL 而言,在其編譯器的實現(xiàn)中,相對應(yīng)地:
(1)各option 項取值為默認值。
(2)Java 編輯單元中,PARSER_BEGIN 和PARSER_END 指定生成的Java 解析器的名稱為IAPLParser,其包含的部分代碼如圖3所示。
(3)詞法說明部分,SKIP、TOKEN、SPECIAL_TOKEN、MORE 分別說明IAPL 形式規(guī)范中的對應(yīng)內(nèi)容。
(4)產(chǎn)生式部分,形式規(guī)范中的每一個語法元素,每個元素對應(yīng)于Parser.jj 中一個同名的方法,如圖4所示。第一個方法為:
使用JavaCC 命令運行Parser.jj(JavaCC IAPLParser.jj),可以生成特定詞法和語法分析器,生成的源程序包含七個Java 源程序,其中前三個是基于IAPL 語法的,其它四個是通用的,起輔助作用的Java 文件。
應(yīng)用程序可編譯這七個Java 源文件,并將它們與應(yīng)用程序相鏈接,從而提高效率。將所生成的Java 代碼語法分析器主程序中的有關(guān)類用“import”命令包含在實現(xiàn)的Java 代碼中,就可以方便、高效地實現(xiàn)程序的編譯[13]。Agent 解釋器在執(zhí)行程序之前先調(diào)用上述生成的解析器對程序進行詞法分析。
目前Agent 理論與技術(shù)研究核心內(nèi)容之一便是Agent 程序設(shè)計語言。面向Agent 的程序設(shè)計語言(AOPL)便于描述和表達Agent的多種擬人的智能特性:自主性、主動性、可動性、反應(yīng)性、社會性,支持Agent 的感知、識別,推理、決策,動作和行為能力的實現(xiàn)[14]。本文提出的面向智能Agent 程序設(shè)計語言IAPL 彌補了現(xiàn)有Agent語言存在的不足,根據(jù)其語言形式規(guī)范,運用JavaCC 實現(xiàn)其編譯器,提高了開發(fā)效率。
今后的工作主要有:結(jié)合使用JavaCC 及其伙伴工具,如JJDoc 和JJTree 來進一步提高實現(xiàn)IAPL 語言編譯器的效率?;贗APL 開發(fā)原型支撐系統(tǒng),為系統(tǒng)編制Agent 提供支持。