摘要
- 文章編號:20050405
- 投稿日期:2005/04/25
- 作者:董世尊、廖韋傑、陳冠廷、陳雅鳳
- 備註:
前言
「多角調課演算法初探(二)」文中提到排課人員手動調課的方式和步驟,根據不同排課人員的構想,產生不同調課的結果;在同班級多角調課之中,如果都
無法做調課動作時,則必需往多班級的調課方式進行,而產生多班級多角調課問題,依循教師的限制條件和分課表查詢,逐一完成欲調課之教師所屬的調課後班級課
表和教師分課表。
而本文將延續上一期文中手動調課的概念,來推演出多角調課於內部系統中進行的方式,給予設定參數,描述調課問題解決方法的步驟。
多角調課參數設定
排課系統 |
調課系統參數 |
需要調動課程之教師 |
Teacher_t (t=1,2,3…) |
調課教師t之限制條件-星期條件 |
Weekday(wt>2,wt>=2,wt=3,wt<=3,wt<5…) |
調課教師t之限制條件-節次條件 |
Periods(pt>2,pt>=2,pt=3,pt<=3,pt<5…) |
調課教師t之限制條件-跨中午 |
Longbreak(lbt=ture or false) |
調課教師t之限制條件-重複排課 |
DoubleClass(dct=true or false) |
調課教師t之限制條件-單雙週 |
WeekFlag(wft=true or false) |
調動之班級 |
Class(c_1,c_2,c_3…) |
班級c調動之節次 |
ClassPeriods(cpc_1,cpc_2,cpc_3…) |
相關場地(電腦教室、第二校區…) |
LocationClass(lc=true or false) |
調課搜尋之階層 |
Level(0<L<4,…) |
可調課範圍 |
Range(r=1,2,3…) |
需要調動課程教師之分課表 |
Teacher_s(st1,st2,st3…) |
在手動調課時,我們參考許多限制條件和相關教師、班級、節次的調動,因此在此將調課相關資料給予參數設定,以便日後運用於開發系統中。
每位需要調課之教師設定參數為Teacher_t(t = 1、2、3…),以區別不同位教師;星期條件參數Weekday(wt
> 2,wt > = 2,wt = 3,wt < = 3,wt <
5…),用於分辨課程要求排至星期幾之前後;節次條件參數Periods(pt > 2,pt > = 2,pt = 3,pt < =
3,pt < 5…),用於分辨課程要求排至之哪個節次前後;跨中午之參數Longbreak(lbt = true or
false)、重複排課參數DoubleClass(dct=true or false)、單雙週參數WeekFlag(wft=true or
false)則都是用於分辨是否有不跨中午、不願重複排課、不願單雙週排課要求。相關場地限制條件參數為LocationClass(lc = true
or false),則是利用true與false來判斷是否場地已有別的班級使用。
調動之班級參數Class(c_1,c_2,c_3…),用於區別不同調課之班級。調動班級節次參數則為
ClassPeriods(cpc_1,cpc_2,cpc_3…),以分辨在某班級的哪一個節次為欲調動節次,並與需要調動課程之分課表的參數
Teacher_s(st1,st2,st3…)相互對照,逐一搜尋出可調動之節次和班級;可調課範圍之參數則為Range(r =
1,2,3…),配合需要調動課程教師的分課表參數Teacher_s(st1,st2,st3…),可以以表示出可調課範圍的各個節次;調課搜尋之階層
參數Level(0 < L < 4,…),可設定所欲搜尋範圍,使之調課作業為有限制式的搜尋。
多角調課步驟概念
Public MCE
Scheduler(cpc) //步驟1
Scheduler(t,wt,pt,lbt,dct,wft,lc) //步驟2
Scheduler(st1) //步驟3
temp=false //步驟4
for 1 to r //步驟5
if (cpc = st_r){
exchange complete
temp=true
}
Next |
- 設定level數值及回到Scheduler繼續進行搜尋作業
If (not temp){ //步驟6
L++
cpc.next
If (L<3)
MCE(setScheduler)
Else
end
} |
此多角調課之Function名稱,我們假設命名為MCE(Multistage Class
Exchange);步驟一時,設定所欲調課之班級節次,步驟二則設定該調課節次的教師,並對於該教師的限制條件
做判斷處理,步驟三則是當限制條件判斷處理後,列出同班級所有該教師可以調課的節次,上述三個步驟方法,我們定義為一個Scheduler,代表班級課表
中,所有欲調課教師可以調動的節次範圍,以1 to r 表示之,譬如 1 to 5 表示有五個可以調課的節次,則此為節次範圍(圖一)。
步驟四中,額外設立了一個暫存器(temp)做為判斷是否調動課表完成之用,初始設定為flase,也就是還未調動完成;步驟五則進行欲調
課節次與可能必需調動教師之分課表進行節次對照,如果欲調課節次(cpc)與範圍所列之調課節次(st_r)(在各個教師之分課表(st)中,所對應此班
級之某幾個節次為st_r,圖一所示)可以互調,暫存器(temp)設定就為true,調課得以完成;如果暫存器(temp) =
flase,表示同班級中沒有調動之節次可以做調課作業,調課失敗,則進行步驟六,將範圍所列之調課節次(st_r)角度以調課節次(cpc)角度作業,
進行別班級的調課動作,並重複Scheduler事件和for迴圈以達成調課動作為止。
L <
3是假設分層搜尋調課,結果最多搜尋至第二層,層級定義是假設在同班級中,找不到可以與調課節次(cpc)的範圍所列之調課節次(st_r)調換課程(此
階段為第零層),
則對照範圍所列之調課節次(st_r)再去進行另一個班級之調課節次(cpc)進行搜尋作業,所有從原本調課之班級所牽扯的別班級調課都為第一層,其次為
第二層…依此類推,搜尋至所設定之Level數值,以避免可能發生無窮搜尋情況的問題。
上述是此研究多角調課演算法的大概基礎方向,在日後的期刊中,我們將會更詳細介紹此研究所推演出多角調課演算法的定義及流程。
|