B、使用手冊

第一章

介紹

1.1 介紹

MCMAS是多智體系統(MAS)的模型檢查器。MCMAS接受輸入MAS規格說明和一組要驗證的公式,并使用基于有序二元決策圖(OBDD [1])的算法評估這些公式的真值。只要有可能,MCMAS就會給出值為假的公式的反例和值為真的公式的證明。MCMAS允許驗證多種模態,包括CTL操作符,認知操作符,這些操作符能在有或沒有公平條件的情況下推理正確的行為和策略。

MCMAS還可用于運行交互式的,逐步的模擬。此外,一個圖形界面作為Eclipse插件提供,其包含用于語法識別的圖形編輯器,圖形模擬器和用于反例的圖形分析器。

多智體系統在MCMAS中使用源自解釋系統[5]形式的專用編程語言進行描述。這種稱為ISPL(解釋系統編程語言)的語言類似于SMV語言,因為它通過變量表征代理,并使用布爾表達式表示它們的演化。

本文件的其余部分安排如下:

  • 2.1節是一個簡單的教程,簡要介紹了解釋系統的形式,ISPL和基本的MCMAS命令。
  • 3.1節描述了MCMAS可執行文件的命令行選項。
  • 3.2節包含完整的ISPL語法。
  • 3.3節介紹了圖形界面。
  • 3.4節詳細描述了MCMAS的理論背景。

1.2 安裝要點概覽

系統需求:

  • 經測試的平臺:x86兼容32位或64位處理器;ppc和MacIntel。
  • 操作系統:Linux,Mac OS X,使用Cygwin的Windows;
  • 編譯器:flex 2.5.4或更高版本, GNU bison 2.3或更高版本,GNU g++ 4.0.1或者更高版本;
  • Eclipse 3.2和Java 1.7或者更高的版本(可選的)。
    如果您想在不同的架構/配置上運行MCMAS,請隨時通過mcmas@imperial.ac.uk與我們聯系。

安裝步驟

  1. (僅Windows平臺)在Windows XP/Vista/7操作系統上安裝cygwin和g++,flex,bison這些包。詳細說明可以從http://www.cygwin.com/1 中找到。
  2. tar解壓MCMAS資源,輸入make,你可以獲取到可執行的mcmas
  3. (可選)通過將文件org.mcmas.ui_1.0.0.jar文件復制到Eclipse安裝的插件/目錄,來安裝Eclipse圖形編輯器插件。 安裝Graphviz(http://www.graphviz.org/)。 然后第一次使用選項“-clean”運行Eclipse,并在MCMAS首選項中指定包含mcmasdot(Graphviz中的程序)的目錄的路徑,以及Cygwin中的bin目錄(如果使用Windows)。

運行mcmas

  • 命令行中輸入,請參閱example目錄中的示例。
    ./mcmas -h
  • 圖形界面:啟動Eclipse;如果插件已被識別,您應該能夠創建一個新的ISPL項目并創建一個新的ISPL文件。

1.2.1 更簡單的安裝

我們或許可以為您的系統提供預編譯的二進制版本,請通過mcmas@imperial.ac.uk與我們聯系。

第二章

教程

2.1 教程

2.1.1 如何描述智體系統?

存在各種技術和語言來描述智體系統。MCMAS采用并擴展了解釋系統的形式[5],使用專用的ISPL語言。我們將智體區分為兩類:“標準”智體和環境智體。環境智體用于描述“標準”智體們共享的邊界條件和基礎結構,其模型與“標準”智體類似(見下文)。并非所有模型都需要環境智體,因此在ISPL中是可選的。

簡而言之,在MCMAS中,每個智體(包括環境智體)的特征有:

  1. 一組本地狀態(例如接收方的狀態“就緒”或“忙”)。
  2. 一組動作(例如“發出消息”或“打開信道”)。
  3. 描述在給定本地狀態下,智體可以執行哪個動作的規則。 我們將此規則稱為協議不要與網絡中的協議概念混淆)。
  4. 一個演化函數,描述智體的本地狀態如何根據其當前的本地狀態和其他代理的動作而演變。

本地狀態。本地狀態通過本地變量來定義:例如,參考一個具有兩個傳感器的打印機,一個傳感器用于調色劑(其變量可以是高或低),以及一個用于紙的傳感器(其變量可以是滿或空)。在這種情況下,打印機智體具有四種可能的本地狀態,其對應于調色劑和紙張變量的所有可能值的組合。本地狀態是私有的,即每個智體只能觀察其自身的本地狀態,下面討論的所有其他參數(協議和演化函數)不能引用其他智體的本地變量。唯一的例外是所有“標準”智體都可以“窺視”某些環境變量。智體 i 可以查看的環境中的這些變量稱為智體 i本地可觀察變量。它們可以在智體 i 的協議和演化函數中被引用,因此是智體擴展的本地狀態的一部分。但是,它們的值只能由環境改變,即“標準”智體只允許讀取它們的值。此外,智體的認知可訪問性關系(參見第3.4節)基于代理的擴展本地狀態。直觀地,如果一個智體的擴展本地狀態保持不變,且在這個系統的所有狀態下某些東西都是真的,則智體在系統的一個狀態下“知道”這些東西。在本手冊的其余部分,我們使用“本地狀態”一詞來表示“擴展的本地狀態”。

動作。每個智體(包括環境)都被允許執行某些動作,例如發送消息。 并假設所有其他智體都可以看到該智體所執行的所有動作。

協議。協議描述了可以在給定的本地狀態中執行哪些動作。由于本地狀態是根據變量定義的,因此智體的協議表示為從變量映射到動作的函數。在ISPL中,協議并不要求詳盡無遺:僅指定與某些動作的執行相關的變量賦值就足夠了,并通過關鍵字Others表示一個包含全部的賦值(見下文)。協議不需要是確定的:可以將一組動作與給定的變量賦值相關聯。在這種情況下,在該集合中非確定性地選擇要執行的動作。

演化函數。一個智體的演化函數描述了變量的賦值如何隨其他所有智體執行動作的結果而變化。例如,一個打印機的演化函數可以規定為,如果當前本地狀態(或組成本地狀態的變量)是“就緒”,并且一個智體執行“發送打印作業”動作,那么打印機的下一個本地狀態是“忙”。形式上,演化函數是一個函數,它返回智體本地變量的“下一個”賦值,即是關于本地變量的“當前”賦值集,環境的可觀察變量以及智體已執行的動作的函數。通過聯合所有智體的演化函數來計算全局演化函數。

使用ISPL的MAS描述是通過聲明本地變量賦值的一組初始狀態來完成的。如果多于一個狀態滿足分配,則隨機選擇初始狀態。系統根據協議和演化函數從這組初始狀態演變,并且該過程用于計算用戶指定的公式的真值。公平條件也可以在ISPL中指定,以排除不需要的行為(例如,通信信道持續噪聲或打印機被單個代理永遠鎖定)

在下一節中,我們將提供兩個具體示例及其ISPL編碼。我們參考3.4節來獲得更正式的ISPL定義及其語義。

2.1.2 一個具體的例子:比特傳輸問題及其ISPL形式的編碼

在比特傳輸問題[5]中,發送方S希望通過使用不可靠的通信信道將比特值傳送給接收方R(見圖2.1)。在此示例中,通道可能會丟棄消息,但不能篡改消息;此外,在任何給定時間,信道只能在一個方向上發送消息而在另一個方向上不發送消息。

實現通信的一種機制如下:S立即開始將比特值發送到R,并繼續這樣做直到它從R收到確認。R在收到比特之前什么都不做;從那時起,它將確認收據的消息發送給S。當S從R接收到第一個確認時,S停止將該比特發送到R,并且協議在此處終止。

為了以解釋系統的形式編碼這個例子,我們首先介紹一個Environment智體,其ISPL代碼如下:

Agent Environment
  Vars:
    state : {S,R,SR,none};
  end Vars
  Actions = {S,SR,R,none};
  Protocol:
    state=S: {S,SR,R,none};
    state=R: {S,SR,R,none};
    state=SR: {S,SR,R,none};
    state=none: {S,SR,R,none};
  end Protocol
  Evolution:
    state=S if (Action=S);
    state=R if (Action=R);
    state=SR if (Action=SR);
    state=none if (Action=none);
  end Evolution
end Agent

在這種情況下,Environment沒有可觀察的變量(因此,此部分未出現在代碼中),且它只有一個表示通信信道可用性的可變狀態(例如,SR表示兩個方向都可以進行通信)。因此,Environment智體有4種可能的本地狀態。Environment可以執行四個動作(在這個例子中,我們對本地狀態和動作使用相同的名稱):僅從發送方傳輸消息,從發送方和接受方傳輸消息,僅從接收方傳輸消息,不傳輸任何消息。在這個例子中,協議簡單地規定在每個狀態中Environment智體可以選擇(非確定性地)任何動作。演化函數定義如下:在Evolution:下面的第一行,讀作“如果Environment的(當前)動作是S,則下一個狀態將是S”。從本質上講,演化函數只是在環境的本地狀態中記錄最后執行的動作。通常,當關鍵字if右側的布爾條件變為真時,會觸發演化函數中的一條。

我們通過以下ISPL代碼對智體Sender進行編碼:

Agent Sender
  Vars:
    bit : { b0, b1}; -- The bit can be either zero or one
    ack : boolean;  -- This is true when the ack has been received
  end Vars
  Actions = { sb0,sb1,nothing };
  Protocol:
    bit=b0 and ack=false : {sb0};
    bit=b1 and ack=false : {sb1};
    ack=true : {nothing};
  end Protocol
  Evolution:
    (ack=true) if (ack=false) and
       ( ( (Receiver.Action=sendack) and (Environment.Action=SR) )
        or
       ( (Receiver.Action=sendack) and (Environment.Action=R) )
       );
  end Evolution
end Agent

請注意,這是一個“標準”智體,并且不存在可觀察的變量。Vars部分聲明了兩個變量:枚舉類型bit編碼了發件方想要發送的比特值,和一個布爾變量ack編碼是否已收到確認(可以通過使用前綴--和注釋文本來添加注釋 )。因此,發送方具有四個可能的本地狀態,其對應于bitack的所有可能值的組合。發送方聲明了三個動作:發送比特值0,發送比特值1,什么都不做。發送方的“協議”部分定義了如何執行這些動作。通常,協議的每一行都以變量值的布爾條件開始,后跟冒號,后跟布爾條件為真時允許的動作列表。協議的行不需要是詳盡的:如果不是,則需要使用特殊關鍵字Other來指定當布爾條件都不為真時要執行的動作(例如,在這種情況下引入“什么都不做”動作)。在這種情況下,演化函數很簡單:發送者僅在變量ack的值為false并且從接收方收到確認時才更改它的值(并且變量bit不會改變其值);請注意其他智體的動作通過使用含有作用域的語法AgentName.Action指定。如果未添加作用域前綴,則該值旨在引用本智體的變量。與協議的情況一樣,布爾條件列表不需要涵蓋所有可能的情況:MCMAS假定,如果沒有布爾條件為真,則智體的本地狀態不會更改。

我們通過以下ISPL代碼對智體Receiver進行編碼:

Agent Receiver
  Vars:
    state : { empty, r0, r1 };
  end Vars
  Actions = { nothing,sendack };
  Protocol:
    state=empty : {nothing};
    (state=r0 or state=r1): {sendack};
  end Protocol
  Evolution:
    state=r0 if ( ( (Sender.Action=sb0) and (state=empty) and
                    (Environment.Action=SR) ) or
                  ( (Sender.Action=sb0) and (state=empty) and
                    (Environment.Action=S) ) );
    state=r1 if ( ( (Sender.Action=sb1) and (state=empty) and
                    (Environment.Action=SR) ) or
                  ( (Sender.Action=sb1) and (state=empty) and
                    (Environment.Action=S) ) );
  end Evolution
end Agent

僅為此智體聲明一個枚舉變量,表示是否已接收該比特及其值。智體Receiver可以執行兩個動作:不執行任何動作(如果狀態為空),或者如果已接收到比特,則發送確認消息。如果Receiver處于狀態為空并且Sender正在執行發送位0的操作,此時環境正在雙向啟用傳輸(Environment.Action=SR)或者至少從發送方啟用傳輸(Environment.Action=S),則Receiver演變為狀態r0。狀態r1的演變是類似的。

在聲明Environment和agents之后,還需要五個部分來完成MCMAS的ISPL:EvaluationInitStatesGroups,Fairness,和待驗證的公式列表:

Evaluation
  recbit if ( (Receiver.state=r0) or (Receiver.state=r1) );
  recack if ( ( Sender.ack = true ) );
  bit0 if ( (Sender.bit=b0));
  bit1 if ( (Sender.bit=b1) );
  envworks if ( Environment.state=SR );
end Evaluation
InitStates
  ( (Sender.bit=b0) or (Sender.bit=b1) ) and
  ( Receiver.state=empty ) and ( Sender.ack=false) and
  ( Environment.state=none );
end InitStates
Groups
  g1 = {Sender,Receiver};
end Groups
Fairness
  envworks;
end Fairness
Formulae
  AF(K(Sender,K(Receiver,bit0) or K(Receiver,bit1)));
  AG(recack -> K(Sender,(K(Receiver,bit0) or K(Receiver,bit1))));
end Formulae

Evaluation部分介紹了在公平條件和待驗證的公式中使用的布爾變量。這些布爾變量由關于智體的本地狀態的布爾表達式定義。例如,如果Receiver的本地狀態是r0r1,則布爾變量recbit為真。

InitStates部分通過本地狀態的布爾表達式聲明了一組初始狀態。

Groups部分允許定義智體組,可用于驗證Formulae部分中的組模態。

Fairness部分包含一個布爾表達式列表:直觀地說,要求這部分列出的所有公式必須在所有動作中永遠為真。例如,在上面的例子中,要求命題envworks永遠為真,這意味著環境不能永遠地避開狀態SR

注意。如果任何公式都不需要組模態,則Groups部分可以保留為空,或者可以從ISPL代碼中刪除整個部分。 這同樣適用于Fairness部分。

Formulae部分包含待驗證的公式列表。使用CTL時間運算符,認知算子,運算符來構建公式以推理正確的行為和策略。在上面列出的示例中,第一個公式讀作“沿著所有路徑,在將來的某個時刻,發送方將知道接收方知道比特值是0或者1”。在這種特殊情況下(見下文),這個公式是正確的,因為公平條件envworks。如果這個公平條件被注釋掉,則公式變為假(因為環境可以無限期地禁止通信)。第二個公式聲明了“總是如此,如果收到確認,則發送方知道接收方知道該比特的值”。即使公平條件被刪除,該公式也是如此。本節中提供的示例和其他公式可以在MCMAS發布的源代碼中的文本文件examples/bit_transmission_protocol.ispl中找到。

2.1.3 驗證和模擬

在本節中,我們將介紹如何在命令行運行MCMAS,以執行上一節中介紹的例子的驗證和模擬。

最小的MCMAS執行包括調用可執行文件,后跟要驗證的ispl文件的名稱:
$ ./mcmas examples/bit_transmission_protocol.ispl

?************************************************************************
MCMAS v1.2.2
 This software comes with ABSOLUTELY NO WARRANTY, to the extent
 permited by applicable law.
 Please check http://vas.doc.ic.ac.uk/software/mcmas/ for the latest release.
 Report bugs to <mcmas@imperial.ac.uk>
************************************************************************
examples/bit_transmission_protocol.ispl has been parsed successfully.
Global syntax checking...
Done
Encoding BDD parameters...
Building partial transition relation...
Building OBDD for initial states...
Building reachable state space...
Checking formulae...
Building set of fair states...
Verifying properties...
  Formula number 1: (AF K(Sender, (K(Receiver, bit0) || K(Receiver, bit1)))), is TRUE in the model
  Formula number 2: (AG (recack -> K(Sender, (K(Receiver, bit0) || K(Receiver, bit1))))), is TRUE in the model
done, 2 formulae successfully read and checked
execution time = 0
number of reachable states = 18
BDD memory in use = 9018016

在這種情況下,如果語法正確,MCMAS只輸出在ISPL文件的Formulae部分中找到的公式的計算結果。MCMAS對輸入文件執行詳細的語法檢查,如果存在語法錯誤,則不會調用驗證進程。如果出現錯誤,MCMAS將終止并顯示錯誤警告和詳細信息。例如,如果Environment智體中state的定義中分號被刪除,則MCMAS將終止,并顯示以下錯誤:
$ ./mcmas examples/bit_transmission_protocol.ispl

************************************************************************
MCMAS v1.2.2
 This software comes with ABSOLUTELY NO WARRANTY, to the extent
 permited by applicable law.
 Please check http://vas.doc.ic.ac.uk/software/mcmas/ for the latest release.
 Report bugs to <mcmas@imperial.ac.uk>
************************************************************************
examples/bit_transmission_protocol.ispl:9.16: syntax error, unexpected LCB, expecting COLON
examples/bit_transmission_protocol.ispl has syntax error(s).

有許多選項可用于計算反例、增加詳細程度等。這些選項在3.1節中有詳細說明。

MCMAS的一個重要特征是運行模擬的可能性。使用命令行中的-s選項啟動模擬環境:
$ ./mcmas -s examples/bit_transmission_protocol-2.ispl

************************************************************************
MCMAS v1.2.2
 This software comes with ABSOLUTELY NO WARRANTY, to the extent
 permited by applicable law.
 Please check http://vas.doc.ic.ac.uk/software/mcmas/ for the latest release.
 Report bugs to <mcmas@imperial.ac.uk>
************************************************************************
examples/bit_transmission_protocol-2.ispl has been parsed successfully.
Gloabl syntax checking...
Done
Encoding BDD parameters...
--------- Initial state ---------
Agent Environment
  state = S
Agent Sender
ack = false
  bit = b0
Agent Receiver
  state = empty
----------------------------
Is this the initial state? [Y(es), N(ext), E(xit)]:

MCMAS此時停止等待來自用戶的輸入。使用鍵N(下一個)和P(上一個)可以瀏覽所有可能的初始狀態。使用Y選擇一個初始狀態:

--------- Initial state ---------
Agent Environment
state = S
Agent Sender
  ack = false
  bit = b0
Agent Receiver
  state = empty
----------------------------
Is this the initial state? [Y(es), N(ext), E(xit)]: Y
Enabled transtions:
1 : Environment : none; Sender : sb0; Receiver : nothing
2 : Environment : SR; Sender : sb0; Receiver : nothing
3 : Environment : R; Sender : sb0; Receiver : nothing
4 : Environment : S; Sender : sb0; Receiver : nothing
Please choose one, or type 0 to backtrack or -1 to quit:

選擇狀態時,MCMAS會輸出該狀態可能的轉換。可以通過鍵入相應的數字來選擇轉換(在下面的示例中,選擇了轉換2):

Please choose one, or type 0 to backtrack or -1 to quit:
2
--------- Current state ---------
Agent Environment
  state = SR
Agent Sender
ack = false
  bit = b0
Agent Receiver
  state = r0
----------------------------
Enabled transtions:
1 : Environment : S; Sender : sb0; Receiver : sendack
2 : Environment : R; Sender : sb0; Receiver : sendack
3 : Environment : SR; Sender : sb0; Receiver : sendack
4 : Environment : none; Sender : sb0; Receiver : sendack
Please choose one, or type 0 to backtrack or -1 to quit:

選擇轉換后,MCMAS將顯示新狀態和新狀態下可用的轉換。請注意,始終可以使用0原路返回,或使用-1退出。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,837評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,196評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,688評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,654評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,456評論 6 406
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,955評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,044評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,195評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,725評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,608評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,802評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,318評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,048評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,422評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,673評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,424評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,762評論 2 372

推薦閱讀更多精彩內容

  • 我們今年演的第一場童話劇,現在我來給大家講一講我們的酸甜苦辣咸吧。 首先我們需要讀書,在讀書的過程真的很苦惱。每次...
    王姝怡閱讀 219評論 0 0
  • 清冷的雪堆積成一朵朵旖旎 夾雜話不出的朦朧 霧氣溫柔地飄在...
    琉璃盞中顏如玉閱讀 259評論 0 2
  • 學術普及性的文章,講究“深入淺出”,但能做到的其實不多,我覺的聶崇正先生這本《明清畫譚》就做到了,更難得的...
    釣魚舟閱讀 397評論 0 4
  • 2017年12月22日。 我隨著奶奶進了后面廚房,空的鍋爐里需要點些火給來人取暖。 奶奶佝僂著...
    朱蛋蛋閱讀 267評論 0 0