我的雲端生活網 - Life+

Monday, April 6, 2009

規則式系統的系統描述

本篇來講一些規則系統(production system, rule-based sytem, or expert sytem)的系統描述(formulation)。規則系統是由工作空間(包含事實)、知識庫(包含規則)、以及推論引擎(包含推論及控制流程)等三樣東西構成。一般大學教科書中,很少明確說明規則系統的設計。而相關論文則都使用 Lisp 語言介紹系統架構,較近年代的程式人員根本看不懂。

1. 程序代數

所以,用一些形式語言說明規則系統的架構。推論引擎包含三個分開的程序,所以我們用到基本程序代數(Pi Calculus):令 p, q 是二個程序,二個程序的結構可能是下列其中一種樣子。

p, q ::=   a(c) . p                           (輸入)
           |   a! c . p                            (輸出)
           |     P  |  q                            (平行處理)
           |   if x = y then p else q   (條件控制)
           |   rec z . p                          (遞迴)
           |   stop                                (終止)

上述項目的意義是:
  1. a(c) . p 是程序 p 要從 a 通訊管道取得一些資料 c ;
  2. a! c . p 是程序 p 要對 a 通訊管道送出一些資料 p ;
  3. p | q 是二個程序 p, q 平行地執行;
  4. if x = y then p else q 是先比較二項資料 x 和 y ,如果 x = y 就執行程序 p ,否則執行程序 q ;
  5. rec z . p 是將程序 p 定義為一個遞迴程序,以 z 標示。在 p 中存在 z 符號,表示遞迴呼叫;
  6. stop 是一個終止程序。
我們說, P <= a(b) . p 是定義一個程序 P 的內容是, p 知道一 通訊管道 a 並 管道 a 取出資料
b 。為了方便,用 P(a) 表示此式,即程序 P 一開始就知道通訊管道 a ,並可以隨意使用。

2. 基本詞彙

另外,我們需要一些基本符號,列舉如下:

單元詞彙:要表示一個資料單位或一項物件,用小寫字母 a, b, ..., z 表示任何一個單元。

集合詞彙:用大寫字母 A, B, ..., Z 表示任何一個集合。每一個集合中包含了許多單元。所以,x < X 表示一個單元詞彙 x 屬於另一個集合 X 。

邏輯式敘述:用一些單元詞彙和一些邏輯運算符號 & , | , ~ ,  ->  等等,組合成另一些字串,這些字串稱為邏輯式、或稱為敘述:例如,有單元詞彙 x, y ,則 x & y 是一則敘述、 ~x 是一則敘述、並 (x & y -> x) | (x & y -> y) 也是一則敘述。在本篇文章,我們要用到許多  ->  運算符號。

隱含( -> ):是一種邏輯運算符號,用來表示符號的左項和右項之間有因果關係:例如,對單元詞彙 x, y 來說, x -> y 是一則敘述,其意義是

                  x           y                  x -> y
               true      true                true
               true      false               false
               false     true                true
               fase      false                true

只有當 x 有效但 y 無效時, x -> y 不能成立。這稱為「 x 隱含 y 」、「 x 代表 y 」。

例外詞彙:任何其他用途的詞彙,都用粗體大寫字母 A, B, ..., Z 表示:例如,用 M 表示一則程序。

Lambda函數:是一種匿名函數的表示法,以格式為「 入 a b c ...  .  p(a, b, c, ...) 」的字串表示一則函數。其中,「入」是希臘文字母,唸 lambda ;「入」之後是一些參數、之後是一點、之後是函數內容:例如, 入x y . x + y 是一則匿名函數,接受二項參數而計算總和。

3. 定義

事實:用一個單元詞彙表達一項事實:例如,用 x 表達「今天下雨」。

規則:用一則格式為「 a & b & ... -> a & b & ... 」的邏輯式,表示一條規則:例如 a & b -> c & d 。其中, ->  符號左邊稱為左手側,常用英文 LHS 表示;右邊稱為右手側,常用英文 RHS 表示。左手側就是規則條件,而右手側就是規則的結論。

規則系統:是一組結構 <F, R, M, C, A ,其中組成單元有:
  1. F :一些事實的集合。
  2. R :一些規則的集合。
  3. M :規則比對程序,負責將一些事實和一些規則彼此比對,然後選出符合比對的規則,當做結果。
  4. C :協調程序,負責將 M 的結果做衝突協議(Conflict Resolution)。衝突協議是在一些規則中,只挑選一些必須啟動的規則,當做結果;並排除彼此衝突或互相重覆的規則:例如,規則 A & B -> C 和規則 A -> C 重覆,因為前者的規則條件是後者的子集合。 Rete 演算法規定,對這二條規則,要選擇 A & B -> C ,因為規則條件比較嚴格。
  5. A :行動程序,負責將 C 的結果── 一些確定要啟動的規則 ──確實執行。 A 要將 C 結果的右手側取出並執行。
Rete 結構Rete 演算法是討論一些規則的集合應該如何組織、並組織一種有效的結構,使事實和規則彼此比對變的比較有效。令有一些規則為 R = { A & B -> C ,  B & C -> D } ,根據最初的 Rete 演算法論文, R 有一組對應的 rete 結構,令為 R(R) 。 R(R) 包含一些流程控制,定義為

        入 f  .   R(R)   ::=
                    入 f  .  if type(f) = A then assert(C(_^B)) ;
                               if type(f) = B then assert(C(A^_)); assert(D(_^C)) ;
                               if type(f) = C then assert(D(B^_)) ;
                               if assert(C(_^B)) and assert(C(A^_)) then match(A & B -> C) ;
                               if assert(D(_^C)) and assert(C(B^_)) then match(B & C -> D)

R(R) 中由三種節點構成,包括 type(f) = A 檢查輸入事實的 type 屬性、 assert(C(A^B)) 表示結果 C 是由 A & B 決定、以及 match(r) 指明條件 r 已經符合比對。而 C(_^B) 表示 C 的一則決定項已經接受、並等待另一則決定項 B 。

4. 推論引擎

推論引擎包含 M, C, A 三項程序,依序循環使用。我們用程序代數和上述符號標記法定義三項程序。

取比對程序 M

    M(a, b) <= rec z  .  a(f1, (f2, f*)) . ((入 f . R(R))  f1  |  a! f2, f*  .  z )

其中 (f1, (f2, f*)) = F = (f1, f2, ..., fn) ,並且 (入 f . R(R))  f1 是一則匿名函數代入參數而生效,計算方式是 R(R)[f1/f] 、即把函數主體 R(R) 中存在的 f 替換為 f1 。在 R(R) 中的 match 定義為

    match(b) <= b! r  .  stop

又取協調程序 C

    C(b, c) <= rec z . b(r1, (r2, r*))  .  ( if r1 = empty then stop
                                                                 else
                                                                     if forall r < R . r1 >= r then fire(r1)
                                                               | b! r2, r*  .  z )

其中, r1 > r 是一條規則對另一條規則的大於關係,定義為 LHS(r1) < LHS(r) 則 r1 > r ,並且 fire(LHS -> RHS) <= c! RHS  .  stop 。

又取行動程序 A

    A(c, d) <= rec z . c(rhs1, (rhs2, rhs*))  .  d! rhs1 . c! rhs2, rhs* .  z

於是,推論引擎取為

INF(a) <= rec z . a(F, R) . (M(a, b) | C(b, c) | A(c, d) | d(F') . a! (F+F'), R . z)

嗯?有點錯誤,管它的,只是個思考過程。

Sunday, March 29, 2009

工具系列:UML狀態圖

本篇介紹UML狀態圖。狀態圖是用來表達系統執行的狀態,特別要顯示系統在不同狀態之間有不同的行為。系統的每一項活動或操作步驟會使一個狀態轉移為另一個狀態。通常,狀態圖關心的範圍相當小,只和一個類別或元件有關。

以下先介紹狀態圖的圖示,然後給一個示範。

一、UML狀態圖的圖示
  • 狀態:(State) 用圓角方形、其中寫狀態名稱,表示一個狀態。圓角方形中間可打一橫線,線下方標示該狀態的效果

  • 效果:(Effect) 以格式為 "動作類型 / 動作" 的文字,描述一個狀態的進、出、及運作的效果。動作類型Entry, Exit, 和 Do 等等。動作可以是類別的操作方法、或是簡單的動詞。對一項狀態來說,如果同一組動作類型的行為都有同樣的效果,則應該將此狀態效果寫出來。
  • 傳遞:(Transition) 從一項狀態拉出帶箭頭的線、到另一項狀態、並在線上標識名稱,表示從一項狀態傳遞到另一項狀態。

  • 傳遞標籤:(Transition Label) 以格式為 "事件 [限制條件] / 動作效果" 的文字,描述一項狀態滿足條件時會觸發一項事件、轉為另一項狀態,並且造成一項效果。事件(event)若使用英文應記為過去式動詞。限制條件是一則判斷式,為了表達明確,不要使用重疊的限制條件,例如 x <= 0 是重疊的,應該分為 x < x =" 0" style="font-weight: bold;">動作效果要標記類別的操作方法;動作效果和狀態效果有相同意義。
  • 起動狀態:(Initial State) 用實心圓點表示起動狀態。起動狀態拉出的傳遞線不能有限制條件
  • 結束狀態:(Final State) 用外圍圓邊的實心圓點表示結束狀態。

二、UML狀態圖的示範

以下示範一台讀卡機的狀態圖。

Friday, March 27, 2009

【RFID企業及醫療系統整合商(SI)加值應用研討會】歡迎共襄盛舉!!



● 活動時間:2009年4月15日(週三) PM13:30~16:40
● 活動地點:六福皇宮 B3永康殿 (台北市中山區南京東路三段133號)
● 邀請對象:中大型企業、醫療產業IT決策者及SI系統整合服務商
● 參加辦法:本活動完全免費入場,凡參加者有機會獲得Asus 10吋Eee PC或捷安特自行車,席次有限,敬請盡速報名,以免向隅!
● 線上報名:http://211.22.252.75/RFIDPublish/Seminar.htm

金融海嘯肆虐全球,各大產業無不精實帷運力抗景氣寒冬,在各大組織調整體質與步伐的同時,除了刪減預算、減薪、裁員之外,難道沒有更好的解決方案嗎?

微程式資訊提供企業/醫療IT決策者及SI業者絕佳的RFID整合MSN機器人加值應用解決方案,幫助企業及醫療產業快速整合現有系統資源,有效降低營運成本、徹底提昇管理效能,讓您用RFID創新科技抓住新契機,在這波經濟危機浪潮中穩站浪潮最前端,成為產業趨勢新霸主!

本次研討會除了邀請到多位業界名人與您分享各產業RFID導入心得之外,現場更提供企業、醫療、電子票證應用情境模擬展示,讓所有來賓透過現場互動展示與實境體驗快速掌握RFID加值應用模式,從體驗中發現產業加值新趨勢。


>> 現場實境展示項目 (點圖放大)


一、核心應用
1. RFID人員資料/卡片管理
2. 全球化IP門禁/差勤管理
3. 電子點卷清算管理

二、醫療應用
1. 物流&氣送桶管理
2. 醫療檢體、藥品管理
3. RTLS即時定位應用
- 人員追蹤管理
- 儀器資產管理
- 母嬰同室管理
- 手術流程管理
4. 醫療護送管理
5. 醫療臨床照護

三、企業應用
1. RFID TASHI Solution-JanitorLite (高速網路門禁/差勤)
2. RFID TASHI Solution-Sentinel (RFID安全辨識視訊影音對講)
3. RFID TASHI Solution-Home Automation (RFID家庭自動化)
4. 侷限空間&緊急求救
5. 影印列印漫遊

四、電子票證解決方案
1. 電子票證模組
2. 電子票證小額付款機
3. LCD電子票證機
4. EDC電子票證機
5. 電子票證多功能複合機
6. 電子票證行動PDA
7. 電子票證觸控式Kiosk
8. 自動販賣機

誠摯邀請您報名參加喔 !! ^^

Wednesday, March 25, 2009

工具系列:UML活動圖

本篇介紹UML活動圖(Activity Diagram)。UML活動圖和一般的程式流程圖非常像,並多了能夠描述平形處理的能力。活動圖可表達流程,可用在描述複雜的操作過程、複雜的業務規則、一項或多項使用案例、或一項或多項商業流程。

以下,先介紹圖示及使用方式,接著展示一項示範。

一、UML活動圖的圖示及使用方式
  • 活動:(Activity) 用圓角方形、其中寫上活動名稱,表示一項活動。一項活動可以是呼叫一項操作方法、執行一項步驟、或是商務流程中的一項。

  • 使用案例:(Use Case) 用橢圓型、其中寫上案例名稱,表示一項使用案例。在UML活動圖中,可以將一項使用案例當做一項活動來配置。

  • 起點:(Start Point) 用實心圓點表示起點。一張UML活動圖必須有一個起點。

  • 終點:(Ending Point) 用實心圓點外加一環邊界,表示終點。一張UML活動圖可能沒有終點:例如,連續的流程。

  • 流程:(Flow/Edge) 從一項活動拉出帶箭頭的線、到另一項活動,表示一條流程從一項活動到另一項活動。
  • 決策點:(Decision Point) 用空心菱形表示一個決策點。決策點有一條流程流入、並有多條流程流出,其中,在多條流出的流程中可挑選執行其中一條流程。
  • 決策條件:(Guard/Condition) 用格式為 [測試條件] 的文字、附在決策點流出的一條流程線上,表示一項決策條件。一個決策點的每一條流程都必需有決策條件。

  • 合併點:(Merge Point) 用空心菱形表示一個合併點。合併點有多條流程流入、並有一條流程流出。合併點隱含在多條流入的流程中、根據流出流程的決策條件、有一條或多條流程要抵達,才能進行流程合併之後的工作。

  • 分岐:(Fork) 用一條粗線橫擋、有一條流程流進、並多條流程流出,表示一份平行工作的開始。

  • 結合:(Join) 用一條粗線橫擋、有多條流程流進、並一條流程流出,表示一份平行工作的結束。流程的合併隱含了所有流進的流程都要抵達、才能進行流程結合之後的工作。

  • 泳道:(Swimlane) 用大長條方塊、一端加上標籤欄位,表示一條泳道。泳道是UML活動圖中用來將一部份的活動和其他物件劃分為一群的空間。泳道的標籤名稱通常是一項參與者的名稱,表示該泳道包含的活動和一位參與者有關。有些泳道用來代表一段執行緒,則不標識為參與者名稱。
  • 分群:(Partitioning) 用併排的多條泳道、將UML活動圖的全部或一部份劃分,表示此圖有一些分群。

二、UML活動圖的示範

以下示範「使用者靠卡登入 RFID 系統」的活動圖。

Monday, March 23, 2009

工具系列:UML溝通圖

UML溝通圖(Communication Diagram),在前一版UML中稱為合作圖(Collaboration Diagram),顯示物件之間的通訊順序。溝通圖乍看與順序圖的功能有些重疊,不過,溝通圖突顯訊息傳遞的順序和分群、而後者則突顯物件運作的順序。

以下,先介紹溝通圖的圖示,再舉出一個示範例子。

一、UML溝通圖的圖示
  • 物件:(Object) 用長方形代表一項通訊個體、其中寫物件名稱、所屬類別名稱、並加底線,表示一項物件。

  • 關聯:(Relationship) 從一項物件拉出一條線到另一項物件,表示一項物件和另一項物件有關聯。關聯可能是一般、組合、或彙總等類型,在本圖型不畫出關聯的細節。

  • 訊息:(Message) 在關聯線上畫出帶箭頭直線,表示帶有方向的通訊訊息。箭頭線上要加上一個或多個訊息標籤,表示在同一條關聯線上、先後有一些訊息傳遞。訊息標籤格式是 階層式標籤代號 : 操作方法 (參數列) : 傳回值 、傳回值可省略。同一關聯線的同方向訊息,可共用一條箭頭線。

二、UML溝通圖的示範

以下示範RFID門禁管理系統的UML溝通圖。訊息要按照先後順序編號,並且可以將同一項案例的訊息分群並列為子訊息。

Thursday, March 19, 2009

msn機器人會打架

剛找到一個有趣的情況:

假設
機器人1: 會自動發訊息通知某事 且有 互動功能(且指令錯誤會回覆)
機器人2: 有互動功能(且指令錯誤會回覆)

且有一方必須是要能從 "非msn client" 加入機器人帳號為聯絡人加入;
另一方需要是可直接在 "msn client" 加入機器人帳號為聯絡人
=================================================
那麼;機器人彼此成為聯絡人時,會形成一個loop,彼此一直傳送訊息永不停止

將較之下 可直接在 "msn client" 加入機器人帳號為聯絡人 的程式,較容易
遭受病毒攻擊,反之;也無可避免

目前我沒有找到好的方法來避免,當然可以加入黑名單 使用發訊息的頻率來避
免大量的互相發訊,但我覺得這些都不是最好的方法,因為無法防範於事前

工具系列:UML順序圖

本文介紹UML順序圖(Sequence Diagram)。順序圖是討論系統中物件彼此溝通時、全部操作的順序。因此,圖中應該列出物件、物件的並存、訊息、以及通訊方向。以下說明圖示的畫法及擺設方式,接著再給一個示範。

一、UML順序圖的圖示
  • 參與項目:(Participant) 將參與的物件水平地擺開,並取適當距離、提供後續繪圖空間。參與的物件,包含在使用案例圖定義的參與者和外部實體、以及在物件圖定義的物件。挑選適當數目的參與項目,使順序圖的主題比較突顯。
  • 生命線:(Lifeline) 從每個物件下方、向下拉出虛線,表示物件運作的時間範圍。通常,同一張圖的每個物件生命線都一樣長;而若一項物件比其他物件更早消滅(從記憶體移除),要在生命線末端添加交叉線符號(X),並且該物件的生命線比其他物件的生命線短。

  • 活動:(Activation) 在生命線上拉出一塊空白縱長方形,表示該參與項目在運作範圍內、有一段活動的時期。活動來自程序呼叫,因此活動方塊也可以稱為程序呼叫方塊(Method-call Box)。物件接受一項程序呼叫、啟動活動時期、最後再傳回結果。
  • 訊息:(Message) 用帶有箭頭的水平線、並在上方加上訊息名稱,表示一項訊息或操作過程的呼叫。線有三種類型:(1) 實線和實心箭頭、代表同步訊息;(2) 實線和線條箭頭、代表非同步訊息;(3) 點線、代表傳回值(return value)。實線是用來呼叫程序,訊息名稱是「操作方法(參數列)」的形式;虛線是用來表示回應訊息,訊息名稱是傳回值的名稱。

  • 通訊起點:可能從一項參與項目先發出訊息,從該項目的生命線直接拉出第一條訊息線。或者,可能不是從任何參與項目先發出訊息,則從左端畫一粒黑點、從黑點拉出第一條訊息線。


二、順序圖的示範

以下示範一般用戶登入 RFID 系統的順序圖,即門禁管理的案例。用戶靠卡創造啟動訊息;讀卡機查詢特定方向、讀取卡片代碼和密碼;接著,讀卡機將密碼加密,傳送到系統系統資料庫代理人取得用戶密碼;系統讀卡機送來的密碼解密、並與資料庫代理人送來的密碼比對,傳回結果;系統讀卡機傳送登入狀態;最後,讀卡機用戶呈現接收情況。

示範的順序圖如下:

Blog Archive