首頁‎ > ‎電子期刊‎ > ‎2005 年 第 8 期‎ > ‎

多角調課演算法初探(三)


摘要

  • 文章編號: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數值,以避免可能發生無窮搜尋情況的問題。

上述是此研究多角調課演算法的大概基礎方向,在日後的期刊中,我們將會更詳細介紹此研究所推演出多角調課演算法的定義及流程。



Comments