• 沒有找到結果。

軟體代理人特性的分析

2.1. 軟體代理人程式的簡介

2.1.2. 軟體代理人特性的分析

介紹軟體代理人程式的元件結構以及軟體的外部執行環境後,雖然能了解軟

體代理人的表面(程式碼)和它跟外部環境間的互動,卻無法了解軟體代理人內在 的特性,這些特性才是了解使用者想利用軟體代理人來達到他們的目標的關鍵。

軟體代理人具有下列主要特性[2]:

1. 自動化(Autonomy):軟體代理人在完成任務期間所作的動作,都是由軟 體代理人自行作決定,不需要使用者的介入。

2. 合作(Collaboration)能力:軟體代理人彼此之間可以透過產生

(Create)、溝通(Communication)、發送(Dispatch)等動作來共同合作 完成使用者指派的任務。

3. 行動力(Mobility):軟體代理人為了完成任務,可以遷移到它所需要用 到的環境上去執行任務。

4. 反應力 (Reaction):軟體代理人可以偵測所處環境的變化,並自行做 出適當的反應動作。

5. 學習(Learning)能力:軟體代理人藉由和使用者溝通、和其他軟體代理 人溝通、或經由完成過的任務之過程與結果,可以從中學習記憶某些有 用的經驗,或修正某些錯誤的執行方式。所以一旦有類似或相同的任務 指派時,可以依照所學得的經驗來完成任務,以增加效率。

上述特性中,反應力為自動化特性的一種表現,所以軟體代理人,最主要特 性為:自動化(Autonomy)、合作能力(Collaboration)、行動力(Mobility)和學 習能力(Learning),同時具備此四特性的軟體代理人,稱為「聰明代理人(Smart Agent)」[2],如圖 2- 4 所示。

圖 2- 4 軟體代理人的四大重要特性

由於軟體代理人是一獨獨立完整程式,啟動後即自動執行,程式內容是依軟 體代理人的目標而設計,包含對外部環境的偵錯與因應,因此具有自動化的特 性,程式內容根據不同的應用而設計,很難有固定的形式。

以下敘述其他三特性:

2.1.2.1. 合作能力 (Collaboration)

軟體代理人的合作能力使得多個軟體代理人可以透過互動來完成系統的目 標,軟體代理人語言提供了下列三種合作的方法:產生(create)、訊息傳遞 (communication)、發送(Dispatch)[6],供設計者設計軟體代理人系統的合作機 制:

1. 產生(create):一個軟體代理人(產生者)可因工作需要而產生另外一個 軟體代理人(被產生者)來協助他的工作,產生者可利用產生的指令告知 軟體代理人伺服器要被產生的軟體代理人的位址、程式碼的類別名稱以 及相關的參數,代理人伺服器便可在指定的位址產生另一軟體代理人,

且產生者也可得到被產生者的 proxy,因此產生者就可以透過這 proxy 去 指 揮 被 產 生 者 執 行 工 作 , 以 IBM Aglets[6] 為 例 , Aglets 提 供

createAglet 的指令,透過這個指令就可以產生它所要的軟體代理人,

如圖 2- 5 所示。

圖 2- 5 軟體代理人的產生動作

2. 發送(Dispatch):由上述的情況,當被產生者必須要到遠端執行工作 時,產生者(發送者)可以透過 proxy 指揮被產生者(被發送者)執行 mobile 的動作,這樣的動作便稱為「發送(Dispatch)」,使用事件導 向(event-driven)的方式,發送者會具有發送的指令,發送指令內包含 了指定的移動位址,如圖 2- 6 所示,被發送者端則設置一個 Listener,

負責接收執行 mobile 的事件,並處理執行 mobile 的動作,以及 mobile 後的起始動作,這個部分等到下一個部分談到行動力時再詳細說明。

圖 2- 6 發送者

3. 訊息傳遞(communication):軟體代理人間無法像傳統的程式透過呼叫

i. 同步傳送(Synchronous Send):傳送者使用這個方法傳送訊 息時,傳送者的執行緒會停在這個指令,直到收到接收者回傳 結果或是傳送發生錯誤(Exception),執行緒才會繼續執行,

以 IBM Aglets 為例,Aglets 提供了 sendMessage 這個指令和 訊息(Message)物件,必須要取得接收者的 proxy 物件才能夠 使用 sendMessage,並宣告 Reply 物件來接收回傳結果,如圖 2- 7 所示。

圖 2- 7 同步傳送(Synchronous Send)

ii. 非同步傳送(Asynchronous Send):當傳送者使用這種方式傳 送訊息時,傳送者的執行緒不會停留在傳送的指令,可繼續執 行後繼續執行指令。接收者回傳的回應(Reply)物件,是由代 理人伺服器暫存起來,傳送者可再需使用回傳訊息時再詢問底 層的代理人伺服器,有沒有來自接收者的回應,如果有的話,

代理人伺服器就會將回應物件送給傳送者,以 IBM Aglets 為 例,Aglets 提供了 sendFutureMessage 這個指令,同樣需要 取得接收者的 proxy 物件才能夠使用,並提供 FutureReply 的物件,這個物件並不會馬上接收回應,等到傳送者想要詢問 回傳時,才利用該物件去跟代理人伺服器取得回傳物件,如圖 2- 8 所示。

圖 2- 8 非同步傳送(Asynchronous Send)

iii. 群播傳送:當傳送者想同時傳送訊息給多個接收者時,就可 以利用群播的方式來傳送,傳送者需與接收者約定好特定的訊 息內容,則當傳送者利用群播的方式將訊息傳送出去後,代理 人伺服器就會將這個訊息傳給所有訂閱(Subscribe)這個訊息 的接收者;其等待回傳的方式,則與非同步傳送相同,傳送者 送出訊息後會繼續執行,以 IBM Aglets 為例,Aglets 提供了 傳送者 multicastMessage 這個指令以及 ReplySet 的物件,而 接收者則可以使用 subscribeMessage 這個指令來約定訊息,

傳送者則利用 FutureReply 的物件來作接收回傳的動作,如圖 2- 9、圖 2- 10 所示。

圖 2- 9 群播(Multicast)接收者

圖 2- 10 群播(Multicast)傳送者 而接收者處理訊息的方式則分為下列兩種方式[6]:

i. 循序式訊息處理(Sequential Message Handle):所有軟體 代 理 人 都 有 一 個 專 門 處 理 外 來 訊 息 的 函 式 「 Message Handler」,當有訊息傳給此軟體代理人時,底層的代理人伺 服器會先收到這個訊息,接著根據 proxy 將這個訊息當成參數 去呼叫接收者的 message handler,並將訊息放在訊息序列 (Message Queue) 中 。 當 軟 體 代 理 人 處 於 等 待 的 狀 態 時 , Message Handler 即自動啟動執行,若有多個訊息需處理時,

其預設方式是一次處理一個訊息,且採先送先處理的方式,因

此稱為「循序式訊息處理(Sequential Message Handle)」,

以 IBM Aglets 為例,Aglets 提供一個名為 MessageHandle 的 函式,預設為同步函式(Synchronized Function),在同一個 時間內只能被呼叫一次,因此一次只能處理一個訊息,且根據 是否要回傳,利用 sendReply 的指令便可還將回傳物件送給代 理人伺服器,再由代理人伺服器傳給傳送者,如圖 2- 11、圖 2- 12 所示。

圖 2- 11 循序式訊息處理程式碼

圖 2- 12 循序式訊息處理示意圖

ii. 並行式訊息處理(Parallel Message Handle):循序式訊息 處理機制一次只能處理一個訊息,當軟體代理人常接收很多訊 息時,將產生處理效率不佳的問題;此時可將 Message Handler 設為非同步函式,則每個訊息都會開啟一個執行緒去處理,此 稱為「並行式訊息處理(Parallel Message Handle)」,以 IBM Aglets 為例,MessageHandle 的函式內可能有多種不同的訊息 處理路徑,則透過一個 exitMonitor 的指令,釋放出 lock 讓 軟體代理人在執行這個訊息處理路徑,同時可以處理另一個訊 息,如圖 2- 13、圖 2- 14 所示。

圖 2- 13 並行式訊息處理程式碼

圖 2- 14 並行式訊息處理程式碼

依據上述傳送與接收訊息不同的處理方式,產生六種可能的訊息傳遞與處理

軟體代理人之行動力(Mobility)特性具有下列優點而被廣泛應用[3]:

1. 減少訊息傳遞的成本:軟體代理人可以直接移動到指定的地方利用當 地的資源做運算,而不用像傳統的 Client-Server 架構,必須藉由一次 次的訊息交換才能決定下個執行的步驟,可以節省網路頻寬的耗費並

的狀態分為兩個部分:資料狀態(Data State)以及執行狀態(Execution State),

資料狀態(Data State)指的是程式內各個全域變數所儲存的資料,例如在物件導 向程式中的類別內部可以宣告變數,這些變數儲存的資料會隨著程式的執行而有 變動。執行狀態(Execution State)指的是程式在執行時期儲存在快取記憶體 (cache)以及中央處理器的暫存器(Register)的值,利用前面所提到物件序列化 機制和 Reflection 機制,物件序列化可以將系統執行時期物件內部的狀態儲存 成檔案,而 Reflection 機制則可以從物件狀態檔案中讀出類別內部的變數值,

因此軟體代理人平台在傳送代理人程式時能夠傳送其資料狀態,當軟體代理人到 達目的地後,軟體代理人需要重新執行原本的程式碼,只有上個主機執行完後的 資料狀態延續下來提供執行,這種遷移的方式我們稱為「Weak Mobility」[11],

如圖 2- 15 所示,一旦軟體代理人執行遷徙的指令,則由代理人伺服器將軟體代 理人

圖 2- 15 行動力

程式和資料狀態傳送到目標地點,再由目標地點的代理人伺服器重新跑起這個軟 體代理人,並呼叫軟體代理人設置的 Listener 中 onArrival 的函式和提供原先 的資料狀態,根據 onArrival 中的描述在目標地點開始執行工作,以圖 2- 15 為 例,則軟體代理人抵達目標地點後,會重新再執行 run 的函式。

2.1.2.3. 學習能力 (Learning)

軟體代理人學習能力(Learning)的定義是:軟體代理人可以學習到新的知 識,並且能夠運用知識增加處理的速度,所以軟體代理人有沒有學習力特性,可 從軟體代理人是否具有知識庫(Knowledge Base)且對知識庫有儲存或修改的動 作來判斷,而知識庫可以分成下列兩種:

1. Rule Base:用來放置代理人的行為規則(Action Rule)的知識庫,軟體 代理人由知識庫中的行為則來決定何種情況要執行對應的動作,如圖 2- 16 所示,當具有學習能力時,軟體代理人可增加新的行為規則,因 此可處理更多的情況或提供更多的服務,或是修改錯誤的行為規則,當 軟體代理人再碰到相同情況時,並可執行正確的處理方式。

圖 2- 16 Rule-Based 知識庫的形式

2. Data Base:這類型的知識庫單純用來儲存對軟體代理人執行有幫助的 資料,當具有學習能力時,軟體代理人增加新資料或修改原先資料,可 藉此改變執行的流程,選取最快的處理程序。

相關文件