林嵐嵐
(廣東水利電力職業(yè)技術(shù)學院,廣東廣州510635)
本人在2004年開發(fā)了滿足本校排課需求的排課系統(tǒng),近兩年學校將教學中心轉(zhuǎn)移到新校區(qū),舊的排課規(guī)則已經(jīng)不能滿足新的需求,故在原有系統(tǒng)的基礎(chǔ)上根據(jù)新的排課規(guī)則設(shè)計了新的排課算法,使新的排課算法能滿足新的排課需求。
本論文主要介紹了新的排課規(guī)則,以及滿足新排課規(guī)則的排課算法的設(shè)計與實現(xiàn)。
由于本校新舊校區(qū)距離比較遠,往返新舊校區(qū)需要花費比較長的時間,為了體現(xiàn)“以人為本”的排課理念,在新校區(qū)上課的教師盡可能采用集中排課的方式,即一天安排四節(jié)或六節(jié)課,并且盡可能晚上不安排課程。
為了提高教學資源的利用率,對同專業(yè)的兩個班級的相同課程,通常采用理論課合班實踐課分班的原則。在教學資源充足的情況下,對同一個班同一門純理論課或純實踐課一天最多安排兩節(jié)、理論實踐相結(jié)合的課程最多安排四節(jié),這里的理論實踐課是指理論課和實踐課的課時比為1:1的課程。
為了提高學生對知識的吸收率,對同一個班通常不會連續(xù)兩天安排相同的理論課。對理論實踐相結(jié)合的課程通常是先安排理論課再安排實踐課,實踐課緊跟在理論課后面。
為了滿足前后課銜接和充分利用教學資源的需要,對同一排課對象在一周的同一時間可根據(jù)周數(shù)的不同安排不同的課程,這里的排課對象指教師、教室和班級。
排課系統(tǒng)中包含7個數(shù)據(jù)表:教師基本信息表、班級基本信息表、教室基本信息表、課程安排表、教師課表、班級課表和教室課表。教師基本信息表、班級基本信息表和教室基本信息表中都有一個名為“排課情況”的字段,用來表示當前的排課情況。
課程安排表中包含了課程名稱、上課班級代碼、授課教師編號、起止周、周學時、合班否、課程類型、排課否和備注等字段?!吧险n班級代碼”字段用來存放單班或合班上課的班級代碼,“課程類型”字段用來存放“純理論”、“純實踐”、“理論實踐課”等上課類型,“排課否”字段在排課后通過賦予字段值“是”或“否”來表示該課程能否排課,“備注”字段用來存放排課信息,排課過程中將每次排課的時間地點都存放在該字段中,當排課失敗時可根據(jù)該字段的信息對當前課程進行手動排課。
排課算法的設(shè)計思路如下所述:
首先對與排課相關(guān)的表進行初始化操作。把教師基本信息表、班級基本信息表和教室基本信息表中的“排課情況”字段的字段值設(shè)置為400個*號,同時把課程安排表中的“排課否”的字段值設(shè)置為“否”,并清除“備注”字段的值。
然后根據(jù)課程安排表進行排課。先對排課要求比較高的合班理論分班實踐課進行排課,然后對單班理論實踐課進行排課,再對合班純理論課進行排課,最后對單班純理論或純實踐課進行排課。
下面以合班理論分班實踐課的排課為例,說明算法的設(shè)計。
合班理論分班實踐課排課算法()
(1)對相同的排課對象按周數(shù)的不同安排不同的課程
為了實現(xiàn)對相同的排課對象按周數(shù)的不同安排不同的課程,在教師基本信息表、班級基本信息表和教室基本信息表中定義了"排課情況"字段用來表示各排課對象的排課情況,該字段用400個字符表示20個教學周中每一周20次課(一次課相當兩節(jié)課)的排課情況,該字段的第一個字符表示第一周星期一1、2節(jié)的排課情況,第二個字符表示第一周星期一3、4節(jié)的排課情況,依次類推。如果某一字符為*號則表示該時間點未排課,如果為#號則表示已排課。如果要獲取第week周星期i第j次課的上課情況,可通過判斷該字段的第(week-1)*20+(i-1)*4+j個字符是否為*號來得知該時間點是否未排課。
(2)合班理論分班實踐課程及相同課程的理論課不連續(xù)兩天安排的人性化排課
合班理論分班實踐課程的最佳排課規(guī)則是1、2節(jié)合班上理論課,3、4節(jié)一個單班上實踐課,5、6節(jié)另一個單班上實踐課;其次是5、6節(jié)合班上理論課,第二天的1、2節(jié)一個單班上實踐課,第二天的3、4節(jié)另一個單班上實踐課。
為了滿足上述規(guī)則和相同課程的理論課不連續(xù)兩天安排的原則,在設(shè)計算法時用i%5+1表示星期幾,用j%3+1表示第幾次課,用WeekStart表示課程的開始周,用WeekEnd表示課程的結(jié)束周,為理論課查找排課時間點的算法如下:
上述算法用表示第幾節(jié)的循環(huán)變量作為外循環(huán)、用表示星期幾的循環(huán)變量作為內(nèi)循環(huán),并且循環(huán)變量的更改采用加2而不是加1,從而使排課時間點從每一天的1、2節(jié)開始查找,當所有的1、2節(jié)都不滿足要求時才查找每一天的5、6節(jié),最后查找3、4節(jié),在選擇星期幾上課時,是按照星期一、星期三、星期五、星期二、星期四的順序查找,從而實現(xiàn)相同課程的理論課不連續(xù)兩天安排的原則。
特別注意的是為了滿足廣大教師晚上不愿上課的需求,在自動排課算法中不考慮對7、8節(jié)進行排課,故上述算法的外循環(huán)用for(j=0;j<6;j=j+2)而不是for(j=0;j<8;j=j+2)。
為了實現(xiàn)實踐課緊跟在理論課后面安排的原則,在選擇實踐課上課時間點時,應從當前理論課的時間點后面開始查找,這時只需用一重循環(huán)來遍歷一周的所有上課時間點。實踐課的排課算法如下:
為了測試本排課系統(tǒng)的性能,本人以上學期計算機系的實際排課數(shù)據(jù)作為測試數(shù)據(jù),其中多媒體教室12個,實訓場8個,班級26個,教師34人,班平均周課時20節(jié),采用本排課系統(tǒng)進行排課后,除了兩個周學時為28節(jié)課的班級不能完成自動排課外,其它都能安排到上課時間,并且大部分排課時間滿足我校的排課規(guī)則。實驗結(jié)果表明該排課算法的設(shè)計比較合理,能滿足實際排課需求。