殷兆燕 唐小燕 李建新
(常州信息職業(yè)技術學院 軟件與大數據學院 江蘇省常州市 213164)
面向Agent 的理論與技術是人工智能研究的重要內容,已取得了一系列的研究成果,如智能Agent 的BDI 理論框架和體系結構、以AGENT-0 為代表的面向Agent 程序設計語言、以KQML 和FIPA ACL 為代表的Agent 通訊語言及其語義和語用等等[1],而面向Agent 的程序設計語言(AOPL)是Agent 理論與技術研究的核心內容[2]。面向Agent 的智能系統與普通軟件系統的最顯著的差別在于Agent 的行為由其心智狀態(tài)所決定,而不是由預先設定的程序決定,因此實現Agent 及操縱Agent 所使用的程序設計語言通常不同于傳統的程序設計語言。早期Agent 程序設計語言Agent-0[3][4]實現的Agent 包含意向、承諾、能力等,能處理Agent 的某些心智屬性,但該語言在形式上做了大量簡化。后來研究人員對Agent-0 進行了擴充,在實現Agent 編程時,增加了期望、信念等成份。近年來,又出現了一些新的面向Agent 的程序設計語言,如GOLOG[5]、CONGOLOG[6]、SARL[7]等,實際上這些語言缺乏對Agent 心智狀態(tài)的表示與處理,還算不上真正的面向人工智能的Agent 語言,且根據這些語言規(guī)范實現的Agent 具有較高的計算復雜度,因為它們的刻畫工具大都基于多模態(tài)邏輯或多模態(tài)分支時態(tài)邏輯。針對現有Agent 語言的存在不足,筆者提出一種面向智能Agent 程序設計語言IAPL(Intelligent Agent Programming Language)[8],本文在分析IAPL 結構的基礎上,根據IAPL 語言形式規(guī)范運用JavaCC 實現其編譯器。
IAPL 語言是基于智能Agent 結構AASC[9]的一種面向智能Agent 的程序設計語言,其形式規(guī)范詳見[8]。IAPL 實現的Agent 結構主要由信念庫、規(guī)劃庫、解釋器、監(jiān)控庫和行為集五大模塊組成,如圖1所示。
定義1 Agent ∷=<B,G,S,O,I>,其中,B 表示Agent 的信念庫,G 表示Agent 的目標庫,S 表示Agent 的策略庫,O 表示Agent 的監(jiān)控庫,I 表示Agent 的解釋器。
(1)信念庫:Agent 對環(huán)境狀態(tài)及其它Agent 的認知和理解知識描述的集合,初始信念以“BELIEFS”標識。信念可執(zhí)行增刪改查等操作。

圖1:Agent 結構

圖2:.jj 文件結構

圖3:IAPLParser 類結構
信念表示形式:關系名 參數1 參數2…參數N;
(2)目標庫:Agent 的目標集合,以“GOALS”標識,目標由條件、行為和優(yōu)先級組成。目標可執(zhí)行增加和刪除操作。
目標表示形式:GOALS:目標類型 目標名 參數1 參數2…參數N<:UTILITY 數學表達式>;
(3)策略庫:Agent 為了實現不同的目標而采取的實現方法集合。由策略名、策略要實現的目標、策略執(zhí)行前提條件和策略體四部分組成,以“STRATEGY”標識。
策略表示形式:
NAME:策略名
GOAL:目標類型 目標名 參數1,參數2,…,參數N;
PRECONDITION:條件表達式;
BODY:策略體;
IAPL 提供OR、DO_ANY、AND、WHILE、PARALLEL 等行為聯結符,方便用戶實現復雜行為。

圖4:Parser.jj 方法說明

圖5:JAVA 源程序
策略由行為集中的行為(action)組成。行為有兩種類型:
1.內在行為:包括加載、更新查詢和刪除信念操作;以及基本的邏輯運算、數值運算、字符串運算等;
2.通信行為:包括發(fā)送、接收和編譯消息的功能,實現與Agent 交互平臺的交互。
(4)監(jiān)控庫:實現對外部環(huán)境變化的監(jiān)控,處理接受到的感知信息與通信信息,處理結果將影響信念庫中信息的值,其描述方法同上述策略描述,以“OBSERVER”標識。
在IAPL 中,行為分為三類:心智狀態(tài)操作原語,如信念操作和目標操作、系統內置行為,包括輸出、底層通信等、目標行為。
(5)解釋器:可視為Agent 的“大腦”,是整個Agent 結構的核心所在,控制Agent 動態(tài)運行。
筆者使用ECA 規(guī)則來定義Agent 心智狀態(tài),如信念和能力等。
定義2 ECA 規(guī)則為三元組Reca=<e,C,A>,e 為觸發(fā)規(guī)則的事件;C 為反映系統和環(huán)境狀態(tài)的條件集;A 為行為集。整個規(guī)則解釋為:若C 條件滿足且e 事件發(fā)生,則執(zhí)行A 中所有行為。
復雜的狀態(tài)可由AND、OR 等基本算子合成得到。Agent 為了實現特定的目標,可執(zhí)行一系列行為,不同的行為序列可組織成多個不同的活動,一個服務調用對應一個活動。
事實上,Agent 行為的執(zhí)行依賴于Agent 的信念、目標和對外部環(huán)境變化的監(jiān)控,這種結構的設計類似于人類的思維方式。為了方便用戶使用IAPL 語言進行Agent 編程,筆者開發(fā)出的原型支撐系統中提供了部分系統開發(fā)工具和系統運行環(huán)境,其中的解釋器用來解釋執(zhí)行IAPL 程序,對接收到的輸入信息進行處理,實現外部環(huán)境感知和目標執(zhí)行,執(zhí)行行為后再影響外部環(huán)境及調整自身狀態(tài),最終滿足用戶的需求。
JavaCC(Java Compiler Compiler)[10]是一種基于Java 的編譯器自動生成器[11],旨在提高基于Java 語言的詞法分析器或語法分析器的開發(fā)效率,使用它生成的詞法分析器為純Java 代碼[12]。用戶根據JavaCC 的語法規(guī)范編寫JavaCC 源文件,使用JavaCC 編譯器編譯后,就能生成基于Java 語言的IAPL 編譯器,執(zhí)行相應Java 程序,就可完成語言的詞法和語法編譯功能。
使用JavaCC 生成編譯器的關鍵是根據語言形式規(guī)范,按照JavaCC 的語法寫出對應的.jj 文件,作為JavaCC 的輸入參數,運行得到Java 主解析文件及其它Java 輔助文件,這樣就可在應用程序中調用此主解析文件實現語言的編譯功能。
.jj 文件包含四部分:選項、語法分析器類、詞法規(guī)則及產生式,如圖2所示。
(1)任選項(options):若存在,則從保留字“options”聲明開始,保留字其后是一個或多個選項綁定值,每個任選項綁定值,說明對應任選項的設置情況,用來聲明產生的語法分析器的特性,控制JavaCC 的調試特征等。若不存在,則所有任選項綁定取默認值。
(2)Java 編輯單元(Java_compilation_unit):主要包括類名以及成員的聲明。PARSER_BEGIN 和PARSER_END 指定要生成的Java 解析器的名稱。其內部可含Java 包聲明(package)語句和引用包(import)語句等。此外,還必須定義一個與生成的解析器同名的類。
(3)詞法規(guī)則(lexical specification):根據不同的編譯器生成要求,此部分可忽略。若存在,可為SKIP、TOKEN、SPECIAL_TOKEN、MORE 中任意一個或多個。它們各自對應的含義可參見JavaCC 的語法說明。TOKEN 說明詞法標記。SPECIAL_TOKEN說明在解析過程中將被忽略的詞法標記,SPECIAL_TOKEN 同于SKIP,但區(qū)別在于這些標記可在解析過程中經過適當處理后被恢復。MORE 說明一個部分標記(partial token),一個完整的標記由MORE 序列后跟一TOKEN 或SPECIAL_TOKEN 組成。詞法規(guī)則用正則表達式(Regular Express ion)來描述。
(4)產生式(production):產生式用來定義語法中的非終端語法元素。每個非終端語法元素對應一Java 方法,編譯器通過對應的方法調用來實現對非終端描述的編譯。
就IAPL 而言,在其編譯器的實現中,相對應地:
(1)各option 項取值為默認值。
(2)Java 編輯單元中,PARSER_BEGIN 和PARSER_END 指定生成的Java 解析器的名稱為IAPLParser,其包含的部分代碼如圖3所示。
(3)詞法說明部分,SKIP、TOKEN、SPECIAL_TOKEN、MORE 分別說明IAPL 形式規(guī)范中的對應內容。
(4)產生式部分,形式規(guī)范中的每一個語法元素,每個元素對應于Parser.jj 中一個同名的方法,如圖4所示。第一個方法為:
使用JavaCC 命令運行Parser.jj(JavaCC IAPLParser.jj),可以生成特定詞法和語法分析器,生成的源程序包含七個Java 源程序,其中前三個是基于IAPL 語法的,其它四個是通用的,起輔助作用的Java 文件。
應用程序可編譯這七個Java 源文件,并將它們與應用程序相鏈接,從而提高效率。將所生成的Java 代碼語法分析器主程序中的有關類用“import”命令包含在實現的Java 代碼中,就可以方便、高效地實現程序的編譯[13]。Agent 解釋器在執(zhí)行程序之前先調用上述生成的解析器對程序進行詞法分析。
目前Agent 理論與技術研究核心內容之一便是Agent 程序設計語言。面向Agent 的程序設計語言(AOPL)便于描述和表達Agent的多種擬人的智能特性:自主性、主動性、可動性、反應性、社會性,支持Agent 的感知、識別,推理、決策,動作和行為能力的實現[14]。本文提出的面向智能Agent 程序設計語言IAPL 彌補了現有Agent語言存在的不足,根據其語言形式規(guī)范,運用JavaCC 實現其編譯器,提高了開發(fā)效率。
今后的工作主要有:結合使用JavaCC 及其伙伴工具,如JJDoc 和JJTree 來進一步提高實現IAPL 語言編譯器的效率。基于IAPL 開發(fā)原型支撐系統,為系統編制Agent 提供支持。