進入Agent世界-什麼是Agent?在前面的討論中,說道了一下Object讓俺們感覺不是很爽的地方。總結下來:OO並不是對現實世界最貼切的類比。那麼什麼東東可以比OO更加貼近地來類比現實世界呢?就目前看來,還是Agent可以擔當起Object接班人的這個角色。 這裡多插一段話。俺們可以注意到,不論是Object還是Agent,他們都有比較深的理論淵源,同時以指導實際軟體開發為其價值導向。目前在軟體開發過程中,俺們大量地使用著Object的概念,所以前面討論凡是涉及到Object的,俺們都盡量使用開發人員熟悉的語境來描述,比如同步方法,非同步方法呼叫,.Net平台中特有的delegate等等。而目前圍繞Agent的工作大部分還停留在理論研究或者實驗室原型的階段,所以在下面關於Agent的討論中,理論學術(白話:紙上談兵)的味道會略為濃一些。俺會盡量結合約志們熟悉的生活中的例子來解釋這些理論上的東東。 俺們遇到的第一個問題是Agent的定義是什嗎?這其實是一個蠻無聊的問題,能夠在紙上默寫出Agent的定義並不代表這位同志已經深刻地理解了Agent的含義。但這裡還是羅列一下前輩們給出的若干關於Agent的定義。從五花八門的定義中俺們也可以體會一下Agent這個概念所包含的內涵的豐富性。 1.
The MuBot Agent "The term agent is used to represent two orthogonal concepts. The first is the agent's ability for autonomous execution. The second is the agent's ability to perform domain oriented reasoning."
這個定義強調了Agent的自動執行能力和推理能力。 2.
The AIMA Agent "An agent is anything that can be viewed as perceiving its environment through sensors and acting upon that environment through effectors."
不知道給出這個定義的前輩是不是搞生物學的,怎麼看Agent都像是由細胞核和一堆毛須組裝成的原始生命體。 3.
The Maes Agent "Autonomous agents are computational systems that inhabit some complex dynamic environment, sense and act autonomously in this environment, and by doing so realize a set of goals or tasks for which they are designed."
這個定義比較複雜一點,他強調了Agent與外界環境的關係,也就是說Agent的存在是為了某個目的/目標而感知並且改變環境。在後面會介紹到,這是區分Agent和普通程式的一個重要依據。 4.
The IBM Agent "Intelligent agents are software entities that carry out some set of operations on behalf of a user or another program with some degree of independence or autonomy, and in so doing, employ some knowledge or representation of the user's goals or desires."
IBM給出的定義就少了一些學究味,多了些實用至上的氣息。認為能夠自動完成某種指定任務的軟體體,都可以當做Agent。 5.
The FAQ Agent [http://www.ee.mcgill.ca:80/~belmarc/agent_faq.html] "This FAQ will not attempt to provide an authoritative definition ..."
老外搞笑起來,也是一流。 6.
The Favorite Agent “An autonomous agent is a system situated within and a part of an environment that senses that environment and acts on it, over time, in pursuit of its own agenda and so as to effect what it senses in the future.”
個人比較欣賞這個定義,純理論的東西沒功夫去搞,純實踐的東西沒興趣去搞,而這個定義試圖在理論和實踐之間找到一個平衡。
。。。沿著探究Agent本源這個話題繼續聊下去,眼前會出現好幾條不同的脈絡/線索。比較有意思的是那些搞人工智慧的同志們,他們熱衷於使用Agent的概念來擬合人的行為和思想,他們更願意從生物/生命的角度來描繪軟體世界中的Agent。所以他們使用了很多心理學上的術語/符號來刻畫Agent,比如信仰(Belief),Intention(意圖),義務(Obligation)等。這些同志的精神和境界是值得俺們尊敬和嚮往的,但作為大規模商業軟體開發流水線上一枚微不足道的齒輪,俺更關心的是將Object替換為Agent後,代碼量會節約多少行,項目工期會縮短多少天,這類和薪水/年終獎掛鈎的實際問題。基於此考慮,俺決定選擇一種相對比較practical的方式繼續向同志們介紹Agent的概念。 Michael在他的論文Intelligent Agents:Theory and Practice中給出了一個Agent的弱定義(這還只是個弱的!強的就免了)。他說滿足下面四個條件的東東,就可以稱為是Agent:l autonomy: agents operate without the direct intervention of humans or others, and have some kind of control over their actions and internal state;
自治性,也就是下面俺們將要談到的
獨立心智。l social ability: agents interact with other agents (and possibly humans) via some kind of agent-communication language;
社會性,這點俺並不認為是Agent的本質特性,一個獨立存在的Agent難道就不是Agent了嗎。一位生活在孤島上的同志難道就不是Human了嗎。之所以拎出這點來,俺估計Michael的考慮是:單個的Agent的存在是無意義的,只有處於群體中的Agent才能體現它的價值。l reactivity: agents perceive their environment, (which may be the physical world, a user via a graphical user interface, a collection of other agents, the INTERNET, or perhaps all of these combined), and respond in a timely fashion to changes that occur in it;
反應性,能夠接受外界的輸入訊號,並且做出相應的反應。l pro-activeness: agents do not simply act in response to their environment, they are able to exhibit goal-directed behaviour by taking the initiative.
主動性,或稱目標驅動,這是Agent很重要的一個特點。依據當前的環境和自身的心智,Agent 可以主動地執行某種操作或者任務。舉例來說,大家都熟悉的Web Service,不論Web Service能夠提供多少服務,計算能力多麼強,它都不是一個Agent,因為它是被動地,而非主動地提供服務。 上面羅列了一堆Agent的定義。俺們除了敬仰前輩大師之外,還可以嘗試著歸納一下Agent的本質。定義可以傳遞給俺們的資訊是:什麼是Agent;而本質可以傳遞給俺們的資訊是:什麼不是Agent。從這兩個角度來把握一個概念,基本也就八九不離十了。 Agent的本質是什嗎?個人觀點:
擁有可以與外界互動的獨立心智。 解釋一下這句話的含義。這句話包含了兩個層面的內容。
一)獨立心智。心智是什嗎?心智就是邏輯,由百萬個判斷語句組成的複雜邏輯是心智,一個if語句,甚至一個順序執行語句,本質上來說也是心智。說到這裡有同志會覺得不對勁了,如果心智就是邏輯的話,那麼MIS系統中的發票類也是具有心智的啦,發票類裡面也包含有邏輯代碼嘛,而且還蠻複雜的呢。對的,發票類是具有邏輯,或者稱為心智,但是他不具有獨立的心智,什麼意思呢?發票類中的邏輯是否執行,何時執行,不是由發票類自己決定或者控制的,這點很重要。比如,發票類有個邏輯(Method)可以將自己序列化為一段XML,當外界調用發票的這個Method的時候,發票是不可以說,“俺正煩著呢,待會再給你序列化”,發票的序列化操作會被立即執行,而且是無條件的。所以說發票類並沒有獨立心智,因此發票類是不可以視為Agent的。
二)與外界互動。互動這個詞用得澀了點,其實白話就是輸入輸出,能夠捕獲/感知到外界環境的變化(輸入),並且做出相應的反應(輸出),就OK了。從這個角度來理解,如果一個東東,它慧根再怎麼發達,再怎麼我行我素,但自我封閉起來,不接收外界的任何訊號,也不對外輸出任何訊號,那它也不可以稱為是Agent。這裡有同志也許會說:“同學,這個定義條件未免太弱智了點吧,你倒是找一個完全封閉的軟體出來俺我看看啊”。俺還真能給你找一個出來。注意到的是“
互動的”,這個相應的意思是根據外界的條件,輸出是可以變化的。寫一個簡單到只包含一行語句的程式:Console.WriteLine(“Hello Agent”);。不管外界是颳風下雨,不管機器是386還是X86,不管記憶體是256M還是2G,只要這個程式執行,它的輸出就是”Hello Agent’。這個程式的確是有輸出,但不是根據輸入而得到的“相應的”輸出。所以這個只包含一行代碼的程式並不是Agent,它只是一個Program。 關於Agent的本源,其實是仁者見仁,智者見智的一個概念。俺在這裡白話一番,基本上是起個拋磚引玉的功效,並不是講這就是絕對正確的。針對不同的背景,環境或者應用場合,俺們可以將Agent的本質理解為不同的東西。最重要的是,理解深刻了,領悟透徹了,一定要能解決實際問題,一定要在實際開發中派上用場,否則就不是白話,而是白談。 提供幾個有意思的Topic供同志們消遣。l 電腦病毒是Agent嗎。l 在以往設計的軟體系統中,有沒有見到過Agent的影子。l 什麼樣的軟體系統,Agent最能派上用場。