第二章 相關研究探討
2.4 課表排課問題相關文獻探討
2.4.4 模糊理論 (Fuzzy Logic Control)
國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
23
2.4.4 模糊理論 (Fuzzy Logic Control)
模糊邏輯控制[32](Fuzzy Logic Control)簡稱模糊控制(Fuzzy Control),
他是 1965 年由美國學者 Zadeh 所創立的一種模糊集合論,於 1973 年時,他又提 出了模糊邏輯控制的定義。而所謂的模糊控制,就是在控制方式上應用模糊語言 變數、模糊邏輯推理和模糊集理論等來模擬人腦的模糊思考及判斷方式。1974 年英國的 E.H.Mamdani 則首度使用模糊控制語句組成模糊控制器,並將它成功地 應用於鍋爐和蒸汽機的控制。
模糊控制器的基本架構如下圖 2.4.3 所示:
圖 2.4.3:模糊控制器基本結構
其中主要包含知識庫、模糊推理、輸入量模糊化、輸出量精準化四部分。
知識庫
知識庫包括模糊控制器參數庫和模糊控制規則庫。並且使用語言變數值如:大、
‧
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
25
第三章 系統架構與實作
3.1 問題描述
校園課表需要考量的限制條件 (constraint) 相當多,在我們的研究中,
我們加入了許多的限制條件。其中包含學校課表一定會需要滿足的硬性限制條件,
以及依照個別老師不同可以增加或減少的軟性限制條件。硬性限制條件我們列出 以下幾項:
1. 同一時段的同一個老師不能出現在兩堂課上 2. 同一時段的同一間教室不能有兩堂課
3. 教室的容納人數能夠符合課堂的要求 4. 教室的設備提供能夠符合課堂的要求 5. 同一堂課的不同節次不能重疊
6. 同一年級的必修課上課時間不能相同 7. 相鄰年級的必修課上課時間不能相同
8. 同一年級的選修課及必修課上課時間不能相同
同一位教師不得在同一個時段內被分配到不同教室上課,我們同樣的也不希 望一堂課被分配到不符合課堂要求資源得教室去。所以每個硬性限制條件在學校
‧
在系統的使用者介面上,我們提供領域專屬語言(Domain Specific Language, DSL)以及圖形使用者介面(Graphic User Interface, GUI)兩種介面給使用者使 用。這兩種輸入方式雖然都可以用來取得排課解,但他們對於問題描述的輸入方
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
27
式並不相同,而使用對象也不相同。DSL 主要是提供給有需要排課解的系統工程 師做為他們系統的後端接合介面,而 GUI 則是提供給一般使用者使用,這部分將 在 3.3 章節進一步說明。使用者於介面 (DSL 或 GUI) 輸入完關於排課的問題描 述之後,限制條件處理器 JaCoP 將開始進行符合限制條件解的搜尋。並且在找尋 解答的過程中,盡可能的選出能滿足多位老師需求的答案。
關於結果顯示部分,我們採用 XSLT 的方式來顯示我們的結果,並給予使用 者四種觀看結果的角度。其中包括,系所一週的所有課程表、課程的排課結果描 述表、個別教師的課程表、個別教室的課程表。此外,在 GUI 的部分,排課描述 可另外存成 XML 檔,我們另外架設了專門用來分析 XML 檔的 BaseX 伺服器資料庫,
透過伺服器,外界就可以查詢我們的排課資料及其相關描述,關於 BaseX 的部分 將在章節 3.3.2.1 做更進一步的解說。圖 3.2.1 即為本研究的基本架構:
圖 3.2.1:系統架構圖
‧
架構之上,這讓使用者在程式的撰寫上能獲得 Java 的完整支援。而且,JavaFX 2.X 也已經完全整合進 Java SE Development Kit 7/8 成為其中的一部分。DSL 的部分則是利用 Groovy 的 Builder 建制語言系統。Groovy 本身可以看 作是 Java 語言的再進化,使用者在撰寫 Groovy 時,可以充分利用 Groovy code 也能夠轉 Java bytecode 的特性,讓 Groovy 跟 Java 作完全的結合。也就因為有 了 Java 的強力支援,因此 Groovy 的「後台」可以說是非常穩固而且強大。除此 之外,Groovy 還提供了強大的後端物件協議 (Metaobject Protocol, MOP) 以 及它內建好的自動建制器 (Builder) 機制,方便使用者撰寫自己的 DSL。MOP 機
為了加快程式的開發速度,我們採用了 Groovy 提供的 BuilderSupport 來開 發我們的領域專屬語言 (Domain Specific Language)。在整個研究的開發過程 當中,我們先利用 JaCoP 結合 Groovy 將整個程式限制條件的部分先建構完畢,
並且簡單的提供一種資料結構的描述方式,但是使用者不需要去了解 Groovy 跟 JaCop 是如何去描述他們的課程安排問題甚至是背後的處理過程。我們提供使用
‧
程式會不斷的運用到 invokeMethod()、methodMissing()和 delegate 的 Groovy 特殊元件。而實際上在提供使用者開發 builder 時,使用者不需要去面對程式開 發過程中 invokeMethod() 和 methodMissing() 的複雜處理,從使用者的角度來 看,反而比較常用到的是 BuilderSupport 這個類別[7],因為在 BuilderSupport 類別裡,Groovy 已經提供了許多方便使用者快速開發 builder 的實體方法。
BuilderSupport 提供了一個簡單而且漂亮的介面來實做這些 node-based construction。當使用到 BuilderSuport 時,使用者將直接利用裡面所定義好的 功能來取代 invokeMethod(),這些實體方法的運作過程也同樣是維持著 MOP 機 制的運作模式。
接下來,我們簡單的介紹這些實體方法的功能:
1. createNode(Object name)
2. createNode(Object name, Object value) 3. createNode(Object name, Map attributes)
4. createNode(Object name, Map attributes, Objects value)
由 BuilderSupport 所呼叫,當程式碰到一個 pretended 實體方法時會去呼 叫對應的 createNode。對應的方式是依照程式所收到的參數內容來決定呼叫哪
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
30
一個 createNode。nodeCompleted(Object parent, Object node) 當一個 node 的子孫被建立時呼叫 setParent(Object parent, Object node) 當 createNode 被呼叫時,程式會呼叫這個部分來建立任何的 parent-child 關係。
當我們的 builder 繼承 BuilderSupport 時,Groovy 會依照不同的程式呼叫 形態找出相對應的 createNode,我們使用以下這個簡單的 builder 範例來對上 述的 builderSupport 功能作簡單的解說。ExBuilder 為一個簡單描述球員資料 的 builder。我們首先將 builder 的內容做簡略的架構,並且在每個 createNode 印出該 createNode 所收到的資料形態內容為何,如下圖 3.3.1 所示:
圖 3.3.1:範例 ExBuilder
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
31
完成了簡單的 builder 架構之後,接下來,我們建立此 ExBuilder 的物件,
並且給予球員的基本資料描述後實際執行程式,如圖 3.3.2。
圖 3.3.2:執行 ExBuilder
執行完程式之後從下圖 3.3.3 的執行結果中可以發現,Groovy 在執行 builder 的過程中會逐一的檢視其程式碼,並且將程式碼按照形態對應的方式去 進行所對應到的 createNode 巢狀結構呼叫。
圖 3.3.3:ExBuilder 結果
透過 Groovy BuilderSupport 的強大功能,使用者也可容易的寫出屬於自己 的領域專屬語言 (DSL)。我們將我們的排課所需資料彙整後,依照資料屬性的不 同,給予我們 DSL 的專屬排課資料描述。
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
32
3.3.1.2 系統的領域專屬語言
本系統的 DSL 主要由五個問題描述區塊所組成,其中包括系統加權值與系所 設定 WeightValue、教師喜好描述 Teachers、教室描述 Rooms、課程描述 Courses 與排課需求設定 ArrangeMode。在每個問題描述區塊中又有關於各部分的屬性描 述,而部分冗長的屬性描述我們將採用英文簡寫的方式,以省去多餘的編程時間。
這部份我們將一一介紹。以下我們將為各問題描述區塊做個別的簡易描述,最後 並附上本系統一個完整的 DSL 描述做為參考。在 DSL 描述中,輸入格式為中括號 者,代表該屬性可填入多項,並使用逗點符號做區隔。非中括號者則只能選定一 項。若中括號內不做任何設定,則該屬性只需輸入中括號即可。當輸入選項為某 指定時間時,該字串由指定時段的週上課日與該天的時段組成。如星期一的 123 時段則表示為字串 1123。所有字串 (含選定日期、教師、教室名稱等) 均使用 雙引號標示,阿拉伯數字則不受此限制。
1. 系統加權值與系所設定 WeightValue
圖 3.3.4:WeightValue
1. DayTimePrefer 課程喜好時段加權增額值設定。
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
33
2. TimeOnlyPrefer 課程喜好時段(僅節次指定)加權增額值設定。
3. DayOnlyPrefer 課程喜好時段(僅日指定)加權增額值設定。
4. TimeHate 課程厭惡時段加權扣除值設定。
5. RoomPrefer 教室喜好加權增額值設定。
6. SlotsCode 該校的校排課時段代號。
7. SlotLock 該系所指定一日不排課時段,需為 SlotsCode 之字元。
8. TimeIntervalLock 日不排課區段。
2. 教師喜好描述 Teachers
圖 3.3.5:Teachers 1. name 教師名稱。
2. Unable Time (UT) 教師無法上課時段。
3. Prefer Time (PT) 喜好時段。
4. Hate Time (HT) 厭惡時段。
5. Prefer Room (PR) 喜好教室。
6. credit 教師個人加權增額值。
3. 教室描述 Rooms
圖 3.3.6:Rooms 1. name 教室名稱。
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
34
2. capacity 教室可容納人數。
3. equip 教室現有設備。
4. NoOpen 教室不開放時間。
4. 課程描述 Courses
圖 3.3.7:Courses
1. name 課程名稱。
2. Slot Number (SN) 節次數。
3. Grade Accept(GA) 授課年級。層級與年級之連續字串,共同上課則以點做 區隔,例如學士班一年級與碩士班一二年級共同上課則表示為:學 1.碩 12 4. Property (PR) 課程屬性。必修課填入必、選修課填入選
5. TEAcher (TEA) 授課教師。
6. Day Assign (DA) 週指定日。指定日為字串輸入,以雙引號表示。
7. Time Assign (TA) 日指定時段。指定時段為字串輸入。
8. CaPacity (CP) 課程學生數。
9. Equipment Need (EN) 課程需要設備。
10.Room Assign (RA) 指定上課教室。
11.Room Not Assign (RNA) 不指定上課教室。
5. 排課需求設定 ArrangeMode
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
35
圖 3.3.8:ArrangeMode
1. second 指定系統搜尋時間。
2. answerNeed 最佳解需求數目。
以上各描述區塊後方皆有一數字括號,該數字括號預設值皆為 0。
6. 本系統完整 DSL 範例
綜和所有上述元件之後,我們得到圖 3.3.9 之完整範例。
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
36
圖 3.3.9:本系統 DSL 完整範例
3.3.2 使用 JavaFX 建制 GUI
JavaFX 是一個構建於 Java 技術上的平台。其目前的版本是 2.2,JavaFX 也 同時向下兼容了較舊的版本。圖 3.3.10 為 JavaFX 的架構圖:
圖 3.3.10:JavaFX 架構
圖 3.3.11:排課系統 GUI 流程
設計 GUI 的過程中,為求排課過程資料的正確性,我們將整個系統使用流程 分成四個步驟:前置設定、資料設定、排課以及結果顯示。流程中,每一個步驟 都含有其必需性,上一步驟未完成則無法進行下一個步驟,例:前置設定未完成 則無法進行資料設定。整個排課設定流程如上圖 3.3.11 所示。系統資料設定完
結果顯示
所有課程結果 個別教室結果 個別教師結果
排課
儲存所有資料 開始排課
資料設定
排課模式 教師喜好 教室狀況 課程資訊
前置設定
教師名稱 教室名稱 課程名稱 教室設備需求 時段代碼序列
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
37
成後,在儲存資料時,希統將把資料自動儲存成兩種檔案類型:YYC 檔以及 XML 檔。其中 YYC 檔為此 GUI 系統的讀取用檔。
3.3.2.1 BaseX 資料庫伺服器
在 GUI 模式中,我們的資料存檔其中之一採用 XML 格式,其中包含了許多關 於科系排課時的相關資訊,譬如:教師資料、教室資料以及課程資料等等。考量 到此等資料的可用性以及延展性,我們搭配了 BaseX 來使我們的存取檔可以和外 界有更多的互動性。
圖 3.3.12:BaseX 與系統關係
BaseX 是 2005 年由康斯坦茨大學首先開始研發,然後進而延展成一個採用 XPath/XQuery 技術的多功能性資料庫。透過 BaseX Client/Server 技術,我們
BaseX 是 2005 年由康斯坦茨大學首先開始研發,然後進而延展成一個採用 XPath/XQuery 技術的多功能性資料庫。透過 BaseX Client/Server 技術,我們