• 沒有找到結果。

應用於大學科系的一套課程排課優化系統 - 政大學術集成

N/A
N/A
Protected

Academic year: 2021

Share "應用於大學科系的一套課程排課優化系統 - 政大學術集成"

Copied!
75
0
0

加載中.... (立即查看全文)

全文

(1)國立政治大學資訊科學系 Department of Computer Science National ChengChi University. 碩士論文 Master’s Thesis. 立. 政 治 大. ‧ 國. 學. 應用於大學科系的一套課程排課優化系統. sit. io. n. al. er. Nat. Courses of University. y. ‧. An Optimizable Timetabling System for the Department. Ch. engchi. i n U. v. 研究生:鄭俞佑 指導教授:陳正佳博士. 中華民國一○三年六月 June 2014.

(2) 應用於大學科系的一套課程排課優化系統 An Optimizable Timetabling System for the Department Courses of University. 研 究 生:鄭俞佑. Student:Yu-You Cheng. 指導教授:陳正佳. Advisor:Cheng-Chia Chen. 國立政治大學. 學. ‧ 國. 立. 政 治 大 資訊科學系. ‧. 碩士論文. io. sit. y. Nat. n. er. A Thesis v Science Submitted atol Department of Computer i n C NationalhChengChi i U e n g c hUniversity in partial fulfillment of the Requirements for the degree of Master In Computer Science. 中華民國一○三年六月 June 2014.

(3) 大學課程排課優化之輔助系統. 摘要. 本研究目的,在於提供使用者一個前後端完整的大學課程排課系 統。而我們的系統特點除了找出能符合所有條件的排課結果之外,更. 政 治 大. 著重在教師個人喜好的滿足上面。舉凡是教師的課程時間或者是教室. 立. 選擇喜好,都是我們在篩選排課結果的重要依據。. ‧ 國. 學. 除了一般常見的 GUI 使用者介面之外,本系統也同時引進領域專. ‧. 屬語言 (Domain Specific Language, DSL) 的概念,希望替排課系統擴. Nat. io. sit. y. 充其實用性。當使用者輸入完整的排課相關資料之後,我們的系統最. n. al. er. 後將會從眾多的排課可能結果之中,挑出滿足最多教師喜好需求的課 表提供使用者參考。. Ch. engchi. i n U. v. 在最後的結果顯示中,我們將提供給使用者多個不同的檢視角度。例 如各系所的一週課程表、所有課程描述表、各教師的個別課程表,各 教室的個別課程表等。另外,在 GUI 模式中,我們架設 BaseX 的 XML 資料庫伺服器,使用者將他們設定好的課程資料放上伺服器後,外界 就可以透過伺服器讀取關於課程編排的相關訊息。. i.

(4) An Optimizable Timetabling System for the Department Courses of University. Abstract. This study provides a complete front and back end system for university course scheduling. This system can produce scheduling results. 政 治 大. that meet all specified conditions, while also satisfying the preferences of. 立. instructors such as class times or classroom requirements.. ‧ 國. 學. In addition to a commonplace graphical user interface (GUI), this system also introduces Domain Specific Language (DSL) in order to. ‧. increase its practicality. After the user inputs complete course. y. Nat. sit. scheduling-related information, the system identifies the scheduling. n. a. er. io. options that meet the greatest number of instructor preferences and. l displays them for the user.. Ch. i. e. i n U. v. g c h the user with a number of The system will eventually nprovide different views, such as a weekly schedule for all programs, all course descriptions, the course schedules for individual instructors, and the course schedules for individual classrooms. In addition, the GUI mode incorporates a BaseX XML database server onto which users can upload course data, enabling other individuals to obtain information on information related to course scheduling.. ii.

(5) 致謝. 論文終於告了一個段落,一直到口試前都很難相信論文竟然真的 寫完了。還記得當初剛開始寫論文時,常常碰到很多狀況,甚至碰到 論文可能要大改的困境,總感覺碩論結束似乎是這麼的遙遙無期。然 而今天,沒想到也還是完成了。要感謝的人很多,沒有辦法一一列舉,. 政 治 大. 但我要特別感謝我的指導教授,系上的學弟,還有我的家人。. 立. 非常感謝陳正佳老師在我論文期間給予的協助跟指導,沒有您給. ‧ 國. 學. 的方向與建議,我相信這論文是不可能做的出來的。也要感謝我的家. ‧. 人,做論文的期間有很多挫折要面對,感謝有你們的支持,是你們讓. Nat. io. sit. y. 我有更多的動力繼續完成。最後也要感謝實驗室會跟我哈啦聊天的學. n. al. er. 弟們,雖然你們講的話真的滿多都是屁話的,但是有你們,碩論的研 究期間也變的比較有趣。C h e. ngchi. i n U. v. 我終於畢業囉!人生還有很多路要走。Keep Walking.. iii.

(6) 目錄 第一章. 序論......................................................................................................... 1. 1.1 研究動機 .............................................................................................................. 1 1.2 實現方式 .............................................................................................................. 2 1.3 論文貢獻與特色 ................................................................................................... 4 1.4 論文章節架構 ....................................................................................................... 4. 第二章 2.1. 相關研究探討 ......................................................................................... 6. 政 治 大 後端物件協定(MOP) ..................................................................................... 7 立. Groovy.................................................................................................................. 6. 2.1.1. Groovy 物件 .................................................................................................. 8. 2.1.3. Groovy 函式處理 .......................................................................................... 9. 2.1.4. Groovy 自動建制器 .................................................................................... 11. 2.1.5. Groovy 特色介紹 ........................................................................................ 11. ‧. ‧ 國. 學. 2.1.2. y. Nat. er. io. sit. 2.2 限制條件滿足問題( Constraint Satisfaction Problem) ............................... 12 2.2.1. 限制條件滿足問題的處理方法 ................................................................... 13. 2.2.2. 部分式限制條件問題 (Partial CSP) ....................................................... 13. 2.2.3. 階層式限制條件問題 Hierarchical CSP .................................................. 14. n. al. Ch. engchi. i n U. v. 2.3. 校園課表編排 .................................................................................................... 15. 2.4. 課表排課問題相關文獻探討 .............................................................................. 18. 2.4.1. 基因演算法 (Genetic Algorithms) ......................................................... 19. 2.4.2. 禁忌搜尋法 (Taboo Search) .................................................................... 20. 2.4.3. 模擬退火法 (Simulated Annealing) ....................................................... 21. 2.4.4. 模糊理論 (Fuzzy Logic Control) ........................................................... 23. 第三章. 系統架構與實作 .................................................................................... 25. 3.1 問題描述 ............................................................................................................ 25 iv.

(7) 3.2. 系統架構 ............................................................................................................ 26. 3.3. 系統使用者介面 ................................................................................................. 28. 3.3.1. 使用 Groovy 建制器架構領域專屬語言...................................................... 28. 3.3.1.1 3.3.1.2 3.3.2. Groovy 領域專屬語言建制器 .......................................... 29 系統的領域專屬語言 ....................................................... 32. 使用 JavaFX 建制 GUI ................................................................................. 36. 3.3.2.1 3.3.2.2 3.3.2.3 3.3.2.4 3.3.2.5 3.3.2.6 3.3.2.7 3.3.2.8. 使用 JaCoP 進行限制條件處理 .......................................................................... 48. ‧ 國. 第四章. 立. 政 治 大. 學. 3.4. BaseX 資料庫伺服器..................................................... 37 前置設定頁面 ............................................................... 39 共同教師頁面 ............................................................... 40 儲存排課模式頁面 ....................................................... 41 儲存教師資料頁面 ....................................................... 43 儲存教室資料頁面 ....................................................... 44 儲存課程資料頁面 ...................................................... 45 開始排課頁面 .............................................................. 47. 使用範例 ............................................................................................... 49. ‧. 政大資科系範例 ................................................................................................. 49. 4.2. CCT 範例 ............................................................................................................. 52. y. sit. al. 結論 ................................................................................................................... 56. v i n Ch 研究建議 ............................................................................................................ 57 engchi U n. 5.2. io. 5.1. 結論與研究建議 .................................................................................... 56. er. 第五章. Nat. 4.1. 參考文獻 .............................................................................................................. 58 附錄 ...................................................................................................................... 62. v.

(8) 圖目錄 圖 2.1.1:GroovyObject 介面 ............................................................................ 8 圖 2.1.2:Groovy 處理 POGOs 流程 ................................................................... 10 圖 2.4.1:基因演算法基本運作流程 ................................................................ 19 圖 2.4.2:模擬退火法流程 ............................................................................... 22 圖 2.4.3:模糊控制器基本結構 ....................................................................... 23 圖 3.2.1:系統架構圖 ...................................................................................... 27 圖 3.3.1:範例 ExBuilder ................................................................................ 30 圖 3.3.2:執行 ExBuilder ................................................................................ 31. 政 治 大. 圖 3.3.3:ExBuilder 結果 ................................................................................ 31. 立. 圖 3.3.4:WeightValue..................................................................................... 32. ‧ 國. 學. 圖 3.3.5:Teachers .......................................................................................... 33 圖 3.3.6:Rooms ................................................................................................ 33. ‧. 圖 3.3.7:Courses ............................................................................................ 34 圖 3.3.8:ArrangeMode..................................................................................... 35. sit. y. Nat. 圖 3.3.9:本系統 DSL 完整範例 ....................................................................... 36 圖 3.3.10:JavaFX 架構 .................................................................................... 36. io. n. al. er. 圖 3.3.11:排課系統 GUI 流程 ......................................................................... 36. i n U. v. 圖 3.3.12:BaseX 與系統關係 .......................................................................... 37. Ch. engchi. 圖 3.3.14:資料上傳至 BaseX .......................................................................... 38 圖 3.3.14:BaseX 查詢資料結果顯示 ............................................................... 39 圖 3.3.15:排課系統前置頁面 ......................................................................... 39 圖 3.3.16:排課系統未開放頁面 ..................................................................... 40 圖 3.3.17:排課系統新增共同教師頁面 .......................................................... 40 圖 3.3.18:排課系統模式設定頁面 .................................................................. 43 圖 3.3.19:排課系統教師資料頁面 .................................................................. 44 圖 3.3.20:排課系統教室資料頁面 .................................................................. 45 圖 3.3.21:排課系統課程資料頁面 .................................................................. 47 圖 3.3.22:排課系統開始排課頁面 .................................................................. 47 圖 4.1:總排課結果週顯示 ............................................................................... 50 圖 4.2:總排課結果個別課程顯示.................................................................... 50 vi.

(9) 圖 4.3:個別教師排課結果顯示 ....................................................................... 51 圖 4.4:個別教室排課結果顯示 ....................................................................... 52 圖 4.5:EA08 排課結果範例 .............................................................................. 55. 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. vii. i n U. v.

(10) 表目錄. 表 2.3.1:高中與大學課表比較 ...................................... 17. 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. viii. i n U. v.

(11) 第一章 序論. 立. 1.1 研究動機. 政 治 大. ‧ 國. 學. 校園課表編排的問題在學術界一直都是受到廣泛討論的議題[24]。在國內外 也一直不斷有學者提出新的演算法,企圖為課表編排找出更好的解答。然而,課. ‧. 表編排本身必須考量非常多的限制因素,以學校的課表來說,最基本的包含課程. y. Nat. sit. 的衝突時間,如相同教師的不同課程,以及相同教室的不同課程等等。除此之外,. n. al. er. io. 還要考量到課程以及課程屬性的問題,例如:必修、選修是否衝堂以及教師的個. i n U. v. 人時間喜好等因素都必須考量在內。因此一旦課程的數量龐大,而能提供課程編. Ch. engchi. 排的資源,如教室、時間資源偏少的情況時,要如何找到一個令大家都滿意的解 答即顯得非常困難。 課表編排的解決辦法在學界有不少研究及演算法提出,例如模擬退火法 (Simulated Annealing)[34]、禁忌搜尋法 (Taboo Search)[33]、基因演算法 (Genetic Algorithms)[14]。這些演算法都試圖在校園課程課表編排的全自動化 排程中,找到一個更能為大家所滿意的解答[15][16][17]。 在現有的學校制度中,小學、國中、以及高中的課表通常是較為固定的。每 班學生幾乎都集中在同一教室上課。而教師則按照特定的時間到此教室授課。然 而在大學的排課領域中,由於學生的一週課程較不緊湊,而且學生通常可以由眾 1.

(12) 多選修課程中,找到滿足個人以及學校之要求的課程選擇。因此學生對於課表的 安排結果較不受影響,而來自學生的排課限制條件,也因而相對較少。然而,對 授課的老師而言,他們對於大學的課表就有較多的期許與要求。例如,A 老師有 其喜歡的上課時間或上課教室,而 B 老師也有其個人的上課時間或上課教室要求。 一旦課程數量眾多,在有限的教室與時段資源下,這些要求之間的衝突性將會大 幅提高,而不易找到一個滿足所有要求的課表。我們的系統即是基於此種發現, 在考量到課表編排的複雜性以及教師的個人需求之下,希望能由現有的可行課表 中,找出更能滿足大多教師需求的結果。. 立. 1.2 實現方式. 政 治 大. ‧ 國. 學. 在本系統的研究開發過程當中,除了找出能盡量滿足所有教師需求的課表之 外,我們也希望我們的系統能具有一定的擴充性,因此,在本研究後續的介紹過. ‧. 程當中,除了一般較常見的 GUI 介面之外,我們亦引進了領域專屬語言(Domain. y. Nat. sit. Specific Language, DSL[23]) 的概念。透過領域專屬語言對於排課的描述,使. n. al. er. io. 用者可以將我們使用的 JaCoP 解答搜尋組件與他們的系統做連結,這部分將在第 三章做更進一部分的說明。. Ch. engchi. i n U. v. 領域專屬語言的設計上,我們採用的是內嵌式(Internal) DSL[23],其特性 是在既有宿主語言(host language)上,建構領域專屬語言。換言之,建構的 DSL 基本上是利用宿主語言的語法與語意特性,所建造的特殊表達結構,原則上還是 屬於原本宿主語言的一部分。內嵌式 DSL 可看成是介於獨立式(External) DSL[23] 與應用程式介面(API)的中間產品。 在宿主語言的選擇上,我們採用了 Groovy。Groovy[22]是一種架構於 Java 平台上的程式語言,其特別之處是同時也匯聚了許多 Ruby、Python 等稿本語言 (script language)的功能。由於 Groovy 是架構在 Java 平台之上,且 Groovy 程 式一樣是被編譯為 Java 物件碼(bytecode)執行,因此可以和 Java 程式互相呼 2.

(13) 叫。然而與 Java 不同的是,Groovy 具有比 Java 更精簡易用的語法,以及許多 Java 欠缺的稿本語言以及函式語言功能,例如 Groovy 同時具有能將函式 (function) 變成類別物件 (first class object) 的閉包 (closure) 機制,以 及能夠動態的改變物件的行為的 Meta-Object Protocol(MOP)機制。上述 Groovy 特殊功能如再配上 Java 本身龐大的 API 程式庫,將使得開發者在撰寫程式時更 為快速、簡潔。除此之外,在宿主語言的支援上,Groovy 本身提供的 Builder 系統能夠幫助使用者快速開發出具有特定用途的專屬領域語言。 在學理上,大學課表編排的問題是屬於限制條件滿足問題(Constraint. 治 政 大 條件,例如:教室人數限制、教授個人喜好時間等等。針對排課領域問題的考量, 立. Satisfaction Problem, CSP)。當我們在處理這方面的問題時需要考量許多限制. 在處理限制條件的問題時,我們希望能從現有工具[29]中,找到一個能完整描述. ‧ 國. 學. 問題,並且能搜尋出結果的工具。經過幾次的測試之後,我們選擇了 Krzysztof. ‧. Kuchcinski 和 Radoslaw Szymanek 所研發出來的 JaCoP[3]做為本系統解決限制. y. Nat. 條件 (Constraint programming)問題的開發與執行工具。JaCoP 具有完善的 API. 處理的過程當中,JaCoP 提供我們相當大的幫助。. al. er. io. sit. 能有效的描述我們所面對的問題,並且在結果搜尋速度上有很好的效率,在系統. n. v i n 總結來說,有鑑於學校課表編排問題本身的複雜性,我們希望使用 JaCoP 所 Ch engchi U. 提供的豐富程式庫與解題能力來完成本研究的限制條件排程建構部分,然後再利. 用 Groovy 本身提供的建制器 (Builder) [2]建制本研究的專屬領域語言,最後 再從眾多的結果中提供使用者一個更佳的課程編排方式解答。除此之外,我們也 透過 JavaFX[25]的強大函式庫來提供使用者 GUI 介面。我們的排課目標著重在 大學教師對於排課的時間與教室喜好的滿足上。我們蒐集教師的喜好資料,透過 比對機制,以及提供使用者更改條件設定的可能,協助使用者可以在眾多滿足條 件的課表中找出比現有課表更好的解答。. 3.

(14) 1.3 論文貢獻與特色 我們希望藉此論文介紹自行研製的一套大學校園排課資訊系統。相較於其他 同類系統,除了必須產生一個符合所有硬性限制條件的課表,我們更把我們的研 究目標著重在於排課的結果優劣上。我們參考許多老師的意見,蒐集老師們對上 課時間跟教室地點的喜好,希望在我們的系統結果中能從所有老師的喜好之中找 出最好的幾個結果。我們的研究提供以下的幾點貢獻與特色: 1. 擴充性:透過領域專屬語言(DSL),我們希望我們的研究也能夠突破以往既. 政 治 大 2. 更好的結果:在這麼多可行的排課結果當中,我們參考教師們的喜好,希望 立 有的 UI 介面也能夠與其他的系統相結合,增加系統的實用性。. ‧ 國. 學. 能提供一個更好的排課結果提供教師參考。. 3. 調適性:在系統中,使用者隨時可以依照學校情況,給予資料上的調整與限. ‧. 定。例如,希望知道資深教師時間固定後,新進教師加入排課的結果優劣情. sit. y. Nat. 形。. al. n. 給予每位老師以及每間教室個別的獨立課表。. Ch. engchi. er. io. 4. 可看性:排課的結果篩選完成之後,除了一般的正常課表之外,我們也同時. i n U. v. 1.4 論文章節架構 在第二章的相關研究探討中,我們將會對 Groovy 語言的特色做更進一步的 探討,了解 Groovy 是如何使用後端物件協定 (Meta-Object Protocol, MOP)來 實作他們的程式架構。除此之外,有鑒於大學排課系統是限制條件滿足問題 (Constraint Satisfaction Problem, CSP) 我們也會對 CSP 做簡單介紹。而目 前現有的相關文獻討中也有學者對於此類問題提供搜尋演算法如:基因演算法、 禁忌搜尋法、模擬退火法以及模糊理論等。這部份我們也將一一做簡單介紹。 在第三章的系統架構與實作,裡面我們先將我們的大學排課問題做一個簡單 4.

(15) 的描述,並引出我們的系統整體架構。最重要的是,我們也將介紹本系統的兩大 使用者輸入介面:領域專屬語言(Domain Specific Language, DSL)以及 GUI 的 建制方式與使用說明。DSL 的部分,我們將談到 Groovy 是如何協助開發者撰寫 他們的 DSL。最後我們也談到我們如何利用條件限制處理器 ( Constraint Programming Solver ) JaCoP 來描述我們的問題,並將程式碼收錄在附錄之中。 第四章的部分,將直接進行實作範例。我們使用政大資科系與政大企管系做 為我們的測試範例,並將政大資科系該學期含學士班、碩士班以及博士班的排課 總結果收錄其中,並提供教室與教師的個別課程檢視模式。同時,我們也使用國. 政 治 大. 際競賽 Curriculum-Based Course TimeTabling (CTT) 的例子進行系統測試並 將其排課結果收錄其中。. 立. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. 5. i n U. v.

(16) 第二章 相關研究探討 政 治. 大. 立. ‧ 國. 學. 本研究的目的是希望在現有的限制條件中找出更能符合所有教師需求的課. ‧. 表。我們建置 GUI 提供使用者一個能快速上手的排課工具,在此同時也利用. sit. y. Nat. Groovy 快速開發 Domain Specific Language (DSL) 的特性來建立學校課程安排. al. er. io. 系統的專屬領域語言。而中間的系統搜尋解部分則是採用限制條件語言 JaCoP 來. v. n. 找出我們所需的課表。課表編排屬於限制條件問題(Constraint satisfaction. Ch. engchi. i n U. problem) 在接下來的討論中我們將會介紹用來建制 DSL 很重要的宿主語言 Groovy 特性、CSP 的相關概念以及我們所處理的校園排課問題整理。同時,我們 也將介紹現有關於排課問題的相關文獻探討。. 2.1. Groovy. Groovy 根植於 Java,而 Java 語言的特性在於他著重在 Strong Type 的撰寫 語法,使用此語法的好處是它在編譯時期易於排除錯誤,而執行時期則具有比較 優質的速度,但缺點是在撰寫程式時需要繁瑣冗長的輸入。以目前講求效率的市 場環境來說,程式撰寫上的繁瑣顯然不符實際要求。雖然說 JDK 本身仍有不斷的 6.

(17) 演進,但是 Java 語言總是給人少了點快速便捷的感覺。 Groovy 的誕生解決了 Java 這方面的問題,我們也可以說 Groovy 其實有點 類似 Java 和 Scripting 的結合[4]。2004 年 Groovy 誕生之後常被拿來和 Ruby 以及 Python 等其他 scripting language 來做比較,Groovy 本身嘗試擷取其他 直譯式語言的部分優點,並且將其程式碼編譯成 Java bytecode 來提升其執行效 能,再加上 JDK 本身長久以來的改進加持之下,使得 Groovy 本身能提供開發人 員撰寫程式上的極大的方便性跟操作空間。 Groovy 具有許多特性並且提供了許多內建工具,例如 Closure、GDK、Grails、. 治 政 大 Meta-object Protocol(MOP)和 Groovy builder 來做介紹。 立. XML Builder、Swing Builder 等等。在此我們僅挑出與本研究相關的二點特性:. ‧ 國. 學. 2.1.1 後端物件協定(MOP). ‧. 後端物件協定(Meta-Object Protocol)[26]是 Groovy 能夠快速開發程式的. sit. y. Nat. 主要原因。在 Java 平台撰寫 java 程式時,雖然我們可以利用信息傳遞(message. al. er. io. passing)的方式,將信息送至不同接收者(receiver),以完成程式或服務叫喚。. v. n. 但這協定及其傳統 OOP 的編譯與執行時期實作都過於死板,以至於程式師希望具. Ch. engchi. i n U. 有的效果,往往必須經由其他迂迴冗長的程式設計方能達成。而 Groovy 提供了 MOP 機制來實作後端程式設計(metaprogramming)[27]以方便我們完成想要的程 式。 後端程式設計的原意是指設計巨集(macro)或後端程式(metaprogram),其執 行或開展產生的並非最後結果,而是有待執行的其他程式。而使用 MOP 的 Groovy 的後端程式設計是指程式執行的過程當中,我們能夠依據程式或使用者的要求動 態更改類別(Class)或物件的成員組成,例如新增成員變數,或新增成員方法, 這大大擴充了類別與物件的使用彈性。而 Groovy 的 Builder 開發也就是建立在 MOP 的機制上來完成。 7.

(18) 在談到 Groovy MOP 機制是如何處理程式的過程,我們不得不介紹 Groovy 物 件的特殊性[5],並且說明 Groovy 是如何處理 method 呼叫。. 2.1.2 Groovy 物件 雖然均屬 OOP 物件,Groovy 物件跟 Java 物件卻有相當程度差異。相較 Java 物件,Groovy 物件具有更大的使用彈性與便利,其緣由在於 Groovy 物件對於 method 呼叫的處理方式,與 Java 物件有很大的不同。 在 Groovy 的程式裡,我們可以運用到三種不同類型的物件,他們分別是 POJOs (Plain Old Java Objects)、POGOs (Plain Old Groovy Objects)跟 Groovy. 政 治 大 的原生 Java 物件;POGOs 立則是指利用 Groovy 所寫的一般類別物件,它們繼承. Interceptors。POJOs 是指利用 Java 或其他非 Groovy 語言創建,可在 JVM 執行. ‧ 國. 學. java.lang.Object 但是實作 groovy.lang.GroovyObject 介面,至於 Groovy Interceptors 則是指實作 GroovyInterceptable 介面的 Groovy 物件。. ‧. Groovy 在 GroovyObject 介面裡定義了幾個重要的 method,確實內容如圖. n. al. er. io. sit. y. Nat. 2.1.1 所示:. Ch. engchi. i n U. v. 圖 2.1.1:GroovyObject 介面. 介面中的 invokeMethod()、getProperty()和 setProperty()可以方便我們 隨時動態的呼叫物件的實體方法和屬性。除此之外,在 JVM 上我們不能夠隨意的 去更改已經被讀進 JVM 的 metaobject 類別,但由於 MetaCalss 定義了其他 Class 的實作與 instances。所以我們可以透過 setMetaClass()的方式來進行程式上的 8.

(19) 變更。. 2.1.3 Groovy 函式處理 Groovy 允許我們對 POJOs、POGOs 來進行後端程式設計 (metaprogramming)。 對於 POJOs 而言,Groovy 事先會由 MetaClassRegistry 讀取登錄的 MetaClass, 在 MetaClass 裡面所定義的任何介面和實體方法都會比原本 POJO 本身的實體方 法具有更高的處理順位。 然而如果處理的是 POGOs,則所要進行的步驟就較為複雜。首先 Groovy 會. 治 政 的 invokeMethod() 而 完 成大 函式呼叫處理。有了這種 立. 先確定該 POGO 物件是否實作 GroovyInterceptable?如果確有實做,則 Groovy 將 逕 行 呼 叫 該 POGO. interceptor 機制,程式師就可以利用實做 invokeMethod(),而達成截收並處理. ‧ 國. 學. 呼叫者傳送給 POGO 物件的呼叫信息。利用 interceptor 機制,程式師將可輕易. ‧. 改變信息發送者所能得到的接受者的服務 內容。然而如果 POGO 並未實作. y. Nat. GroovyInterceptable,則 Groovy 就會至 POGO 的 MetaClass 裡面找尋匹配的實. er. io. sit. 體方法予以執行,如果沒有匹配的方法,才會由 POGO 自己的實體方法中找尋。 如果連 POGO 裡面都找不到匹配的實體方法,則 Groovy 會試著去找找看是否有一. al. n. v i n 個屬性是用這個實體方法的名字,假如使用這個實體方法名字的是 closure,那 Ch engchi U 麼 Groovy 會直接呼叫這個 closure。如果連最後有同樣名字的 closure 都沒有. 找到,那麼 Groovy 會去試著做兩件事,首先先試著呼叫看看 POGO 裡面是否有 methodMissing(),如果有,就執行,如果沒有,則呼叫 invokeMethod(),否則 最後就丟出 MissingMethodException()代表這次的方法呼叫失敗。整個過程的 流程之簡單圖式如下圖 2.1.2 所示。. 9.

(20) 政 治 大. 立. ‧. ‧ 國. 學 er. io. sit. y. Nat. al. v. n. 圖 2.1.2:Groovy 處理 POGOs 流程. Ch. engchi. i n U. 有了以上的 Groovy MOP 處理機制之後,使用者在處理 Groovy 的物件上會更 具有彈性以及方便,在《Groovy in Action》一書中,作者 Dierk Konig 也認為 MOP 提供了使用者幾個方便性: 1. 程式可以隨時插斷實體方法來進行 cross-cutting concerns,比方說安全檢 查、交易等等的系統層面服務。 2. 物件可以用來呼叫其他的物件實體方法。 3. 物件可以假裝執行那些不屬於自己卻好像自己就有的實體方法。. 10.

(21) 2.1.4 Groovy 自動建制器 Groovy 本 身 已 經 內 建 許 多 可 以 方 便 程 式 設 計 者 使 用 的 自 動 建 制 器 (builder),其中包括 XMLbuilder、SwingBuilder、AntBuilder 等等。使用者只 要依循著 Groovy 原先就定義好的 builder 描述方式撰寫,即能輕鬆產製程式碼, 使其在 runtime 產生所需之特殊應用領域物件。除此之外,Groovy 也利用其撰 寫程式上的方便以及快速性來提供使用者建立屬於自己的 builder。而我們就是 利用 Groovy 提供的這項優點來進行本研究所需之校園課表編排描述語言之開發。 接下來,我們將分別探討 Groovy builder 能夠利用哪些 Groovy 機制來提供我們. 政 治 大. 撰寫個人 builder 上的便利性。最後並淺談完成 Groovy builder 的一個很重要. 立. 學. ‧ 國. 的元件:BuilderSupport。. 2.1.5 Groovy 特色介紹. ‧. 當使用 Groovy 做為程式的開發工具時[6],使用者不需要去了解 Groovy 的. sit. y. Nat. MOP 或者是 builder 機制是如何運行的,我們只需要知道如何利用這些 Groovy. al. er. io. 特點來撰寫這些 builder 程式碼,以及讓它們符合正確的語法就可以加速我的程. n. 式開發過程,其中這些使用 Groovy 開發的特點包括:. Ch. engchi. i n U. v. 1. Closure method 呼叫:Groovy 利用 closure 的特性來完成其獨特的巢狀結構, 在 builder 處理的過程當中,我們甚至不用傳遞任何的參數。 2. Closure method 解決方法:當一個不存在某 closure 裡的實體方法被呼叫時, Groovy 會使用一種特殊的解決方式來處理這個不存在的實體方法呼叫,它會 決定哪一個物件應該要去呼應這個實體方法呼叫。 3. Pretended method:前面所討論到的 Groovy MOP 機制讓 Groovy 可以呼叫那 些甚至不存在類別裡的實體方法,其實也就是「假裝」這些實體方法好像存 在。. 11.

(22) 4. Named parameters:當我們傳遞一個 map 參數到一個實體方法,Groovy 可以 將這個參數跟其他的實體方法參數一併傳出,這讓程式感覺就好像傳出了一 個 named parameter list。 5. Closure delegate:改變一個 closure 的 delegate 可以讓其他的類別來處理 他們的實體方法呼叫,當我們重新指定 delegate 到一個 builder 類別,這能 讓該 builder 能夠重新編排這些實體方法的處理方式。. 2.2 限 制 條 件 滿 足 問 題 ( Constraint Satisfaction Problem). 立. 政 治 大. 所謂的限制條件滿足問題(CSP)就是指一組變數其值必須符合某些特定限制. ‧ 國. 學. 條件。而 CSP 問題的求解就是指由這些變數的可能值的組合中,找尋滿足所有限 制條件的實例。校園課程排課問題本身也是一種 CSP,課程安排的本身有許多種. ‧. 的可能,但卻受限於一些限制,當給予這看似無盡的問題一些限制時,可能的編. y. Nat. sit. 排方式範圍就會逐漸縮小。. n. al. er. io. 比較正式的定義[8]是把 CSP 定義為由三個項目<X, D, C>所組成,其中 X 代. i n U. v. 表的是一組變數{x1,x2,…,xm},D 代表的是每個變數 xi 的可能值域範圍,而 C 則. Ch. engchi. 是一組限制條件{c1,c2,…,ck}。每一個屬於 C 的限制條件 cj 又可以被描述為<t, R>,其中 t=(xt1,xt2,…,xtn)(1  t1,t2,…,tn  m) 是由 X 中選出的 n 元變數向 量而 R 則是集合 D 上的一個 n 維關係。任意由 X 到 D 的函數 v:X→D 都是此 CSP 的可能解。而當 v 滿足 C 中的所有限制條件<t, R>=<(xt1, …, xtn), R>,換言之, 當<(xt1, …, xtn), R> ∈ C 蘊含(v(xt1), …, v(xtn)) ∈R 時,我們就說 v 是此 CSP 的一個解答。 CSP 是現在數學領域上常見的問題,其中比較常見的 CSP 包含八皇后問題 (Eight queens puzzle), 地圖著色問題(Map coloring problem), 以及大家耳 熟能詳的數讀(Sudoku)問題等等。在本研究中,我們的限制條件則來自於課程的 12.

(23) 時間及教室安排限制,而這部份我們則是利用 JaCoP 來進行處理。. 2.2.1 限制條件滿足問題的處理方法 實際上處理限制條件滿足問題(CSP) 時,常常會遇到很多的困難。這些限制 條件當中往往彼此互相牽制,使得問題本身的複雜度以及不確定性更高,一旦限 制條件的規範過多,甚至可能會出現無法求解 (Over-Constrained) 的情況發生。 在這種情況下,解決方式往往必須要直接拿掉那些造成問題無解的限制條件,來 促使解答的產生。然而,並非所有相衝突的限制條件都必須以剔除的方式處理,. 政 治 大 盡可能得找出最佳解。因此,目前對於限制條件問題的處理,開始傾向於將限制 立 倘若能使限制條件彼此之間進行有效的調整,往往可以在無解的限制條件問題中. ‧ 國. 學. 條件分為硬性限制條件以及軟性限制條件兩種,在求解的過程當中,不只硬性的 限制條件要被滿足,當問題可能產生無解而需要退而求其次重新調整限制條件時,. ‧. 原本的軟性限制條件也應該要盡可能的被滿足。. sit. y. Nat. 目前傳統的 CSP 處理難以對於軟性限制條件做規劃與彈性的處理,因此漸漸. al. er. io. 的開始出現延伸 CSP 問題的處理與規劃方式,使得軟性限制條件的部分能夠利用. v. n. 機率、程度的方式來滿足其部分需求。常見的解決方式例如 Hierarchical. Ch. engchi. i n U. CSP[19]、Partial CSP[20]等,以下我們針對 Partial CSP 及 Hierarchical CSP 來作進一步探討。. 2.2.2 部分式限制條件問題 (Partial CSP) Partial CSP[20]是在變數子集合滿足部分的限制條件集合情況下,於值域 中再去尋求適合的變數值。學者 Tseng 將 Partial CSP 正式定義為:一個 Partial CSP 是由四個部分所組成 (Z, D, C, g),其中(Z, D, C)是一個基本 CSP 問題的 結構,而 g 則是依據問題所訂立的目標函數。 Partial CSP 的目的是將這些放鬆過限制條件的問題解答中找出一個與原定 13.

(24) 解最接近的答案。為了要顧慮到放鬆限制的解與未放鬆限制解之間的差距,學者 Bartak 將問題定義的 g 函數視為差距函數,其中得出最小差距函數者,即為最 佳解。 Partial CSP 主要利用以下四個方式來放鬆問題的限制條件[35]: 1. 增加變數的值域範圍 2. 增加限制條件的彈性 3. 移除問題中的一個變數 4. 移除問題中的一個條件. 治 政 大 Freuder 和 Wallace 認為 Partial CSP 可以用於以下的問題情況[20]: 立 2. 當問題過於複雜,而意圖只尋求滿意解時. 學. ‧ 國. 1. 當問題條件過度限制(over-constrained)但是可以違反部分條件的狀況. er. io. sit. y. Nat. 4. 當問題的求解具有時間限制的情況時. ‧. 3. 在滿足基本限制條件情況下,放鬆其他的部分限制條件以取得最佳解時. n. 2.2.3 階層式限制條件問題 Hierarchical a v CSP. i l C n hengchi U Borning[19]提出了限制條件階層化的概念,也就是說對於不同的限制條件. 給予不同的階層。在 Hierarchical CSP 的求解過程當中,在滿足所有必要的硬 性條件之後,會依照軟性條件的階層不同,由最重要的限制條件優先進行處理, 然後再處理重要性較低的限制條件。因此,不同重要性的限制條件在處理的過程 當中會分配在不同的階層。而當階層的順序產生改變時,也會因為限制條件的順 序不同而結果產生改變。 在標誌階層限制時,可以給予不同的階層他們一個唯一的名稱,比方說: 「Required」 、 「Strong」 、 「Weak」等等。在有限的階層 H 中,H0 擺放必須要完成 的硬性限制條件,其次則是將軟性限制條件按照不同的強度需要放置到階層 Hk 14.

(25) 中,而 k 的值越大表示該階層的重要性越低,直到階層 Hn。其中階層 Hk 不能為空 集合,也就是每一層都至少必須存在一個限制條件。 Borning 將 Hierarchical CSP 的求解過程定義如下[19]:. If cθ= true, cθholds; S0 = {θ| ∀c ∈ H0 cθ holds}, S = {θ|θ∈ S0 & ∀σ∈ S0 ¬better(σ, θ, H)} 其中 c 為限制條件. 治 政 大 為能滿足所有硬性限制條件 H 的解 立. θ為使每個變數對應到變數值的函數 S0. 0. S 為所有可能解的集合. ‧ 國. 學. better 表示解的比較. ‧. y. Nat. 至於要如何在所有可行解當中找出較佳的解,Hierarchical CSP 採用比較. er. io. sit. 的機制來進行最優解的評估,其中包括 Global、Local 以及 Regional Comparator 的比較機制。這些比較機制主要藉助誤差函數的使用,來評估變數與變數值之間. al. n. v i n 的結合違反該層限制多寡,取得的值為非負的實數,值越小表示越符合限制條 Ch engchi U 件。. 2.3 校園課表編排 在維基百科[1]裡給校園(school)課表下的定義為校園課表是一個包含學生、 老師、教室、時間的表格。簡單來說,就是一套描述學校課程編排的表格。課表 考量的因素有很多,最主要是要考量到老師跟教室的限制,不同的老師有不同的 需求,而教室也有其所能提供的資源上的限制。由於校園課表編排具有多重組合 的特性,因此它是屬於一種 NP-Complete 的問題。而 Schaerf[9]將此類的課表 15.

(26) 編排問題主要分成三類: 1. 高中課表編排: 高中課表安排,主要的議題是避免老師在同一時間需要去兩堂教室上課,或 者是同一間教室有兩個老師來上不同的課。 2. 大學課表編排: 大學課表安排,主要議題是盡量減少有共同學生的課程之間的衝突性。 3. 大學考試課表編排: 大學課程考試時的安排,避免同一時段的考試時間有學生需要到兩個地方去. 政 治 大. 參加考試。並且盡量在考試時間跟教室資源的安排規劃上做最大最佳的調 配。. 立. ‧ 國. 學. 高中跟大學的課表安排方式是有所不同的,在台灣,上課期間的高中生每一. ‧. 個小時幾乎都會被排定課程,而教室也比較固定,但是到了大學之後,學校的風. y. Nat. 氣跟高中不同,學生能夠自行選擇自己的課,老師也不像高中的老師那樣忙碌於. er. io. sit. 各教室之間,教授比較能夠選擇自己想要的上課時間,而大學的教室又比高中來 的多上許多,因此普遍來說,大學跟高中的教室課程安排考量點上是有所不同的,. al. n. v i n 大學的課表比較要注意的是老師個人的喜好議題,而高中的課表則比較著重在如 Ch engchi U 何讓課程與教室的安排更為有效密集。. 以我們的研究為例,在資料整理的過程當中,各系所的需求跟資源不同,有 的系所擁有較多的可安排授課教室,有的則較少。因此,在課程的編排上擁有較 多教室資源的系所就可以將系上教師的喜好專注在排課時間的選擇上。相反的, 擁有資源較為有限的系所,在取得一個能滿足教師需求的課表就顯得較為不容易。 高中的課表則因為教室以及上課時間的固定則比較沒有這方面的需求限制。為此, Carter 和 Laporte[10]對於高中和大學課表的不同做出了下表 2.3.1 的比較: Carter 和 Laporte 認為課表安排問題 (course scheduling problem) 還可. 16.

(27) 以再進一步被分割成五種不同類型[12],其中的每一種類型都未必是單獨狀況, 在某些特殊狀況下它們可能同時存在。. 角色. 高中. 大學. 安排. 由教室. 由學生. 選擇. 較少. 較多元. 規劃結構嚴謹. 規劃結構鬆散. 政 治 大 少許教室. 緊密(老師負擔重). 教室. 相同規格 非常重(整天都忙). 標準. 沒有衝突. 相當輕鬆 少許衝突. io. sit. 表 2.3.1:高中與大學課表比較. er. Nat 1. 課程課表編排. 各式各樣規格. ‧. 學生負擔. 許多教室. 學. ‧ 國. 立. 彈性(老師負擔輕). y. 教師支援. al. n. v i n Ch 分配課程到各個時段,其中要注意的是課程在分配時間跟教室的過程當中, engchi U. 要注意到教室本身的限制以及老師個人的意願。每堂課都有其本身的條件需求,. 舉例來說,有些課需要三個時段,有些課則只需要兩個時段。有的課可能要到不 同的教室上課,有的課可能會在中午午餐時間就上課等等。 2. 教室-教師 課表編排 這個問題比較常出現在高中的課表編排中,跟大學的課表議題比較不同的是, 在這裡的編排單位重點不是學生,而是教室。通常哪些老師會去上哪些班級的課 已經被內定了,因此比較需要處理的問題反而是如何讓這些已經被決定好的配對 在課表配置上不會有所衝突,也就是說,老師不會在同一個時間需要到不同的兩 17.

(28) 個班上課的狀況。在 Class-Teacher 課表編排的情況中編排彈性上的問題反而 是比較常遇到的狀況。 3. 學生編排 (Student Scheduling) 當一堂課節次被分割成好幾個不同的時段或教室時比較容易出現這個狀況, 此類的問題在於當學生選擇上這類型的課時,他們也必須被分配到不同的時段或 教室上課,而重點自然就在於如何平衡課程的節次分割與上課教室可容納人數。 4. 教師指定 (Teacher Assignment) 每個老師有他們每個人不同的喜好需求,因此這類型的問題主要是處理當每. 治 政 大 5. 教室指定 (Classroom Assignment) 立 個老師的喜好需求相衝突時,要如何取得權宜之計。. 當在安排課程教室時需要考量到容納學生量、位置、設施偏好等等限制,而. ‧ 國. 學. 這類型的問題通常發生在課程已經被安排好時間的情況下,一般來說比較理想的. ‧. 狀況是,時間跟教室的安排應該要同步的一併考量,不過許多學校通常會把這兩. 2.4 課表排課問題相關文獻探討 a. er. io. sit. y. Nat. 個部分分開出來獨立進行。. n. iv l C n hengchi U 排課問題的本身具有相當程度的複雜性,需要考量的因素很多,除了資源限. 制如教室容納人數、教室資源提供等等,如果要盡量取得排課的最佳化,還可能 需要再考量到個人喜好限制,諸如教師的喜好時間,教師的喜好上課地點等等。 排課問題除了在計算上的困難之外,還包括[14]: 1. 對於大多數現實生活中的排課問題,其解空間可能大到無法有效的應用 brute force 方式或是間接的搜尋方法。 2. 由於特定的排課問題常存在特殊的限制要求,因此幾乎不可能存在一致性的 演算法來處理所有排課問題。 3. 真實生活中的排課問題常常牽涉到無法精確表達或描述的限制條件。 18.

(29) 學者 Even, S.等人更曾於 1975 年的研究中,證明了排課問題是一個 NP-Complete 的問題[13]。當排課的問題變大時便幾乎不可能找的出最佳解或是 所有解。排課問題的複雜度之高,要如何能將排課自動化並且試著盡可能的取得 最佳解,近四十年來便成為了學者注重的議題。有鑒於電腦設備在硬體以及軟體 方面的大幅改良,越來越多的學者提出各種演算法來希望找出排課的最佳解,以 及降低搜尋時間。在人工智慧領域上就發展出了許多應用技術,常見的如基因演 算法(Genetic Algorithms)[15]、禁忌搜尋法(Taboo Search)[16]、模擬退火法 (Simulate Anneal Arithmetic)[17]以及模糊理論(Fuzzy Logic)[18]等等。以. 政 治 大. 下我們將對這些演算法做一些簡單介紹:. 基因演算法 (Genetic Algorithms). ‧. ‧ 國. 學. io. sit. y. Nat. n. al. er. 2.4.1. 立. Ch. engchi. i n U. v. 圖 2.4.1:基因演算法基本運作流程 19.

(30) 基因演算法的靈感來源來自生物學家達爾文的「物競天擇」理論,最早是由 Holland 於 1975 年時首度提出[14],並且企圖藉由電腦來模擬生物演化機制, 演算的目的是希望透過配種的方式來藉此反覆的找出最佳的解答。在演算的過程 當中,凡是能符合適應函數結果的將給予保留,否則將面臨淘汰。 使用基因演算法,首先必須將問題的解答編碼成為「染色體」,常見的編碼 方式有二位元編碼以及文字編碼兩種。在進化的過程當中,交配運算子會透過「選 擇」 、 「交配」 、 「突變」的方式於篩選的過程當中,將兩個父代的染色體中做部分 的資訊交換以求得新的子代。而突變運算子的目的則是避免演化的過程陷入局部. 政 治 大. 區域解。王子夏[31]將基因演算法的基本流程整理如上圖 2.4.1:. 禁忌搜尋法 (Taboo Search). ‧ 國. 學. 2.4.2. 立. 禁忌搜尋演算法[33]是局部搜尋演算法的一種延伸,它是利用模擬人類智力. ‧. 發展的方式發展出一套新的全局逐步尋優演算法,最早是由學者 Fred Glover 所. sit. y. Nat. 提出。禁忌演算法採用禁忌原則來避免迂迴搜尋情況,並且通過藐視準則來赦免. al. er. io. 一些被禁忌的優良狀態,進而保證蒐尋過程能全局優化。. v. n. 禁忌演算法的搜尋流程是,先給定一個最初解和鄰域,然後在最初解的鄰域. Ch. engchi. i n U. 中找若干候選解,若其中存在一個候選解對應的目標值優於現任解,則替代之。 並且將相對應的對象加入禁忌表中。若不存在此候選解,則在候選解中選擇非禁 忌的最佳狀態做為最新解,同時將其相對應的對象加入禁忌表中,無視他與當前 解的優劣,並修改禁忌表中各對象的任期。如此重複搜尋步驟,直到滿足停止準 則為止。 其中,禁忌表是禁忌搜尋法的核心,禁忌表的大小將會影響到搜尋法的結果 與效率。如果禁忌表太小,搜尋結果可能進入死迴圈,如果禁忌表太大,那麼在 相當程度上可能限制了搜尋範圍,好的解答可能被跳過。禁忌表的特性非常類似 「短期記憶」 ,因此又被稱為短期記憶函數。以下簡單整理 Taboo Search 演算法 20.

(31) 搜尋流程[21]: 1. 給定一個算法參數,隨機產生初始解 x,並置禁忌表為空。 2. 判斷算法終止條件是否滿足?若是,則結束算法並輸出優化結果;否則, 繼續以下步驟。 3. 利用當前解的鄰域函數中產生若干鄰域解,並從中確定若干候選解。 4. 對候選解判斷藐視準則是否滿足?若成立,則用滿足藐視準則的最佳狀態 y 替代 x 成為新的當前解,即 x=y,並用與 y 對應的禁忌對象替換最早進入禁 忌表的禁忌對象,同時用 y 替換「best so far」狀態,然後轉步驟 6;否. 治 政 大 判斷候選解對應的各對象的禁忌屬性,選擇候選解集中非禁忌對像對應的 立 則,繼續以下步驟。. 5.. 最佳狀態為新的當前解,同時使用與之對應的禁忌對象替換最早進入禁忌. ‧ 國. 學. 表的禁忌對像元素。. ‧. 6. 轉步驟(2)。. sit. y. Nat. io. al. er. 2.4.3 模擬退火法 (Simulated Annealing). v. n. 模擬退火法是學者 Kirkpatrick 等人於 1983 年時所提出,並嘗試將他應用. Ch. engchi. i n U. 於最佳化問題中。模擬退火法的靈感來源是源自於物質世界中的材料冷卻與結 晶過程, 「退火」代表一個物理歷程,當固體加熱到一定程度時,會從固態轉為 液態,此時分子結構也會重新組合,隨著溫度的下降,這些分子又會逐漸的以 較低能量程度的結晶狀態重新排列。以下將簡單介紹模擬退火法的操作步驟 [34]: 1. 設定能量函數來做為針對問題的目標函數 2. 決定初始參數:起始溫度 T、終止溫度、冷卻率α以及單一溫度疊代次數 3. 設定起始疊代次數 t=0,並產生初始解 X。 4. 以目前解為中心擴展出去產生新的解 X’ 21.

(32) 5. 採用 Metroplis 接受法則[36],使用公式來決定是否採用鄰近解來替代目前 解。若接受則 X=X’ 6. 更新疊代次數 t=t+1,若疊代次數達到預設限制,則進行降溫 t=0。降溫的 方式主要有兩種,一個是 T=α×T, α∈ [0,1],另一個是 T=T-α, α<0 7. 判斷溫度是否達到終止溫度,若否則回到步驟 3 繼續進行 8. 得到最終解 X 可以將以上的步驟整理為以下流程圖 2.4.2:. 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. 圖 2.4.2:模擬退火法流程 22. v.

(33) 2.4.4 模糊理論 (Fuzzy Logic Control) 模糊邏輯控制[32](Fuzzy Logic Control)簡稱模糊控制(Fuzzy Control), 他是 1965 年由美國學者 Zadeh 所創立的一種模糊集合論,於 1973 年時,他又提 出了模糊邏輯控制的定義。而所謂的模糊控制,就是在控制方式上應用模糊語言 變數、模糊邏輯推理和模糊集理論等來模擬人腦的模糊思考及判斷方式。1974 年英國的 E.H.Mamdani 則首度使用模糊控制語句組成模糊控制器,並將它成功地 應用於鍋爐和蒸汽機的控制。 模糊控制器的基本架構如下圖 2.4.3 所示:. 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. v. 圖 2.4.3:模糊控制器基本結構. 其中主要包含知識庫、模糊推理、輸入量模糊化、輸出量精準化四部分。 . 知識庫. 知識庫包括模糊控制器參數庫和模糊控制規則庫。並且使用語言變數值如:大、. 23.

(34) 中、小等模糊子集來取代精準值,而各模糊子集以隸屬函數表明基本論域上的精 確值屬於該模糊子集的程度。同一個模糊控制規則庫,對基本論域的模糊劃分不 同,控制效果也不同。 . 模糊化. 將精確的輸入量轉化為模糊量有兩種方法: (1)將精確量轉換為標準論域上的模糊單點集。 (2)將精確量轉換為標準論域上的模糊子集。 精確量經對應關係轉換為標準論域上的基本元素,應選擇該元素上具有最大. 政 治 大. 隸屬度的模糊子集來做為該精確量對應的模糊子集。 . 模糊推理. 立. 最基本的模糊推理形式為:. ‧ 國. 前提 2. IF A’. y. Nat. THEN B’. ‧. IF A THEN B. 結論. 學. 前提 1. er. io. sit. 其中,A、A’為論域 U 上的模糊子集,B、B’為論域 V 上的模糊子集。前提 1 稱為模糊蘊涵關係,記為 A→B。在實際應用中,一般先針對各條規則進行推理,. n. al. Ch. 然後將各個推理結果總合而得最終推理結果。 . 精準化. engchi. i n U. v. 推理得到的模糊子集要轉換為精確值,以得到最終控制量輸出 y。目前常用的兩 種精確化方法: (1)最大隸屬度法。在所有得到的模糊子集中,選取隸屬度最大的標準論域元素 並取其平均值作為精確化結果。 (2)重心法。將推理得到的模糊子集的隸屬函數與橫坐標所圍面積的重心所對應 的標準論域元素來作為精確化結果。 在得到推理結果精確值之後,還須再按對應關係,取得到最終控制量輸出 y。. 24.

(35) 第三章 系統架構與實作. 立. 3.1 問題描述. 政 治 大. ‧ 國. 學. 校園課表需要考量的限制條件 (constraint) 相當多,在我們的研究中,. ‧. 我們加入了許多的限制條件。其中包含學校課表一定會需要滿足的硬性限制條件,. y. sit. io. 1. 同一時段的同一個老師不能出現在兩堂課上. n. al. Ch. 2. 同一時段的同一間教室不能有兩堂課. engchi. er. 以下幾項:. Nat. 以及依照個別老師不同可以增加或減少的軟性限制條件。硬性限制條件我們列出. i n U. v. 3. 教室的容納人數能夠符合課堂的要求 4. 教室的設備提供能夠符合課堂的要求 5. 同一堂課的不同節次不能重疊 6. 同一年級的必修課上課時間不能相同 7. 相鄰年級的必修課上課時間不能相同. 8. 同一年級的選修課及必修課上課時間不能相同 同一位教師不得在同一個時段內被分配到不同教室上課,我們同樣的也不希 望一堂課被分配到不符合課堂要求資源得教室去。所以每個硬性限制條件在學校. 25.

(36) 課表規畫的過程當中都必須要被滿足,否則導引出來的結果就算失敗。除了這些 符合物理條件的硬性限制之外,我們也加入了關於許多個人喜好的限制條件,這 些限制條件可以方便使用者給予課程各別的排課限制。本系統將根據使用者所選 定的條件規則,給予能符合滿足所有條件的解答。相較於上述的物理性限制條件, 這些限制具有選擇性,一旦被指定將必須遵行,其中包括: 1. 課程指定的週上課日 2. 課程指定的日上課時段 3. 課程指定的上課地點. 治 政 大 除了這些基本的限制條件之外,有鑒於每學期的排課結果,由於手續複雜的 立. 4. 課程不安排的上課地點. 關係,可能有許多教師的個人排課喜好在排課過程中被忽略。因此,我們更強調. ‧ 國. 學. 在所有的排課結果當中,能盡量滿足教師個人喜好或需求的課表。這些條件將會. ‧. 在計算排課結果的加權值中被考慮到,而本系統亦將挑選出能滿足最多需求的排. y. Nat. 課結果。以下是我們的教師喜好條件設定:. 4. 教師無法上課教室. n. 3. 教師喜好教室. al. er. io. 2. 教師厭惡上課時間. sit. 1. 教師喜好上課時間. Ch. engchi. i n U. v. 其中,教師無法上課教室為硬性限制。而其餘三個條件設定,將在計算排課 結果時被參考。. 3.2 系統架構 在系統的使用者介面上,我們提供領域專屬語言(Domain Specific Language, DSL)以及圖形使用者介面(Graphic User Interface, GUI)兩種介面給使用者使 用。這兩種輸入方式雖然都可以用來取得排課解,但他們對於問題描述的輸入方 26.

(37) 式並不相同,而使用對象也不相同。DSL 主要是提供給有需要排課解的系統工程 師做為他們系統的後端接合介面,而 GUI 則是提供給一般使用者使用,這部分將 在 3.3 章節進一步說明。使用者於介面 (DSL 或 GUI) 輸入完關於排課的問題描 述之後,限制條件處理器 JaCoP 將開始進行符合限制條件解的搜尋。並且在找尋 解答的過程中,盡可能的選出能滿足多位老師需求的答案。 關於結果顯示部分,我們採用 XSLT 的方式來顯示我們的結果,並給予使用 者四種觀看結果的角度。其中包括,系所一週的所有課程表、課程的排課結果描 述表、個別教師的課程表、個別教室的課程表。此外,在 GUI 的部分,排課描述. 治 政 大 BaseX 的部分 透過伺服器,外界就可以查詢我們的排課資料及其相關描述,關於 立. 可另外存成 XML 檔,我們另外架設了專門用來分析 XML 檔的 BaseX 伺服器資料庫,. 將在章節 3.3.2.1 做更進一步的解說。圖 3.2.1 即為本研究的基本架構:. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. 圖 3.2.1:系統架構圖. 27. v.

(38) 3.3 系統使用者介面 我們提供兩種使用者介面。在協助系所行政工作上,我們設計 GUI 方便使用 者操作。在此同時,我們也提供了使用 Groovy Builder 所建制的 DSL 使我們的 系統在程式的撰寫上能夠與其他系統做連結,達到系統擴充的效果。 GUI 的部份我們使用 JavaFX 來進行介面的設計,JavaFX 本身根基於 Java 的 架構之上,這讓使用者在程式的撰寫上能獲得 Java 的完整支援。而且,JavaFX 2.X 也已經完全整合進 Java SE Development Kit 7/8 成為其中的一部分。 DSL 的部分則是利用 Groovy 的 Builder 建制語言系統。Groovy 本身可以看. 政 治 大 也能夠轉 Java bytecode 立 的特性,讓 Groovy 跟 Java 作完全的結合。也就因為有. 作是 Java 語言的再進化,使用者在撰寫 Groovy 時,可以充分利用 Groovy code. ‧ 國. 學. 了 Java 的強力支援,因此 Groovy 的「後台」可以說是非常穩固而且強大。除此 之外,Groovy 還提供了強大的後端物件協議 (Metaobject Protocol, MOP) 以. ‧. 及它內建好的自動建制器 (Builder) 機制,方便使用者撰寫自己的 DSL。MOP 機. sit. y. Nat. 制使得 Groovy 在程式處理的過程中能夠隨時的在不同的物件上面呼叫一些原本. al. er. io. 物件所沒有的實體方法,這讓整個程式執行的過程看起來好像能夠隨時動態的擷. v. n. 取函數,而不再只是侷限於以往硬性的參數傳遞方式。以下我們將針對 Groovy. Ch. engchi. i n U. Builder 建置而成的 DSL 以及 JavaFX 所建置而成的 GUI 作介紹。. 3.3.1 使用 Groovy 建制器架構領域專屬語言 為了加快程式的開發速度,我們採用了 Groovy 提供的 BuilderSupport 來開 發我們的領域專屬語言 (Domain Specific Language)。在整個研究的開發過程 當中,我們先利用 JaCoP 結合 Groovy 將整個程式限制條件的部分先建構完畢, 並且簡單的提供一種資料結構的描述方式,但是使用者不需要去了解 Groovy 跟 JaCop 是如何去描述他們的課程安排問題甚至是背後的處理過程。我們提供使用. 28.

(39) 者一種排課資料結構的描述方法,使我們的系統能夠和其他系統做結合,以獲得 校園課表解決可能方法。 在 DSL 研究的開發過程當中經過兩個轉折點。第一個是如何將排課的問題描 述利用 Groovy 的 Builder 轉成設定好的 JaCop 資料結構型態。第二個則是當我 們將問題轉成 JaCop 資料結構型態之後,我們要如何的將這些問題來做處理,並 且獲得可能的答案。. 3.3.1.1 Groovy 領域專屬語言建制器. 政 治 大 delegate 的 Groovy 程式會不斷的運用到 invokeMethod()、methodMissing()和 立. Groovy 透過 MOP 的機制來執行程式,在整個 Groovy 程式的運作過程當中,. ‧ 國. 學. 特殊元件。而實際上在提供使用者開發 builder 時,使用者不需要去面對程式開 發過程中 invokeMethod() 和 methodMissing() 的複雜處理,從使用者的角度來. ‧. 看,反而比較常用到的是 BuilderSupport 這個類別[7],因為在 BuilderSupport. sit. y. Nat. 類別裡,Groovy 已經提供了許多方便使用者快速開發 builder 的實體方法。. al. er. io. BuilderSupport 提供了一個簡單而且漂亮的介面來實做這些 node-based. v. n. construction。當使用到 BuilderSuport 時,使用者將直接利用裡面所定義好的. Ch. engchi. i n U. 功能來取代 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。對應的方式是依照程式所收到的參數內容來決定呼叫哪 29.

(40) 一個 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 所示:. 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. 圖 3.3.1:範例 ExBuilder. 30. v.

(41) 完成了簡單的 builder 架構之後,接下來,我們建立此 ExBuilder 的物件, 並且給予球員的基本資料描述後實際執行程式,如圖 3.3.2。. 圖 3.3.2:執行 ExBuilder. 政 治 大. 執行完程式之後從下圖 3.3.3 的執行結果中可以發現,Groovy 在執行. 立. builder 的過程中會逐一的檢視其程式碼,並且將程式碼按照形態對應的方式去. ‧ 國. 學. 進行所對應到的 createNode 巢狀結構呼叫。. ‧. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. v. 圖 3.3.3:ExBuilder 結果. 透過 Groovy BuilderSupport 的強大功能,使用者也可容易的寫出屬於自己 的領域專屬語言 (DSL)。我們將我們的排課所需資料彙整後,依照資料屬性的不 同,給予我們 DSL 的專屬排課資料描述。. 31.

(42) 3.3.1.2 系統的領域專屬語言 本系統的 DSL 主要由五個問題描述區塊所組成,其中包括系統加權值與系所 設定 WeightValue、教師喜好描述 Teachers、教室描述 Rooms、課程描述 Courses 與排課需求設定 ArrangeMode。在每個問題描述區塊中又有關於各部分的屬性描 述,而部分冗長的屬性描述我們將採用英文簡寫的方式,以省去多餘的編程時間。 這部份我們將一一介紹。以下我們將為各問題描述區塊做個別的簡易描述,最後 並附上本系統一個完整的 DSL 描述做為參考。在 DSL 描述中,輸入格式為中括號 者,代表該屬性可填入多項,並使用逗點符號做區隔。非中括號者則只能選定一. 政 治 大 123 指定時間時,該字串由指定時段的週上課日與該天的時段組成。如星期一的 立. 項。若中括號內不做任何設定,則該屬性只需輸入中括號即可。當輸入選項為某. ‧ 國. 學. 時段則表示為字串 1123。所有字串 (含選定日期、教師、教室名稱等) 均使用 雙引號標示,阿拉伯數字則不受此限制。. ‧. Nat. n. al. er. io. sit. y. 1. 系統加權值與系所設定 WeightValue. Ch. engchi. i n U. 圖 3.3.4:WeightValue. 1. DayTimePrefer 課程喜好時段加權增額值設定。. 32. v.

(43) 2. TimeOnlyPrefer 課程喜好時段(僅節次指定)加權增額值設定。 3. DayOnlyPrefer 課程喜好時段(僅日指定)加權增額值設定。 4. TimeHate 課程厭惡時段加權扣除值設定。 5. RoomPrefer 教室喜好加權增額值設定。 6. SlotsCode 7. SlotLock. 該校的校排課時段代號。 該系所指定一日不排課時段,需為 SlotsCode 之字元。. 8. TimeIntervalLock 日不排課區段。. 2. 教師喜好描述 Teachers. 立. ‧ 國. 學 圖 3.3.5:Teachers. ‧. 1. name. 政 治 大. 喜好時段。. 4. Hate Time (HT). al. n. 厭惡時段。. 5. Prefer Room (PR) 6. credit. er. 3. Prefer Time (PT). io. 教師無法上課時段。. Ch. engchi. 喜好教室。. 教師個人加權增額值。. 3. 教室描述 Rooms. 圖 3.3.6:Rooms 1. name. sit. Nat. 2. Unable Time (UT). y. 教師名稱。. 教室名稱。 33. i n U. v.

(44) 2. capacity 3. equip. 教室可容納人數。. 4. NoOpen. 教室現有設備。 教室不開放時間。. 4. 課程描述 Courses. 立. 圖 3.3.7:Courses. ‧ 國. 學. 課程名稱。. ‧. 1. name. 政 治 大. 3. Grade Accept(GA). 授課年級。層級與年級之連續字串,共同上課則以點做. er. io. sit. y. 節次數。. Nat. 2. Slot Number (SN). 區隔,例如學士班一年級與碩士班一二年級共同上課則表示為:學 1.碩 12. al. n. v i n 課程屬性。必修課填入必、選修課填入選 Ch engchi U. 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 34.

(45) 圖 3.3.8:ArrangeMode. 1. second. 指定系統搜尋時間。. 2. answerNeed. 最佳解需求數目。. 以上各描述區塊後方皆有一數字括號,該數字括號預設值皆為 0。. 政 治 大 綜和所有上述元件之後,我們得到圖 3.3.9 之完整範例。 立. 6. 本系統完整 DSL 範例. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. 35. i n U. v.

(46) 圖 3.3.9:本系統 DSL 完整範例. 3.3.2 使用 JavaFX 建制 GUI JavaFX 是一個構建於 Java 技術上的平台。其目前的版本是 2.2,JavaFX 也 同時向下兼容了較舊的版本。圖 3.3.10 為 JavaFX 的架構圖:. 圖 3.3.10:JavaFX 架構. 資料設定. 教室設備需求. 時段代碼序列. sit. 課程名稱. er. 教室名稱. y. 前置設定. io. a l 教師喜好 教室狀況 v i n Ch engchi U. n. 排課模式. ‧. Nat. 教師名稱. 學. ‧ 國. 立. 政 治 大. 課程資訊. 排課. 儲存所有資料. 開始排課. 結果顯示 所有課程結果. 個別教室結果. 個別教師結果. 圖 3.3.11:排課系統 GUI 流程 設計 GUI 的過程中,為求排課過程資料的正確性,我們將整個系統使用流程 分成四個步驟:前置設定、資料設定、排課以及結果顯示。流程中,每一個步驟 都含有其必需性,上一步驟未完成則無法進行下一個步驟,例:前置設定未完成 則無法進行資料設定。整個排課設定流程如上圖 3.3.11 所示。系統資料設定完 36.

(47) 成後,在儲存資料時,希統將把資料自動儲存成兩種檔案類型:YYC 檔以及 XML 檔。其中 YYC 檔為此 GUI 系統的讀取用檔。. 3.3.2.1. BaseX 資料庫伺服器. 在 GUI 模式中,我們的資料存檔其中之一採用 XML 格式,其中包含了許多關 於科系排課時的相關資訊,譬如:教師資料、教室資料以及課程資料等等。考量 到此等資料的可用性以及延展性,我們搭配了 BaseX 來使我們的存取檔可以和外 界有更多的互動性。. 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. v. 圖 3.3.12:BaseX 與系統關係. BaseX 是 2005 年由康斯坦茨大學首先開始研發,然後進而延展成一個採用 XPath/XQuery 技術的多功能性資料庫。透過 BaseX Client/Server 技術,我們 將我們的資料放置到網路上,可以方便更多有需要的人來查詢資料,如上圖 3.3.12 所示。 此外,由於我們的排課結果採用 XSLT 的方式顯示,所以我們同時也將排課 37.

(48) 完成的所有排課解放置到 BaseX 上提供外界查詢。. 圖 3.3.14:資料上傳至 BaseX. 學. ‧ 國. 立. 政 治 大. ‧ sit. y. Nat. 如上圖 3.3.13 中我們示範如何將資料上傳至 BaseX。使用者先在 BaseX 上. al. er. io. 建立一個資料庫 (databases),並所有資料上傳之後,此資料庫即可提供使用者. n. 做 XQUERY 查詢,如下圖 3.3.14。. Ch. engchi. 38. i n U. v.

(49) 圖 3.3.14:BaseX 查詢資料結果顯示. 3.3.2.2 前置設定頁面. 立. 政 治 大. ‧. ‧ 國. 學 y. sit. io. al. er. Nat. 圖 3.3.15:排課系統前置頁面. v. n. 在進行排課前,系統需要蒐集現有關於排課的相關資料,以便在排課的過程. Ch. engchi. i n U. 中,給予使用者輔助。因此,在前置頁面中,我們需要獲得更多資訊,其中包含: 教室現有設備、教師名稱、教室名稱、課程名稱、一週上課天數以及學校時段代 碼序列等等。這些資訊都將在之後的資料設定時提供使用者排課資訊,如上圖 3.3.15 所示。然而,系統在前置資料尚未獲得以前,除了前置設定頁面外,其 餘的頁面將暫不開放選擇,如下圖 3.3.16。. 39.

(50) 政 治 大. 圖 3.3.16:排課系統未開放頁面. 立. ‧. ‧ 國. 學. 3.3.2.3 共同教師頁面. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. v. 圖 3.3.17:排課系統新增共同教師頁面 考量到課程授課老師可能會有共同教師,也就是同一堂課可能由兩位以上的 教師來共同授課的狀況,我們必須將這種可能列入考量,因此使用者可透過共同 教師的頁面選擇,來從現有的教師名稱中選擇共同教師名單候選。如上圖 3.3.17 所示:. 40.

(51) 3.3.2.4 儲存排課模式頁面 我們的系統目標致力於取得更佳的排課可能解,透過給予每個老師排課結果 加權值的方式,能幫助我們在所有可能解中得知其優劣好壞。考量到加權值的設 定可能會影響到結果顯示,因此我們給予每個加權值一個預設值。其中加權值包 括: 1. 課程喜好時段加權增額值設定 (預設值為 10) 排課結果中,某教師的喜好時段與課表中該教師授課的課程時段安排相符, 則於加權總額中給於其加權值。. 政 治 大 排課結果中,若某教師僅指定節次喜好,而未指定日喜好,而且該教師的喜 立. 2. 課程喜好時段(僅節次指定)加權增額值設定 (預設值為 2). ‧. ‧ 國. 權值。. 學. 好時段與課表中該教師授課的課程時段安排相符,則於加權總額中給於其加. 3. 課程喜好時段(僅日指定)加權增額值設定 (預設值為 5). sit. y. Nat. 課結果中,若某教師僅指定日喜好,而未指定節次喜好,而且該教師的喜好. al. n. 值。. er. io. 時段與課表中該教師授課的課程時段安排相符,則於加權總額中給於其加權. Ch. engchi. 4. 課程厭惡時段加權扣除值設定 (預設值為 7). i n U. v. 排課結果中,某教師的厭惡時段與課表中該教師授課的課程時段安排相符, 則於加權總額中扣除其加權值。. 5. 教室喜好加權增額值設定 (預設值為 7) 排課結果中,某教師的喜好教室與課表中該教師授課的課程教室安排相符, 則於加權總額中給予其加權值。. 在儲存排課模式的頁面中,我們亦提供使用者關於排課結果的更多選擇: 41.

(52) 6. 設定搜尋秒數 我們建議給與系統更多的時間替使用者找尋更好的可能解,但使用者依然可 以給予搜尋秒數的限制。 7. 指定搜尋模式 搜尋模式中,我們提供所有解搜尋以及最高加權解搜尋兩種模式。 8. 最高加權解所需數目 使用者可以指定最高加權解模式中所需之結果數目,系統將依照最高加權值 作為排序依據,並於其中隨機選定結果,避免結果落入區域最佳解。. 治 政 大如節次 1 選定不安排課程, 依照各系所的需求不同,系統提供節次時段限制, 立. 9. 不安排課程時段. 則除了有指定節次的課程之外,其餘課程將不會安排在節次 1 的上課時間。. ‧ 國. 學. 10. 不安排課程時段. ‧. 系統亦提供時間的區段限制。如節次代碼為 1234 的前置設定,若選定星期一. y. Nat. 的 12 時段不給予排課,即選定輸入為 112 時,則除了指定節次且指定週上課. er. io. sit. 日的課程之外,其餘課程將不會安排在星期一節次 12 的上課時間。 排課模式頁面如圖 3.3.18 所示:. n. al. Ch. engchi. 42. i n U. v.

(53) 立. 政 治 大. 圖 3.3.18:排課系統模式設定頁面. ‧ 國. 學 ‧. 3.3.2.5 儲存教師資料頁面. sit. y. Nat. 我們提供各系所老師對於每個學期排課上的喜好選擇。諸如:喜好時段、厭. al. er. io. 惡時段、教師無法上課時段以及喜好教室。需注意的是,時間選擇有輸入方式之. v. n. 限制。若學校節次代碼序列為 123456789,則選定星期一時段 678 的輸入方式為. Ch. engchi. i n U. 1678。教室資料設定頁面如圖 3.3.19 所示:以下為各選擇區塊進行說明: 1. 教師喜好時段: 教師喜好時段為週上課日及日上課時段的交集、如星期一的 123 節次。 2. 教師厭惡時段: 教師厭惡時段亦為週上課日及日上課時段的交集、如星期二的 234 節次。 3. 教師無法上課時段: 教師厭惡時段同為週上課日及日上課時段的交集、如星期 2 的 234 節次。選 定後,該教師的所有課程將不會排入至所有指定的無法上課時段。. 43.

(54) 4. 教師個人加權增額值: 個別教師可指定個別的加權增額值,系統除了排課模式頁面的加權增額值外, 此加權增額值亦在篩選課表時被考慮。例:系統的加權增額值設定為 10、個 人加權增額值設定為 5,則該老師的課加權增額值為 15。此加權增額值同步 增額於所有系統增額模式。 5. 教師喜好教室: 教室可選擇多個喜好教室。. 政 治 大. 立. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. v. 圖 3.3.19:排課系統教師資料頁面. 3.3.2.6 儲存教室資料頁面 除了上課時段的設定之外,依據每個教室資源限制的不同,也可能會影響到 課程的分配結果。我們依照每間教室的不同情況,給予其不同的描述。 1. 教室可容納人數 教室可容納的學生數量。 2. 教室現有設備 教室所提供的設備、如:投影機、麥克風、冷氣等。 44.

數據

圖 2.1.1:GroovyObject 介面
圖 2.4.1:基因演算法基本運作流程
圖 3.3.1:範例 ExBuilder

參考文獻

相關文件

• 本章動畫的主角是各個英文字母文字物件,由 於 Flash 提供了文字物件打散 (Break Apart) 及分散至圖層 (Distribute to Layer)

•給學生很多的機會嘗試 比較不同物件的重量,鼓 勵學生表達兩件物件相對 的重量。.

以自訂單位比較物件 的長度和物件的距離 認識使用長度公認單

• 訓練課程之設計格式,請參用 本分署規範之課程申請相關表件-學、術科

級別級別描述學習成果學生表現示例 I3.2 他們開始對人、事件及物件

找出在課室 內我前、後 方的物件 (如:白 板、門口).

3、 輸入文字(Input Text):所產生的文字框具固定寬度,可以讓

(11)※群組化物件(使用 Flash 工具列所繪製之物件):Ctrl-G 或功能