本發(fā)明涉及教學(xué)管理領(lǐng)域,特別是一種高效智能的排課方法及系統(tǒng)。
背景技術(shù):
在學(xué)校教學(xué)管理工作中,排課一直是一項(xiàng)極其繁重且非常重要的工作,一個(gè)完善的排課方案是保證教學(xué)秩序正常進(jìn)行的前提和基礎(chǔ)。而隨著招生規(guī)模的擴(kuò)大、教學(xué)資源緊缺以及教學(xué)形式多樣化等一系列現(xiàn)象,實(shí)際排課過程中碰到的約束條件及規(guī)則沖突也是越來越強(qiáng),而傳統(tǒng)的手工排課方法要么耗時(shí)很久,要么很難出一個(gè)比較完善的排課方案。
排課問題是經(jīng)典的NP完全問題,目前也產(chǎn)生了很多排課的方法及思路,如基于貪心算法、基于回溯算法、基于遺傳算法等等。貪心算法雖然時(shí)間復(fù)雜度比較低,但是比較容易出現(xiàn)局部最優(yōu),也可能找不到可行解;回溯算法雖然有通用解題法之稱,但走不通就退回再走的思路注定了需要較長的時(shí)間;而遺傳算法需要通過生成大量的初始值后再不斷的優(yōu)勝劣汰,需要消耗大量的空間,而沒有主動(dòng)依據(jù)條件生成課表,存在一定的隨機(jī)性,也導(dǎo)致大量時(shí)間的浪費(fèi)。
本發(fā)明針對(duì)教學(xué)管理領(lǐng)域中的排課問題進(jìn)行了算法和系統(tǒng)的設(shè)計(jì),先利用模擬人工排課的快速排課方法快速生成初始課程表,再利用迭代逼近的深度優(yōu)化排課方法進(jìn)行深度優(yōu)化。經(jīng)實(shí)踐,該方法和系統(tǒng)能夠高效智能的生成完善的課程表,大大降低了學(xué)校排課任務(wù)的工作量。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明目的是,在現(xiàn)有技術(shù)背景下,提出一種高效智能的排課方法及系統(tǒng)主要針對(duì)教學(xué)管理中的排課問題進(jìn)行了算法和系統(tǒng)的設(shè)計(jì),先利用模擬人工排課的快速排課方法快速生成初始課程表,再利用迭代逼近的深度優(yōu)化排課方法進(jìn)行深度優(yōu)化。該方法和系統(tǒng)能夠高效智能的生成完善的課程表,大大降低了學(xué)校排課任務(wù)的工作量。
本發(fā)明技術(shù)方案是,一種模擬人工排課的快速排課方法,包括:
步驟一:對(duì)數(shù)據(jù)庫中的班級(jí)、學(xué)科、課程、周課時(shí)、老師、教室等基礎(chǔ)數(shù)據(jù)和用戶設(shè)定的約束規(guī)則進(jìn)行預(yù)處理,生成一張排課用的基礎(chǔ)表:先對(duì)基礎(chǔ)數(shù)據(jù)進(jìn)行關(guān)聯(lián)生成基礎(chǔ)表,再根據(jù)用戶約束規(guī)則對(duì)基礎(chǔ)表中的標(biāo)記進(jìn)行更新。
步驟二:定義排課優(yōu)先規(guī)則,約束條件強(qiáng)的優(yōu)先,對(duì)各個(gè)班級(jí)、各個(gè)學(xué)科、各門課程進(jìn)行排課前的優(yōu)先級(jí)排序,生成排課優(yōu)先級(jí)順序表。
步驟三:從排課優(yōu)先級(jí)順序表中依次取出待排的班級(jí)和學(xué)科,先從排課用的基礎(chǔ)表中生成候選時(shí)間集,再按照約束規(guī)則在基礎(chǔ)表中選擇周課時(shí)對(duì)應(yīng)的時(shí)間集合,并將所選時(shí)間集合標(biāo)記更新至排課用的基礎(chǔ)表。這里,約束規(guī)則一方面根據(jù)用戶設(shè)定的“一定”>“盡量”>“無設(shè)定”,另一方面,在可選時(shí)間集合內(nèi),盡可能挑選比較分散的時(shí)間集合,如一周3節(jié)課,優(yōu)先選擇每天1節(jié)課且、不連續(xù)3天上課的時(shí)間集合。
步驟四:依次取出待排的班級(jí)和學(xué)科循環(huán)進(jìn)行步驟三,直到排課優(yōu)先級(jí)順序表中所有班級(jí)的學(xué)科排課完畢,該方法快速生成了初始課程表。
進(jìn)一步,本發(fā)明公開一種迭代逼近的深度優(yōu)化排課方法,包括:
步驟一:定義目標(biāo)評(píng)價(jià)函數(shù)f(S),初設(shè)總迭代次數(shù)c_a,初設(shè)未發(fā)生變更的次數(shù)c_b,用于新解舊解的比較依據(jù)及迭代終止條件。目標(biāo)評(píng)價(jià)函數(shù)f(S)綜合考慮未排學(xué)科課時(shí)數(shù)、課程均勻分布程度、老師上課均勻程度等因素。
步驟二:對(duì)課程表S0,隨機(jī)選擇某些班級(jí)的某些學(xué)科,依據(jù)模擬人工排序的快速排課方法,對(duì)這些學(xué)科進(jìn)行重排,獲得新的課程表S1。
步驟三:計(jì)算f(S0)與f(S1),若S1優(yōu)于S0,則用S1替換S0,若S1差于S1,則以極小概率a用S1替換S0。這里,以小概率的將差解替換優(yōu)解,可以跳出局部最優(yōu)的情況。
步驟四:重復(fù)上兩步(步驟二和步驟三),直到總迭代次數(shù)>c_a或者S0未發(fā)生變更的次數(shù)>c_b,則停止,最終S0為該學(xué)校的深度優(yōu)化課程表。
本發(fā)明公開一種高效智能的排課系統(tǒng),包括:數(shù)據(jù)源模塊、數(shù)據(jù)預(yù)處理模塊、模擬人工排課的快速排課模塊、迭代逼近的深度優(yōu)化排課模塊。
所述數(shù)據(jù)源模塊,用于錄入學(xué)校的基礎(chǔ)信息及用戶自定義的排課規(guī)則。學(xué)?;A(chǔ)信息包含學(xué)校信息、班級(jí)信息、老師信息、學(xué)科信息、課程信息、教室信息等等;用戶自定義的排課規(guī)則如某學(xué)科某時(shí)間一定、優(yōu)先或者不排課,某老師某時(shí)間是否排課,是否設(shè)置連堂課和合班課等等。
所述數(shù)據(jù)預(yù)處理模塊,對(duì)基礎(chǔ)數(shù)據(jù)進(jìn)行關(guān)聯(lián),生成排課用的基礎(chǔ)信息表,并根據(jù)用戶規(guī)則對(duì)基礎(chǔ)信息進(jìn)行標(biāo)記設(shè)定。其中包括兩個(gè)個(gè)子模塊:數(shù)據(jù)關(guān)聯(lián)子模塊、標(biāo)記設(shè)定子模塊。所述數(shù)據(jù)關(guān)聯(lián)子模塊,對(duì)基礎(chǔ)數(shù)據(jù)進(jìn)行關(guān)聯(lián),生成排課用的基礎(chǔ)信息表,包含班級(jí)、學(xué)科、老師、學(xué)科周課時(shí)數(shù)、上課時(shí)間段、連堂時(shí)間段、上下午時(shí)間段、標(biāo)記1、標(biāo)記2、…、標(biāo)記n、排課標(biāo)記等等。所述標(biāo)記設(shè)定子模塊,對(duì)用戶設(shè)定的“一定”、“盡量”、“一定不”進(jìn)行標(biāo)記,如默認(rèn)0,“一定”記為2,“盡量”記為1,“一定不”記為-1,對(duì)其他連堂課、合班課等規(guī)則采用類似的規(guī)則分別進(jìn)行標(biāo)記。通過所述兩個(gè)子模塊可以生成排課用的基礎(chǔ)信息表。
所述模擬人工排課的快速排課模塊,利用模擬人工排課的快速排課方法,快速生成盡可能滿足規(guī)則的課程表。
所述迭代逼近的深度優(yōu)化排課模塊,利用迭代逼近的深度優(yōu)化排課方法,對(duì)快速生成的課程表進(jìn)行深度優(yōu)化,迭代出一個(gè)最優(yōu)的課程表。
有益效果:本發(fā)明提出一種高效智能的排課方法,先利用模擬人工排課的快速排課方法快速生成初始課程表,再利用迭代逼近的深度優(yōu)化排課方法進(jìn)行深度優(yōu)化。本發(fā)明方法和系統(tǒng)能夠高效智能的生成完善的課程表,大大降低了學(xué)校排課任務(wù)的工作量,課程表的安排更加合理科學(xué)。
附圖說明
圖1是本發(fā)明實(shí)施例中的模擬人工排課的快速排課方法的流程示意圖。
圖2是本發(fā)明實(shí)施例中的迭代逼近的深度優(yōu)化排課方法的流程示意圖。
圖3是本發(fā)明實(shí)施例中的高效智能的排課系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施方式
以下結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步詳細(xì)說明。
在本發(fā)明中,在對(duì)學(xué)?;A(chǔ)數(shù)據(jù)進(jìn)行關(guān)聯(lián)、標(biāo)記等預(yù)處理后,通過模擬人工排課的快速排課方法快速生成初始課程表,再通過迭代逼近的深度優(yōu)化排課方法進(jìn)行深度優(yōu)化,迭代出一個(gè)完善的課程表,大大降低了學(xué)校排課任務(wù)的工作量。
參閱圖1所示,本發(fā)明實(shí)施例的模擬人工排課的快速排課流程,具體步驟為:
步驟11:對(duì)數(shù)據(jù)庫中的班級(jí)、學(xué)科、老師等基礎(chǔ)數(shù)據(jù)和用戶設(shè)定的約束規(guī)則進(jìn)行預(yù)處理,生成一張排課用的基礎(chǔ)表。先對(duì)基礎(chǔ)數(shù)據(jù)進(jìn)行關(guān)聯(lián)生成基礎(chǔ)表,再根據(jù)用戶規(guī)則對(duì)基礎(chǔ)表中的標(biāo)記進(jìn)行更新。在本發(fā)明實(shí)施例中,預(yù)處理后的排課基礎(chǔ)表字段包括:班級(jí)ID、學(xué)科ID、教師ID、學(xué)科周課時(shí)數(shù)、周-時(shí)段ID、周ID、時(shí)段ID、連堂課時(shí)段ID、上下午時(shí)段ID、優(yōu)先排標(biāo)記、連堂課標(biāo)記、最終排課標(biāo)記。其中:
●學(xué)科周課時(shí)數(shù):每個(gè)班級(jí)每個(gè)學(xué)科每周上的課時(shí)數(shù)
●關(guān)于時(shí)段相關(guān)ID:周ID為1~5,時(shí)段ID為1~n(n表示該班級(jí)每天n堂課),周-時(shí)段ID為周ID和時(shí)段ID的交叉集合(共5*n個(gè)時(shí)段集合),連堂課時(shí)段ID為1~3(若早上4節(jié)下午2節(jié)),上下午時(shí)段ID為1~2(1表示上午,2表示下午)
●關(guān)于優(yōu)先排標(biāo)記:-1~2,取值根據(jù)用戶設(shè)定的規(guī)則,2表示“一定排”,1表示“盡量排”,-1表示“一定不排”,用戶無設(shè)定規(guī)則時(shí)默認(rèn)0
●關(guān)于連堂課標(biāo)記:0~1,1表示連堂課方式上課,0表示無連堂課
●最終排課標(biāo)記:排課過程中更新,0表示未排,1表示已排
生成的基礎(chǔ)表中,每個(gè)班級(jí)每個(gè)學(xué)科每個(gè)時(shí)段均生成記錄,即每個(gè)班級(jí)每個(gè)學(xué)科5*n條記錄,優(yōu)先排標(biāo)記、連堂課等用戶規(guī)則標(biāo)記按用戶設(shè)定規(guī)則更新,最終排課標(biāo)記初始默認(rèn)為0,排課過程中更新。
步驟12:定義排課優(yōu)先規(guī)則,約束條件強(qiáng)的優(yōu)先,對(duì)各個(gè)班級(jí)各個(gè)學(xué)科進(jìn)行排課前的優(yōu)先級(jí)排序,生成排課優(yōu)先級(jí)順序表。在本發(fā)明實(shí)施例中,排課優(yōu)先級(jí)順序表字段包括:班級(jí)ID、學(xué)科ID、教師ID、學(xué)科周課時(shí)數(shù)、主副課標(biāo)記、優(yōu)先排標(biāo)記、連堂課標(biāo)記、老師周課時(shí)數(shù)、老師互斥標(biāo)記、教室數(shù)量、優(yōu)先排標(biāo)記計(jì)數(shù)、排序優(yōu)先級(jí)標(biāo)記。其中:
●主副課標(biāo)記:主課記為1,副科記為0
●老師周課時(shí)數(shù):每個(gè)老師每周上的課時(shí)數(shù)
●老師互斥標(biāo)記:部分老師不能同時(shí)上課,如存在互斥老師,則記為1,否則為0
●教室數(shù)量:學(xué)校能夠支持同時(shí)上課的教室數(shù)量
●優(yōu)先級(jí)標(biāo)記計(jì)數(shù):優(yōu)先排標(biāo)記>0的時(shí)段集合計(jì)數(shù)
●排序優(yōu)先級(jí)標(biāo)記:根據(jù)定義的排課優(yōu)先規(guī)則生成的排課優(yōu)先級(jí),在本發(fā)明實(shí)施例中按照如下規(guī)則:教室數(shù)量(升序)>連堂課標(biāo)記(倒序)>主副課標(biāo)記(倒序)>優(yōu)先排標(biāo)記(倒序)>優(yōu)先級(jí)標(biāo)記計(jì)數(shù)(升序)>老師互斥標(biāo)記(倒序)>老師周課時(shí)數(shù)(倒序)。
步驟13:從排課優(yōu)先級(jí)順序表中依次取出待排的班級(jí)和學(xué)科,先從排課用的基礎(chǔ)表中生成候選時(shí)間集,再按照約束規(guī)則選擇周課時(shí)對(duì)應(yīng)的時(shí)間集合,并將所選時(shí)間集合標(biāo)記更新至排課用的基礎(chǔ)表。在本發(fā)明實(shí)施例中,選擇時(shí)間集合的方法如下:
●將每天的可選時(shí)間集合按照優(yōu)先級(jí)標(biāo)記倒序,主課按照連堂課時(shí)段ID升序,副課按照連堂課時(shí)段ID倒序,再隨機(jī)排序,得到每天的有序可選時(shí)間集合;
●若學(xué)科周課時(shí)n=1,則隨機(jī)取一天的第一個(gè)時(shí)間;
●若學(xué)科周課時(shí)n=2,則隨機(jī)取非連續(xù)兩天的第一個(gè)時(shí)間;
●若學(xué)科周課時(shí)n=3,則隨機(jī)取非連續(xù)三天的第一個(gè)時(shí)間;
●若學(xué)科周課時(shí)n=4,則隨機(jī)取四天的第一個(gè)時(shí)間;
·若學(xué)科周課時(shí)n=5,則隨機(jī)取五天的第一個(gè)時(shí)間;
●若學(xué)科周課時(shí)n>5,則先取五天的第一個(gè)時(shí)間,再循環(huán)以上步驟。
步驟14:循環(huán)步驟13,直到排課優(yōu)先級(jí)順序表中所有班級(jí)的學(xué)科排課完畢,該方法快速生成了初始課程表。。
參閱圖2所示,本發(fā)明實(shí)施例的迭代逼近的深度優(yōu)化排課流程,具體步驟為:
步驟21:定義目標(biāo)評(píng)價(jià)函數(shù)f(S),總迭代次數(shù)c_a,解未發(fā)生變更的次數(shù)c_b,用于新解舊解的比較依據(jù)及迭代終止條件。目標(biāo)評(píng)價(jià)函數(shù)f(S)綜合考慮未排學(xué)科課時(shí)數(shù)、課程均勻分布程度、老師上課均勻程度等因素。在本發(fā)明實(shí)施例中,未排學(xué)科課時(shí)數(shù)為A,班級(jí)連續(xù)兩天上同一學(xué)科的課時(shí)數(shù)為B,老師每天課時(shí)數(shù)方差為C,f(S)=w1*A+w2*B+C。
步驟22:對(duì)課程表S0,隨機(jī)選擇某些班級(jí)的某些學(xué)科,依據(jù)模擬人工排序的快速排課方法,對(duì)這些學(xué)科進(jìn)行重排,獲得新的課程表S1。在本發(fā)明實(shí)施例中,每次選擇某些班級(jí)的某些學(xué)科,共計(jì)k=所有班級(jí)的所有課程數(shù)*20%個(gè)。
步驟23:計(jì)算f(S0)與f(S1),若S1優(yōu)于S0,則用S1替換S0,若S1差于S1,則以極小概率a用S1替換S0。這里,以小概率的將差解替換優(yōu)解,可以跳出局部最優(yōu)的情況。
步驟24:重復(fù)上兩步(22-23),直到總迭代次數(shù)>c_a或者S0未發(fā)生變更的次數(shù)>c_b,則停止,最終S0為該學(xué)校的深度優(yōu)化課程表。
參閱圖3所示,本發(fā)明實(shí)施例的系統(tǒng)結(jié)構(gòu),包括:
數(shù)據(jù)源模塊31、數(shù)據(jù)預(yù)處理模塊32、模擬人工排課的快速排課模塊33、迭代逼近的深度優(yōu)化排課模塊34。
數(shù)據(jù)源模塊31,用于錄入學(xué)校的基礎(chǔ)信息及用戶自定義的排課規(guī)則。學(xué)?;A(chǔ)信息包含學(xué)校信息、班級(jí)信息、老師信息、學(xué)科信息、課程信息、教室信息等等;用戶自定義的排課規(guī)則如某學(xué)科某時(shí)間一定、優(yōu)先或者不排課,某老師某時(shí)間是否排課,是否設(shè)置連堂課和合班課等等。
數(shù)據(jù)預(yù)處理模塊32,對(duì)基礎(chǔ)數(shù)據(jù)進(jìn)行關(guān)聯(lián),生成排課用的基礎(chǔ)信息表,并根據(jù)用戶規(guī)則對(duì)基礎(chǔ)信息進(jìn)行標(biāo)記設(shè)定。其中包括兩個(gè)個(gè)子模塊:數(shù)據(jù)關(guān)聯(lián)子模塊321、標(biāo)記設(shè)定子模塊322。
數(shù)據(jù)關(guān)聯(lián)子模塊321,對(duì)基礎(chǔ)數(shù)據(jù)進(jìn)行關(guān)聯(lián),生成排課用的基礎(chǔ)信息表,包含班級(jí)ID、學(xué)科ID、教師ID、學(xué)科周課時(shí)數(shù)、周-時(shí)段ID、周ID、時(shí)段ID、連堂課時(shí)段ID、上下午時(shí)段ID、優(yōu)先排標(biāo)記、連堂課標(biāo)記、最終排課標(biāo)記。
標(biāo)記設(shè)定子模塊322,對(duì)用戶設(shè)定的“一定”、“盡量”、“一定不”進(jìn)行標(biāo)記,默認(rèn)0,“一定”記為2,“盡量”記為1,“一定不”記為-1,連堂課有設(shè)定記為1,無設(shè)定記為0,最終排課標(biāo)記初始化為0。
模擬人工排課的快速排課模塊33,利用模擬人工排課的快速排課方法,快速生成盡可能滿足規(guī)則的課程表。
迭代逼近的深度優(yōu)化排課模塊34,利用迭代逼近的深度優(yōu)化排課方法,對(duì)快速生成的課程表進(jìn)行深度優(yōu)化,迭代出一個(gè)最優(yōu)的課程表。
以上所述僅為本發(fā)明專利的一種實(shí)施例而已,并不用以限制本發(fā)明專利,凡在本發(fā)明專利的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均以包含在本發(fā)明專利的保護(hù)范圍之內(nèi)。