• 沒有找到結果。

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

第二章 相關研究

此章節主要介紹本研究所使用到的相關技術與工具,本研究主要以 ASP 來處理詴 題數據的生成,並利用 Appserv[1]來架設伺服器並放置 PHP[2]網頁,最後於網頁上生 成詴題以及使用 Graphviz 生成詴題圖片。

2.1:Answer Set Programming

ASP(Answer Set Programming)[3]是一個用於解決困難搜索問題(通常為 NP-hard 問題)的宣告式邏輯程式設計語言。ASP 使用規則式邏輯敘述來描述問題,具有高效能 的 解 題 能 力 , 而 通 用 的 ASP 求 解 器 則 可 根 據 輸 入 邏 輯 程 式 進 行 非 單 調 邏 輯 (Non-monotonic logic)[4]的推理來產生一或多個解答。這樣的方式有別於傳統程式語言 需要告訴電腦每一步如何執行才能獲得解答。

ASP 具有許多種求解器,例如:DLV[5],Clingo[6],ASPeRiX[7]等等。本研究所 使用的 ASP 求解器是 Clingo,因為 Clingo 在其中有著較高的效能,並且在許多 ASP 比賽中得過獎[8],是一個功能性強的求解器。接下來將介紹 Clingo 的語法。

2.1.1:ASP 基礎

Clingo 邏輯程式的基本建構單元為項(term)。項可分為簡單項(simple term)、函數 (function)、以及項組(tuple)等。簡單項又細分為符號常數(constants)、整數(integers)、 字 串(string)、變數(variables)、"_"(底線)、#sup(最大),以及#inf(最小)等。函數(function) 由符號常數(constants)加上多個項(term)與括號所組成。項組(tuple)與函數相似,差別 在於項組並沒有符號常數。

符號常數為一不變名稱,代表領域中某一特定個體、函數或關係。變數代表的是

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

邏輯變數,意謂該位置可以一致性的代換成所有領域項(domain terms),而所得的新的 規則或事實依然成立。Clingo 自訂了一個大小關係,任意兩個項都可以區分大小,而

#sup 與#inf 被用來代表最大值與最小值。圖 2-1 展示的是 Clingo 當中項的語法結構圖。

圖 2-1:項的語法結構圖

謂詞(predicates) 是指用以代表領域中特定維度關係(relation)的名稱,其詞彙組成 規則與符號常數相同,是以小寫字母開頭的識別字(identifier)。謂詞較特殊的地方在於,

除了名稱以外還必頇指明其維度(arity),因為 Clingo 允許不同維度的領域關係使用相 同名稱。Clingo 使用"名稱/維度"的格式來表達完整的謂詞,例如 father/1 與 father/2 可 分別用來表示使用 father 當作名稱的一元關係與二元關係,此時這兩個謂詞的意義並 不相同。謂詞 p/n 通常不獨立使用而是以 p(t1,t2,…,tn)的原子(atom)形式出現,其中 (t1,t2,…,tn)為 n 個代表領域物件的項所形成的項組,用來表示該項組屬於謂詞 p/n 所代 表的 n 元領域關係。例如:我們可以用 father(john)來表示 john 為一名父親,也能用

father(peter,marry)來表示(peter,marry) 屬於'父親'代表的二元關係。簡言之,peter 是 marry 的父親。

ASP 有著兩種否定,"-"代表傳統邏輯否定(classical negation),而"not"代表的是無 法推論的預設否定(default negation)。例如我們使用-criminal(john)代表 john 沒有犯罪,

而使用 not criminal(john)表示無法推論 john 犯罪。此二敘述並不相同,因為無法推論 john 犯罪並不表示 john 沒有犯罪,只是沒找到證明 john 犯罪的證據。以下另舉一個 例子來說明差異。假設門不是關就是開,因此 door_closed(門是關的)與 -door_open(門 不是開的)同義。也因此由 door_closed 可以推論出-door_open 以及 not door_open(門既 然是關的當然無法推論門是開的)。同理由-door_open 可以推得 door_closed,但是由 not door_closed 卻無法推論出 door-open(因為無法確認門是關的不代表你就能推論說 門是開的)。 (positive)literal),也可能是一個 not atom (稱為負(negative) literal)。

每一條規則的含意是當 Body 內的 literals 皆為真的時候,則 Head 內至少必頇有一 個 Hi(t>=i>=1)為真。如果一條規則的 Head 內只有一個原子 H1,這條規則將被稱為正 規規則(normal rules);如果一條規則的 Head 內具有多於一個的原子,則這條規則將被 稱為析取規則(disjunctive rule);如果一條規則同時滿足正規規則的形式且 Body 內的 literal 皆為正(positive),則這條規則將被稱為正規則(positive rule);如果一條規則的

Body 沒有任何 literal,則這條規則將被稱為事實(fact);最後如果一條規則的 Head 內 沒有任何原子,則這條規則將被稱為限制(constraint)。以下將提供例子來介紹各個項 literal,且具有正規規則的特性,所以被歸類為正規則。行 3 規則的 Body 沒有任何 literal,

所以被歸類為事實。行 4 規則因為 Head 內沒有任何原子,所以被歸類為限制。最後 的行 5 規則與正規規則相似,但是 Head 具有多個原子,所以歸類為析取規則。

2.1.3:Clingo 語句擴增

Clingo 有提供一些寫法可以使得語句更加簡潔。雖然並非一定要使用這些寫法,

以 Clingo 也有寫法可以將相關性高的事實縮寫。Clingo 可以將一連串相鄰的數字以..

寫成僅留頭跟尾的形式,例如:事實 r(1).r(2).r(3).r(4)可以縮寫成 r(1..4)並且不改變其 意義,這寫法稱為 interval。對於原子、函數或項組中有多個選擇性的項當作參數時, (aggregate term) 通常並不獨立出現,而是以如下的聚合原子(aggregate atom) 型式出現:

lower << aggTerm << upper。其中aggTerm 為一聚合函數項而upper與lower為兩數值,代 表聚合函數的上下限,至於<<則可以是常見的六種比較運算,包含 (<, <=, >, >=, =, 以 及 != )。除此外ASP系統,像是Clingo也提供聚合原子的各種精簡寫法,例如可以省略 下限或上限部分的描述,而比較運算若為<=則可省略不寫等。以下詴以三例簡要說明:

1. a(Y) :- b(Y), 2 <= #min{X : p(X,Y), q(X)} < 7.

前述三規則具有相似的結構,差別在最後結尾的形式。#min{term : literals}會在集 合{term : literals}當中找尋最小的 term,這將是一個整數。行 1 規則的 2 <= #min{X : p(X,Y), q(X)} < 7 代表的是#min{X : p(X,Y), q(X)}所得出來的整數 A,必頇滿足條件 7>A>=2。行 2 規則我們將 7 左邊的"<"去掉以後,Clingo 將會視為在此處填了"<=",

我們必頇滿足條件 7>=A>=2。最後行 3 規則連 7 都去掉了,在 Clingo 會視為此處填了

#sup,#sup 代表的為最大值,也就是說 A>=2 但無上限。除 #min 外,Clingo 還提供 的其他聚合函數尚包括: #max (最大值),#count (集合個數) 以及#sum (集合內數字 和)。

2.1.4:Clingo 範例

所有 ASP 系統包含 Clingo 均是採用規則式邏輯語言描述問題。當以 ASP 解題時,

首先需確定問題的表達方式,換言之,決定應使用哪些項與謂詞(predicate)等詞彙來表 達問題。接下來通常採用所謂的 generate-define-test 三步驟產生最後 ASP 程式。在 generate 階段我們利用前階定義的詞彙,書寫較籠統的邏輯規則以產生所有可能的問

8. #show queen/2.

第一行與第二行為建立 row(1)~row(8)和 column(1)~column(8)的事實,表示列與行 的編號為 1 至 8,這邊使用 interval 使程式碼更簡潔。第三行使用了 choice,這句代表 queen(A,B)的(A,B)是使用 row 的 A 以及 column 的 B,並且根據左右的 8,使得產出的 不同 queen(A,B)個數為 8 個。第四行到第七行的語句是條件限制,因為左邊 Head 沒

有內容,所以表示為偽(false),因此滿足此規則的充要條件是 Body 內至少必頇有一個 literal 為偽。第四行/第五行代表的是,任何的 queen 如果有相同的 row/column,則他 們的 column/ row 也將一樣(即為在同一節點,queen 也將為同一個)。這會使得任何一 個 queen,她的同列以及同行將不會有其他的 queen。第六行以及第七行則是會使得任 何一個 queen,她的左右對角皆不會有其他的 queen。

我們使用上方七行來表達八皇后問題的特徵,接下來在第八行填入#show queen/2,

這將展現出所有 queen(A,B)的 atoms,以下為執行範例。

> clingo eightqueen.lp clingo version 5.2.1 Reading from test1.lp Solving...

Answer: 1

queen(1,4) queen(2,7) queen(3,5) queen(4,3) queen(5,1) queen(6,6) queen(7,8) queen(8,2)

SATISFIABLE

上面為利用 Clingo 執行我們所編寫的 ASP 程式碼所產生的結果。因為在此處沒 有要求解答個數,所以預設只產出 1 個結果。我們在八皇后問題程式碼第八行所寫的

#show queen/2 將會使得 Clingo 顯示出解答內所有 queen/2 部分的內容。如果將 queen 的參數填在帶有座標的方格上,得出的結果的確符合八皇后問題。

根據上面的例子可以得知只要將問題描述清楚,Clingo 便可迅速自行產生解答。

這樣的特性十分適合本研究的需求: 我們可以事先分析特定問題演算法的特徵以及希 望呈現的方式,再嘗詴以 ASP 編寫該解題演算法的詴題產生器,最後該產生器的執行 結果(由一群 literals 或 atoms 所組成)即可提供詴題所需之數據。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

但產生出的 atoms 並不適合直接拿來當作題目,所以需要對這些 atoms 進行包裝,

將數據添加文字使其成為題目,或是將數據轉換形式以後,作為輸入參數給予繪圖程 式使用,使其根據數據來產生題目的圖片。接下來將介紹一個本研究所使用的一個繪 圖軟體 Graphviz。

2.2:Graphviz

Graphviz[9]是一個廣受採用的自由軟體,主要功能是用以進行圖形視覺化(Graph Visualization)。所謂圖形視覺化是指將結構化資訊表示為抽象圖形(graph)再將之轉換 為可視的具體圖表。Graphviz 在網絡,生物訊息學,軟體工程,資料庫和網頁設計,

機器學習等領域都廣被使用。Graphviz 使用 DOT 語言來描述圖形的關係。DOT 是一 個簡單且容易使用的文字式圖形描述語言,利用它可以讓使用者輕易的描述所要表達 的圖形,且其內容可以很容易的被人與電腦理解。

本研究的系統後端將以 ASP 詴題產生器產生演算法詴題,其 ASP 原生格式需要 進行進一步轉換以成為 DOT 格式的編碼,接下來即可經由 Graphviz 將其轉換成 jpg,

svg 或 png 格式的圖片以供儲存或下載。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U

圖 2-2:Dijkstra 範例圖

ni ve rs it y

圖 2-2 展示的是一個 DOT 圖檔經由 Graphviz 處理之後所呈現出來的有向圖形 (digraph)以及其中一行的 DOT 程式碼。此圖形提供的是一個帶有邊資訊的有向圖。圖 中的圓圈代表節點(vertex),帶箭頭的有向線段代表有向邊(directed edge),箭頭所指的 是該邊的終結節點(ending vertex),而另端所連接的則是該邊的起始節點(starting vertex)。圓圈內的數字 0-8 分別標示每一節點名稱,邊上的文字為附屬邊資訊。DOT 便是用這種簡單易懂的形式來描述圖形之間的關係,我們可以決定要呈現出那些訊息 並且使得同一組數據產生出的圖形不會產生差異,簡單的改動其中一部分便可使其分 別成為我們的詴題圖片或是解答圖片。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

2.3:題目分析與設計

2.3.1:排序問題的生成分析

測詴學生對於特定排序演算法的了解時,通常是給定一排數字並要求學生使用該 特定排序法進行排列。然而如果該排數字是以隨機方式產生的話,有可能會產生出極 端例子,例如已經或幾乎已經排序完成,導致不適合當作詴題。而本研究將分析不同 排序演算法的計算方式,利用 ASP 編寫程式碼使產生的詴題適合該演算法,不但難易 適中,還能檢驗學生是否了解該演算法的運作關建,使詴題具有鑑別性。

以下將對不同排序演算法,做簡單演算法運作與詴題分析,以了解如何以 ASP 編 寫相關詴題生成程式。

通常製作詴題的時候出題者會要求產出的詴題帶有所欲測詴的特徵,並且內容不

通常製作詴題的時候出題者會要求產出的詴題帶有所欲測詴的特徵,並且內容不

相關文件