Agent 與對象的辨析
如果說對象是70年代以來軟件界最激動人心的革新之一,那么,Agent的相關理論和技術,為分布式開放系統的設計與實現提供了新的途徑,可以稱之為軟件開發的又一重大突破。討論問題的前提是概念的澄清,什么是對象?什么是Agent ?二者又有哪些區別和聯系呢?
對象與OOP
對象是具有明確邊界和意義的事物.也是某些問題的概念抽象,是一個封裝了數據和方法的實體,一個對象的實質是一組數據和與它相關的方法及操作。它的特征由屬性表示.屬性的數據值表示對象的狀態。系統開發人員通過對象所具有的屬性來了解對象的靜態結構。通過操作可改變對象的內部數據(私有的和受保護的數據).從而改變對象的狀態。當其他對象向某個對象發送消息時,操作就得以進行和實現。每一個對象都有唯一的標識.以區別于一個類中的其他對象。一個對象不同于其他對象的關鍵是其屬性值,構成其標識。
對象是為現實世界中的實體建立的抽象模型,它包括了實體的屬性以及作用在實體上的操作。它具有唯一性、封裝性和多態性等重要特性。對象一般由三部分組成:對象名、對象體和觸發器。對象名唯一地標識一個對象,對象體是一個對象所封裝的所有效據的集合.它可以是屬性值的集合也可能是多個數據庫的集合。觸發器定義對象的哪些狀態變化會引起事件的產生,是可選擇的部分,它用于描述事件重要的狀態變化。
面向對象程序設計(Object 0riented Programming,OOP)是70年代末提出,并在8o年代中后期開始使用的一種程序設計技術。在OOP的設計中。對象是一個動態概念,是對客觀世界實體的數據抽象,即具有通信能力的特殊屬性和行為方式的一些基本運行實體。類是一個靜態概念,是一組對象的抽象定義或概括,且具有層次結構和繼承性特征。面向對象程序設計的基本思想是:是一種以對象為基礎,以事件驅動對象的程序設計技術,通過建立和具體實際相對應的軟件對象,通過對這些對象的組合來創建具體的應用,通過對象屬性定義,對象方法調用及編寫對象事件函數來完整地描述對象,并實現對象之間的聯系和對象本身的操作,從而 實現整個系統設計。
一般認為,OOP力圖將問題空間的結構和概念直接映射到軟件的解空間.從而使人類認識問題的過程與軟件開發的過程保持一致。
Agent與AOP
什么是Agent 呢?Agent 是一個具有多重含義的概念,根據場景和視角的不同有著極大的差別。
從精神狀態的角度來看,“如果一個實體可以用信念、承諾、義務、意圖等精神狀態進行描述.那么該實體可視為一個Agent”。如果建立單個Agent的目的是想模擬人的行為,而從精神狀態的角度對人的行為分析是比較自然的,這也正是Agent作為人工智能基礎理論的重要原因之一。一般第,這一定義被稱之為Agent的強定義。弱定義,即“如果一個實體具有自主性、反應性、主動性、社交性四條基本性質,那么該實體也可以視為一個Agent”。
從設計者的角度來看,Agent 是一種抽象工具,通過它能使我們用更方便更熟悉的擬人化方式來描述、解 釋、預測一個復雜系統的行為。一般來說.一個系統越復雜,我們對系統越不了解,就越需要用基于意圖的立場來觀察和解釋它的行為。當然.在賦予Agent各種思維狀態時.要求必須精確、簡單而自然。
在計算機領域,agent是一種處于一定的環境下能夠自主、智能地完成其他個體指派任務的系統。簡單地說, Agent 指的是一種實體,而且是一種具有智能的實體。Agent的特點如下表:
特點 | 英文 | 解釋 |
代理性 | Action On Behalf Others | 具有代表他人的能力,即它們都代表用戶工作 |
自治性 | Autonomy | 能在非事先規劃、動態的環境中解決實際問題,獨立發現和索取符合擁護需要的資源、服務等等. |
主動性 | Proactivity | 能夠遵循承諾采取主動,表現面向目標的行為 |
反應性 | Reactivity | 能感知環境,并對環境作出適當的反應 |
社會性 | Social Ability | 能同代理代表的用戶、資源、其它代理進行交流. |
智能性 | Intelligence | 具有一定程度的智能,包括推理到自學習等一系列的智能行為 |
合作性 | Callaboration | 以與其它代理分工合作,共同完成單個代理無法完成的任務 |
移動性 | Mobility | 具有移動的能力,為完成任務,可以從一個節點移動到另一個節點 |
由于Agent的特性,基于Agent的系統應是一個集靈活性、智能性、可擴展性、魯棒性、組織性等諸多優點于一身的高級系統.
面向代理實體的編程(Agent 0riented Programming,AOP)對計算持社會性觀點,并結合了傳統的面向對象程序設計的特點.如數據封裝、消息傳遞等。需要注意的是,本文所指的AOP,不是面向切面的編程(Aspect Oriented Programming,AOP)。一般認為,完整的AOP系統應包含以下三個部分:
- 一個邏輯系統以定義Agent的思維狀態(Mental States);
- 一個可解釋的編程語言以便對Agent編程;
- 一個Agent實現(Agentification)過程,將Agent程序編譯為低層執行代碼。
AOP實質上是對具有思維狀態的智能實體進行編程。一個Agent程序給Agent的思維狀態、環境的信息輸入 以及Agent對環境的行為輸出三者之間提供了一種聯系。一般一個Agent程序包括:一個初始思維狀態,它含一個初始信念集、一個初始意圖集和一個初始規劃集;一個思維狀態改變規則集。初始信念集和意圖集將用模態算符加上帶時間索引的一階謂詞語言表達。初始規劃集用帶時序關系的原子動作序列來表達。一般地,初始規劃集是空集。思維狀態的改變規則集是Agent程序的核心。它包含兩種規則,一種用于更新信念集和意圖集,另一種用于產生規劃。
AOP是一種以計算的社會觀為基礎的新型程序設計范例,它以智能體的設計和構造作為人工智能程序設計的核心,重視智能體的動態特征和智能體的交互活動,并將對分布式系統的研究與開發產生深刻的影響。
面向Agent 與 面向對象 的建模
面向對象建模體現了面向對象軟件開發中以模型驅動的基本思想.它將軟件開發的重心轉移到了分析階段。在整個開發過程中,使用統一的概念——對象,而其它所有的概念都是圍繞著對象組成的,在分析階段中建立的對象模型也適合于設計和實現階段,軟件開發的各階段比較統一。整個開發過程實際上就是對模型細化的過程,從而避免了傳統的結構化方法中從數據流程圖到模塊層次結構圖的轉化過程。
面向對象建模的局限在于:
- 建模的描述過程不是很清楚,而建模的結果是各種圖形的表示,它們不能具體地體現建模過程;
- 用圖形表示分析過程,這樣在表示大而復雜的系統時很不容易畫得條理清晰;
- 系統的描述是不夠詳細的;
- 不含有語義的成分,這樣對系統的描述是不夠精確的, 有些操作會產生二義性。
面向Agent建模要把研究的系統看成是基于Agent的系統,然后運用Agent理論對所研究的問題進行抽象建模。基于Agent的系統具有的三個基本要素是:Agent(對應于實體)、事務(對應于活動)和資源。通過對這三個基本要素及之間的關聯進行描述,即可從過程的角度對基于Agent的系統進行描述、抽象、建模。由于對面向Agent建模的認識是逐步深入的,很難從一開始就能給出一個詳盡描述,因此以上步驟必然是一個有反 復的、逐步求精的過程。
“對象”的抽象和表達能力又遠遠的遜色于“Agent”,Agent擴展了“對象的內涵和使用范圍”,它更適合復雜系統問題的描述與處理。面向Agent建模并不是否定面向對象建模.而是面向對象方法的延伸與拓展,兩者區別主要表現在以下兩個方面:
(1)對單個智能體而言,面向對象技術將客觀世界看成“剛性的”對象,不具有組織和抽象出更高層次的構建單元的能力。而Agent自主、靈活的問題求解行為,能良好地表達出智能體的精神狀態。
(2)對多智能體系統而言.面向對象技術無法對智能體之間豐富的交互行為進行完整的抽象,亦無法充分表達多智能體之間動態組織結構的復雜性;而面向Agent建模就比較適合。
面向Agent 與 對象軟件工程
面向Agent的軟件工程,其工作原理是將Agent看作為模型的構成條件,同時圍繞對應的基本條件有條不紊的開展與系統相關的系列活動,被認為是目前技術性較強的軟件開發模型。不管是軟件系統還是應用系統,它的內部構成都包括多個Agent,Agent表現出來的特點主要有自發性、反應性、社會性和自主性,屬于行為自控的行為實體。Agent與Agent之間表現出來的結構關系較為復雜,其作用是由高層相互交換來實現的,在這樣的前提下達到系統設計的預期目標。
面向Agent軟件工程針對系統研發來講,不僅為其構建了系統平臺,同時還完成了理論的提供和技術環境的提供。它主要通過系統的模塊分解,數據建模和抽象理論完成系統數據的闡述和管理,達到了系統設計的基本要求和目標,這樣更可以促進系統難度的提升和靈活性的增加,在此基礎上還增加了維護性特點和重用性特點。面向Agent軟件工程的基本思想與定義在理論論與軟件工程整體規劃處于同一個軌道線,基本特點體現出了自然抽象和功能強大。
(1)許多問題固有的分布性(數據、能力、控制)本身就是由多個交互自主實體組成的松散耦合網絡。面向agent方法采用粗粒度的自主計算實體為抽象機制,以社會學的觀點和人們熟悉的概念(組織,角色等)進行分析、建模、設計復雜分布式系統。面向對象方法則采用細粒度的非自主計算實體(對象)為抽象機制,對復雜問題分析與建模,面向agent較面向對象更自然、直觀、簡單,容易理解。
(2)面向agent分析與設計處理實體間知識級交互,實體能自主確定交互的方式、范圍、時間,內容;同時,存在多種組織關系(如等級制、專家共同體、市場機制等),適合復雜系統的建模。面向對象方法中對象的交互是用處于語法級對象問的消息傳遞來實現,對象間的組織關系少(如包含、聚合關系),缺乏足夠的機制來模型化復雜系統。
(3)面向agent軟件工程主要強調角色、責任、服務、目標這些抽象機制來處理復雜性,以何時完成何種目標來分析應用領域,核心是完成的目標。面向對象方法主要強調完成目標的行為類型。因為在任何應用領域中目標比行為或計劃更穩定,強調目標與強調行為這看似很小的改變,卻導致實質上的不同,面向agent的目標分析使得系統設計更穩定、健壯、模塊化,能進行漸增式地開發和測試,具有可擴展性。上下文敏感的計劃提供了模塊性和構成性,不必改變已有的計劃,為實現同一目標的新的上下文計劃可加入系統中,這使得系統能處理易變性和特例。
(4) 面向agent軟編程的基本部件是agent;面向對象編程對定義基本部件狀態沒有明確規定,Agent模型的基本部件狀態可包含信念、承諾、能力、選擇等;OOP用方法引用處理消息,而AOP的消息類型來自言語行為理論,可包含通知、請求、提供、承諾、拒絕等,agent通信有專用語言,如KQML;通常agent在面向agent方法中被實現為有意圖的系統.而OOP將對象作為類的實例。
就面向Agent軟件工程中的程序設計而言,大于有三種方式:
(1)采用和LISP語法形式差不多的句子對Agent的組成部分進行表達,也包括對Agent系統的行為或者系統之間互相交流溝通,對于提高Agent系統的功能性有很大的幫助。(2)基于邏輯技術,邏輯系統包括一階謂詞邏輯以及時序邏輯等等,也可以作為Agent的程序設計語言來使用,在程序編寫的時候,用邏輯系統來對Agent系統的各種方式以及內部組成里進行表述和定義,例如相關知識、意圖和信念、原子動作和規則等都可以用邏輯技術來表述定義。邏輯技術的理論系統和語義定義都相當嚴謹。(3)運用了面向對象的軟件開發技術和軟部件技術,屬于在語言級上對Agent系統程序提供支持。通常都是把Agent系統當成一個特有的對象,用Agent內部功能的預定義軟部件來編程和實現Agent系統,它的前提是使用的軟部件必須是一組已經封裝的特殊類。
到2000年為止,面向Agent軟件工程的研究與實踐經歷了一個由活躍到沉寂的過程,主要因素就是技術問題。近幾年,隨著人工智能技術走進人們的生產和生活,這方面的研究又再次掀起了熱潮。
小結
Agent是對象實體延伸,Agent可以看作特殊意義上的對象,但Agent畢竟不同于對象,其區別主要表現在以下幾個方面:
- 盡管Agent與對象都是采用消息傳遞實現聯系,但就對象而言.消息的傳遞是為了激活方法;而Agent是對消息進行區分的基礎上.利用意圖及復雜的協議進行建模以實現協商,決定是否答應執行所請求的行為。
- Agent可主動運行,有自己的目標和行為,可由外部激勵或內部狀態而啟動,而對象是純被動的,只能由外部的消息控制。
- Agent是一個自治的實體,具有自己的知識和分析問題方法,能理解信息并控制自己的行為,而對象只能機械地執行所規定的動作。
- Agent能根據推理規則進行信息的抽象,而對象卻一般不具備推理能力
如果把對象理解成存儲組合處理器的話,那Agent就是存儲、處理器和程序員的組合, 程序員能賦予了主體某種目的性和意志性。人在投影自己的思維主體時,最終的對等模型大概還是Agent,而不是對象,因此,Agent比對象的概念更廣更深。