约束粒度可控的排课方法及系统技术领域
本发明属于教学管理领域,具体涉及一种约束粒度可控的排课方法及系统。
背景技术
现有的排课方法,不论是人工排课还是计算机自动排课,都是处理教师、教室或场
地、班级等资源冲突问题。
在大学和大型中学,由于人员极多,人工排课越来越无法施行。必须借助自动排课
算法。
现有的自动排课算法,主要是基于规则和约束条件的贪婪算法、回溯算法、动态规
划法和遗传算法等。但这些方法都有一定缺陷。比如回溯算法,其相当于先根遍历,空间复
杂度,特别是时间复杂度非常大。而且算法本身复杂,变量多,在约束条件太苛刻时无可行
解。贪心算法虽然时间复杂度比较低,但是比较容易出现局部最优,也可能找不到可行解。
遗传算法需要通过生成大量的初始值后再不断的优胜劣汰,需要消耗大量的空间,而没有
主动依据条件生成课表,存在一定的随机性,也导致大量时间的浪费。
发明内容
本发明提供了一种约束粒度可控的排课方法及系统,以解决现有的自动排课算法
复杂度高、效率低且准确率不高的问题。
为解决上述技术问题,本发明的约束粒度可控的排课方法为:
1)计算课元组的空闲时间,当空闲时间的空余周课时大于课元组的周课时,查找
最优的排课时间;
2)在最优排课时间BT内计算最合适的排课教室,若存在最合适的排课教室,则课
元组排课成功;
3)否则,对课元组进行冲突处理,若冲突处理成功,则课元组排课成功,否则,将该
课元组排课失败;
4)当所有课元组排课完成后,对排课失败课元组,调整约束粒度返回步骤1)重新
排课或进行手动调整。
所述最优排课时间的计算方法包括以下步骤:
A)计算课元组的上课性质CP、周课时CT及一周内的排课次数N;
B)在全局设置中查找符合属性(CP,CT,N)的课元组最优排课时间序列BT′=[(D1,
H1),(D2,H2),…,(DN,HN)],(D1,D2,…,DN)为一周内上课天数的最优序列,(H1,H2,…,HN)
为一天内上课节数的最优序列;
C)若时间片(D1,H1)包含在空闲时间内,计算在该时间片下,上课教师和上课班级
的时间均匀分布程度,当时间均匀分布程度高于预设值,则获得最优排课时间BT=(D1,
H1),查找结束;若时间片(D1,H1)不在空闲时间内或时间均匀程度低于预设值,判断下一个
时间片是否为最优排课时间。
所述最合适的排课教室的计算方法包括以下步骤:
a)计算课元组的上课校区CA、上课教室类型CL及上课教室大小CS;
b)查找符合课元组属性(CA,CL,CS)的教室列表,从教室列表中选取优先级最高的
教室,计算该教室在课元组的上课起始周内的空闲时间表,当空闲时间表与最优排课时间
逻辑与后等于最优排课时间,则该教室为最合理的上课教室,否则,判断下一个教室是否为
最合理的上课教室。
步骤3)中对课元组进行冲突处理的方法包括以下步骤:
Ⅰ)将需要冲突处理的课元组压入堆栈,并查找该课元组的相关课元组,将相关课
元组按优先级从低到高加入到队列Queue,并记录需要冲突处理的课元组为相关课元组的
父课元组;
Ⅱ)取队列Queue中的首课元组,将其进行重新排课,排课成功,对其父课元组进行
重排,排课成功,则冲突处理成功;否则,将首课元组的相关课元组加入队列Queue,将首课
元弹出队列并压入堆栈;
Ш)重复步骤Ⅱ),当父课元组出栈且重排成功,则冲突处理成功。
所述初始输入数据包括全局设置、班级信息、教室信息、教师信息、课元组信息、课
程信息、教室约束、教师约束和课元组约束。
本发明的约束粒度可控的排课系统包括自动排课单元及调整单元,所述自动排课
单元包括最优排课时间计算模块、最合适排课教室计算模块、冲突处理模块;所述调整单元
包括重新调整约束粒度模块或手动调整模块;
所述自动排课单元用于按优先级高低对课元组排序,根据初始输入数据,从优先
级最高的课元组开始依次进行排课;
所述最优排课时间计算模块用于计算课元组的空闲时间,当空闲时间的空余周课
时大于课元组的周课时,查找最优的排课时间;
所述最合适排课教室计算模块用于在最优的排课时间BT内计算最合适的排课教
室;
所述冲突处理模块用于对课元组进行冲突处理。
所述最优排课时间计算模块的计算方法包括以下步骤:
A)计算课元组的上课性质CP、周课时CT及一周内的排课次数N;
B)在全局设置中查找符合属性(CP,CT,N)的课元组最优排课时间序列BT′=[(D1,
H1),(D2,H2),…,(DN,HN)],(D1,D2,…,DN)为一周内上课天数的最优序列,(H1,H2,…,HN)
为一天内上课节数的最优序列;
C)若时间片(D1,H1)包含在空闲时间内,计算在该时间片下,上课教师和上课班级
的时间均匀分布程度,当时间均匀分布程度高于预设值,则获得最优排课时间BT=(D1,
H1),查找结束;若时间片(D1,H1)不在空闲时间内或时间均匀程度低于预设值,判断下一个
时间片是否为最优排课时间。
所述最合适的排课教室计算模块的计算方法包括以下步骤:
a)计算课元组的上课校区CA、上课教室类型CL及上课教室大小CS;
b)查找符合课元组属性(CA,CL,CS)的教室列表,从教室列表中选取优先级最高的
教室,计算该教室在课元组的上课起始周内的空闲时间表,当空闲时间表与最优排课时间
逻辑与后等于最优排课时间,则该教室为最合理的上课教室,否则,判断下一个教室是否为
最合理的上课教室。
所述冲突处理模块对课元组进行冲突处理的方法包括以下步骤:
Ⅰ)将需要冲突处理的课元组压入堆栈,并查找该课元组的相关课元组,将相关课
元组按优先级从低到高加入到队列Queue,并记录需要冲突处理的课元组为相关课元组的
父课元组;
Ⅱ)取队列Queue中的首课元组,将其进行重新排课,排课成功,对其父课元组进行
重排,排课成功,则冲突处理成功;否则,将首课元组的相关课元组加入队列Queue,将首课
元弹出队列并压入堆栈;
Ш)重复步骤Ⅱ),当父课元组出栈且重排成功,则冲突处理成功。
本发明的排课方法和系统首先通过自动排课模块生成理想约束条件下的最优课
表,然后进入调整模块,通过人工对课表的分析或排课系统对课元组未排原因提示,重新调
整约束条件,再次调用自动排课模块对剩余未排课元组进行新一轮的排课,以此多次迭代,
最终生成在多种约束条件嵌套下的交互优化课表。本发明的方法和系统能够适应多种排课
约束粒度嵌套,教学资源复杂以及教学任务巨大的排课数据,并且提高了排课的效率和准
确率,降低了计算复杂度。
附图说明
图1为本发明交互优化排课算法总流程图;
图2为本发明自动排课模块流程图;
图3为本发明计算最优的排课时间流程图;
图4为本发明计算最合理的上课教室流程图;
图5为本发明处理冲突算法流程图;
图6(a)为本发明课元组A为根节点的相关课元组树;
图6(b)为本发明Queue和Stack的状态图。
具体实施方式
下面结合附图对本发明的技术方案作进一步详细介绍。
首先对课表进行数学表述。
1、课元组:课元组是每个学期教学单位开设的教学任务,下面是课元组的结构类
型定义:
CT={教师集合,班级集合,课程号,起始周,周课时,上课人数,课元组优先级,课
程性质,是否为强化周标志,总课时,开课学院,上课校区,上课教室要求,上课时间要求,安
排教室,安排时间}
2、相关课元组:设A,B都是待排课元组,若A和B为相关课元组,则A和B有如下关系:
1)若则A和B为老师相关。
2)若则A和B为班级相关。
3)若则A和B为时间相关。
3、课元组优先级:设A,B都是待排课元组,则A和B的优先级关系如下:
(1)若课元组A为强化周课,B不是强化周课,则A优先。如果A和B都为强化周课或者
都不为强化周课,则按照(2)。
(2)若课元组A中的课元组优先级字段大于课元组B中的课元组优先级字段,则A优
先。若等于,则按照(3)
(3)若课元组A中给定的第一个教师的优先级别大于课元组B中给定的第一个教师
的级别优先级别,则A优先。若等于,则按照(4)
(4)若课元组A中上课班级个数为Aclass,课程类型为Acourse,周课时数Acourse_
time,上课教师个数Ateache,课元组B中排课的班级数为Bclass,课程类型为Bcourse,周课
时数Bcourse_time,上课教师数Bteacher,再通过全局设置中预设的系数c1,c2,c3,c4计算
出F1和F2,计算公式如下:
若F1大于等于F2,则A优先,否则B优先。
4、时间片和时空片:在一周内的某一大节称为时间片。每一个时间片和该时间片
对应的上课地点称作时空片。
5、时间表:为了提高排课效率,时间表用二进制表示,把3个Int型的整数表示一周
内的空闲时间,其中每两位二进制表示一个时间片,“11”表示空闲,“00”表示非空闲。另外,
3个整数只取每个整数的低28位二进制为有效位,那么3个整数一共能够表示(3*28)/2=42
个时间片。
排课是以课元组为单位进行,排课的实质是为每个课元组安排其上课的时空片,
但是每一个课元组可能需要安排多个时空片。在排课过程中必须要满足一些约束条件,称
之为排课约束,排课约束分为硬约束和软约束。其中硬约束代表必须满足的条件,而软约束
是为了使课表更加合理化,人性化。
在排课过程中的必须要满足的硬约束为:
1)每一个班级在同一个时间片内只能上一门课。
2)每一个教师在同一个时间片内只能上一门课。
3)在每一个时空片内,上课地点的容量必须大于上课人数。
4)在连续的两个时间片之间的时间间隔大于班级更换教室的时间。
5)在连续的两个时间片之间的时间间隔大于教师更换教室的时间。
6)一个课元组包含多个上课班级时,该课元组对每个班级安排的时空片应该一
致。
7)一个班级分若干个小班上课时,每个小班的课表不能与对应班级课表冲突。
在排课过程中,为了使课表更合理,更优化,设置了软约束,软约束包括教师约束、
教室约束、课程约束和课元组约束。
教师约束包括:
1)教师尽量上课时间片,教师尽量不上课时间片以及教师一定不上课时间片(其
中每个时间片能够精确到第几周的第几大节)。
2)每一个教师每周的上课的总课时上限。
3)教师的在一周内的上课时间片尽量分布均匀。
4)尽量使教师在连续两个时间片之间在同一个教室上课。
教室约束包括:
1)教室尽量上课时间片,教室尽量不上课时间片以及教室一定不上课时间片(其
中每个时间片能够精确到第几周的第几大节)。
2)教室尽量安排在课元组的开课学院的教室。
3)在同一时间片内,教室容量大于上课人数并尽量接近上课人数。
课程约束包括:
1)课程尽量上课时间片,课程尽量不上课时间片以及课程一定不上课时间片(其
中每个时间片能够精确到第几周的第几大节)。
2)对于动脑比较多的课,尽量安排在上午,体育课不应该安排在上午第一大节,必
修课尽量安排在白天,选修课尽量安排在晚上。
课元组约束包括:
1)对于一周内需要安排两个或两个以上时空片的课元组,课元组的各个时空片之
间尽量有一定的时间间隔。
2)对于周课时是奇数的课元组,应该尽量分单双周进行排课。
3)对于有些课元组既有理论课也有实践课,应该尽量让理论课与实践课交替安
排,并且先上理论课,再上实践课,以此交替。
4)应该尽量满足部分课元组一次连排多个时间片的要求。
本发明的约束粒度可控的排课方法实施例
基于上述基本概念,本实施例的排课方法为按优先级高低对课元组排序,根据初
始输入数据,从优先级最高的课元组开始依次进行排课,如图2所示:
1)计算课元组的空闲时间,当空闲时间的空余周课时大于课元组的周课时,查找
最优的排课时间;
2)在最优排课时间BT内计算最合适的排课教室,若存在最合适的排课教室,则课
元组排课成功;
3)否则,对课元组进行冲突处理,若冲突处理成功,则课元组排课成功,否则,排课
失败,将该课元组加入排课失败课元组序列;
4)当所有课元组排课完成后,对排课失败课元组,调整约束粒度返回步骤1)重新
排课或进行手动调整。
下面对上述各个步骤进行详细介绍:
初始输入数据包括(全局设置,班级信息,教师信息,教师约束,课程信息,课程约
束,教室信息,教室约束,课元组信息,课元组约束)。
当自动排课结束时,如果没有剩余不能安排的课元组,执行手动调整模块。如果有
剩余不能安排的课元组,可选择执行手动调整模块,亦可选择重新调整约束粒度模块,调用
自动排课模块安排剩余不能安排的课元组;最后,执行数据输出模块,输出数据包括教师课
表,班级课表,课程课表,教室课表。
所有待排课元组集合记作CourseTuple={Cr|Cr是CT的变量,CT是课元组类型},
假定用Constrait={C|C是老师约束,课程约束,教室约束或课元组约束}描述排课约束集
合,把参与排课的教室集合,时间片集合记作Room={R|R为所有待排教室},Time={T|T为
所有能排时间片}。接着F(CourseTuple,Classroom,Time)→CourseTable定义为生成课表
的函数,将生成的课表记作CourseTable。W(CourseTable,Constrait)定义为衡量课表合理
程度的标准函数,那么得到最合理的课表,则需要求出课表X,使其有如下关系:
W(X,Constrait)>=Max{W(CourseTablej,Constrait)}其中CourseTablej∈
CourseTable,j=1,2,3...
通过分析F(CourseTuple,Classroom,Time)→CourseTable和W(CourseTable,
Constrait)函数,不难看出,当输入值课元组集合CourseTuple与约束集合Constrait固定
时,影响课表优劣的是Classroom,Time变量。所以排课的问题也就简化成查找最合适的时
空集合,自动排课过程主要包含三个部分:
1、查找最优的上课时间片集合BT。
最优的排课时间受课程性质、课程周课时、一周内的排课次数N以及上课教师意愿
排课时间等能用数据结构表示的因子影响,同时考虑到上课教师和上课班级的上课时间分
布情况等不能用机器描述的因子影响,综合所有因素,就能找到最优的上课时间片集合BT。
在此过程中,其关键问题是怎么更好的表示和计算上课教师,上课班级的共同空余时间。为
了使排课算法效率更高、扩展性更强,排课算法使用了全新的表示时间的数据结构
(newStruct),而不是使用传统的时间表示法(oldStruct)。下面是两种数据结构的对比:
假设一个学期一共有n周,一周共上课m天,一天共上课k大节。
(1)oldStruct是利用数组表示一周的上课时间,例如12代表星期一的第二大节,
则要表示一个学期的时间需要空间复杂度是M(n*m*k)。而若要得到x个班级在一个学期内
共同空余的时间表,则需要的时间复杂度最少是O(n*m*k*x)。另外,当删除或增加一个时间
片时,就要从数组中删除一个元素,那么时间复杂度就是O(L),其中L为数组长度。
(2)newStruct利用3个int型整数表示一周上课的时间,其中3个整数用二进制表
示时每个整数的低28位是有效的,且每两位二进制表示一个时间片也就是一个大节,然后
用“11”表示时间片空闲,“00”表示时间片非空闲。可见用newStruct表示一学期内的时间表
的空间复杂度为M(n*3)。计算x个班级在一个学期内共同空余的时间表,只需要对时间进行
逻辑“与”运算,其时间复杂度为O(n*3)。另外,当删除或增加一个时间片时,只要对时间进
行逻辑“与”或逻辑“或”运算,所用的时间复杂度为O(1)。
显然,当m与k增加时,newStruct时间复杂度与空间复杂度不会受到影响,而传统
数据结构的时空复杂度成倍增长。此外,当学校有需要按照半个时间片(小节)排课时,因为
newStruct两位表示一个时间片,所有不需要做任何改动就能完全满足,而oldStruct需要
重新扩展2倍的时空复杂度,这充分说明了newStruct有更强的扩展性。
图3给出了一种计算最优的排课时间的实施例。首先,计算课元组的上课性质CP,
周课时CT以及一周内的排课次数N;然后,在全局设置中查找符合该课元组属性的最优上课
天序列(D1,D2,…,DN)和最优节次序列(H1,H2,…,HN);若最优天序列和最优节次序列为
空,则返回NULL,找不到最优排课时间,否则将最优天序列和最优节次序列组装成N个时间
片(D1,H1),(D2,H2),…,(DN,HN),计算出最优排课时间BT;接着,将BT与空闲时间表T进行
逻辑“与”运算,若BT不是在空闲时间内,则重新计算下一个次优排课时间,否则计算添加BT
上课时间后,上课教师和上课班级的时间均匀分布程度,若均匀分布程度小于最低预设值,
则重新计算下一个次优排课时间,否则返回最优排课时间BT。
2、查找在最优的排课时间片BT内,最合适的上课教室集合BR。
教室的选择受到上课校区、教室类型、上课人数、开课学院,以及教师和班级与BT
相邻的时间片内的上课教室等因素的影响。为了进一步提高排课算法效率,将教室按照上
课校区,教室类型,上课人数3个属性进行分类储存,这样能够更快定位到需要的教室。然
后,当找到了合适的教室时,把此教室移到储存此类教室链表的尾部,如此一来,当下次再
需要此类教室时,大大的提高了命中合适教室的命中率。为了提高上课教室的合理度,在查
找教室时,首先查找到按上课校区,教室类型,上课人数3个属性进行分类储存的教室链表
classroom_list,需要将classroom_list按教室优先级排序,具体如下:
(1)上课教师和班级与BT相邻的时间片内的上课教室与最合适的上课教室BR之间
的距离,距离越近优先级越高。
(2)开课学院的教室优先级高于其他学院的教室。
(3)在教室容量classroom_size大于上课人数student_number前提下,|
classroom_size-student_number|越小优先级越高。
图4给出了一种计算最合适的上课教室的实施例。其主要过程是:首先,计算课元
组的上课校区,上课教室类型,上课教室大小;然后,根据课元组的这些属性找到符合课元
组要求的教室列表classroom_list,并按照教室优先级关系排序;接着,取教室列表中的第
一个教室BR,若BR为空,则返回NULL,找不到合适的教室,否则计算教室的空闲时间表BRT;
再最优排课时间BT与BRT进行逻辑“与”运算,若BRT&BT==BT,则将教室移动到classroom_
list的尾部,返回BR,否则重新计算下一个合理的教室。
3、当(BT,BR)时空片为空时,调用回溯法进行冲突处理(图5)
当课元组A发生排课冲突时,以课元组A为第一个节点,以其已排相关的课元组为
第二层节点,其中同一父节点的儿子节点从左到右按照课元组的优先级从小到大的顺序排
列,然后按照同样的方式以第二层节点的相关课元组构成第三层节点,以此类推,构成以课
元组A为根节点的相关课元组树(如图a)。
设队列Queue是由回溯过程中相关课元组构成的,同时将已经回溯重排的课元组
压入堆栈Stack,通过堆栈的预设最大深度值StackDepth来阻止回溯的雪崩的发生。
1)首先,将课元组A压入堆栈Stack,将课元组A的相关课元组(B,C,D,E)入队列
Queue。
2)取队首课元组B进行重排,若不成功,则将课元组B的相关课元组(F,G)入队列
Queue,同时将课元组B弹出队列Queue并压入堆栈Stack,此时Queue和Stack的状态如图b所
示。
3)以此类推,当重排Z成功,且若Z不是栈底课元组,则堆栈Stack连续出栈,直到Z
的父节点Y弹出为止,然后对Y进行再次重排,若成功,则再将Y的父节点进行重新排课,以此
类推;若重排不成功,则将Stack恢复到最后一次课元组压入时的状态,再弹出Queue队首课
元组继续回溯…..。若课元组A重排成功,则回溯结束。若Queue为空且课元组A未重排成功,
或Stack的深度大于StackDepth时,则回溯结束,课元组A处理冲突不成功。
设待排课元组数为N。最好的结果当然是不经过冲突处理即安排成功。最坏情况
下,每个课元组都需经过回溯,当开始对某一课元组A进行回溯时,生成一新的空堆栈
Stack,将A压入Stack;无论回溯A过程中是否涉及到要对其他课元组进行回溯,使用的都是
同一个Stack。同样考虑最坏的情况,即从Queue中往Stack中每增加一个课元组之前,该个
课元组都重排成功,因此需对Stack中该课元组结点的父结点进行重排;最坏的情况是
Stack中每个结点刚好有一个儿子结点,因此Stack中相临元素都是父子关系;且设除栈底
元素外重排都成功,这样在Stack中增加第k个课元组时需重排的课元组数最大,为k-1个。
因此每安排一个课元组(无论成功与否),重排的课元组数不多于(StackDepth*
(StackDepth-1)/2)个。因此,安排N个课元组所耗计算量不会多于在无冲突情况下安排N*
(StackDepth*(StackDepth-1)/2)个课元组的计算量。在实际中,只会在排课的后期才会出
现大量的冲突回溯,而且,对Stack深度的限制很好的控制了回溯的扩张,提高了效率。
图5给出了处理冲突方法的一种实施例。
下面是排课处理冲突处理例证:
例如目前班级:CLASS67的课表如表1所示:可以看出星期四第一大节的时间片已
经被占用。
表1班级CLASS67的课表
教师:T0087的课表如表2所示:教室的周二与周四的时间片也已经被占用。
表2教师T0087的课表
教室:CR0446的课表如表3所示:教室的空闲时间片较多。
表3教室CR0446的课表
如表4所示,现有一门课程:课程ID为:COU0122课程名:食品分析授课教师ID:
T0087授课教师名:萧寒所需教室类型为:多媒体教室
表4
经过计算得出该课程的最优排课时间为周二第一大节与周四第一大节。而此时班
级与教师的时间均有冲突,所以对其进行冲突处理。将冲突课程(COU0122)进行压栈操作,
如表5所示。并将相关课程COU1262、COU1082进行入队操作,如表6所示,对课程COU1262、
COU1082进行重排,如果重排成功则将COU0122排在周二第一大节与周四第一大节。如果课
程COU1082重排没有合适时间,则将COU1082进行压栈并将与COU1082相关的课程进行入队
重排…….
表5压栈操作
表6入队操作
最终得到的课表,如表7-9所示:
表7班级课表
表8教室课表
表9教师课表
本发明的约束粒度可控的排课系统实施例
本实施例系统包括自动排课单元及调整单元,所述自动排课单元包括最优排课时
间计算模块、最合适排课教室计算模块、冲突处理模块;所述调整单元包括重新调整约束粒
度模块或手动调整模块;
所述自动排课单元用于按优先级高低对课元组排序,根据初始输入数据,从优先
级最高的课元组开始依次进行排课;
所述最优排课时间计算模块用于计算课元组的空闲时间,当空闲时间的空余周课
时大于课元组的周课时,查找最优的排课时间;
所述最合适排课教室计算模块用于在最优的排课时间内计算最合适的排课教室;
所述冲突处理模块用于对课元组进行冲突处理。
其中,自动排课单元的排课流程如图2所示:首先,将所有课元组放入优先队列
CourseTuple;当优先队列为空时,自动排课结束,否则取队首课元组A;然后,计算课元组A
的空闲时间T,根据空闲时间T,查找到最优的排课时间BT(图3);接着,计算在BT时间内,最
合适的上课教室BR(图4);若(BT,BR)时空片不为空,则课元组A安排成功,更新时间与课表。
否则对课元组A进行冲突处理,若处理冲突成功,则课元组A安排成功,更新时间与课表,若
处理冲突失败,则课元组A安排失败,添加课元组A不能排的原因;然后,将课元组A弹出优先
队列,取下一个课元组。
最优排课时间计算模块的计算方法为:
1)计算课元组的上课性质CP、周课时CT及一周内的排课次数N;
2)在全局设置中查找符合属性(CP,CT,N)的课元组最优排课时间序列BT′=[(D1,
H1),(D2,H2),…,(DN,HN)],(D1,D2,…,DN)为一周内上课天数的最优序列,(H1,H2,…,HN)
为一天内上课节数的最优序列;
3)若时间片(D1,H1)包含在空闲时间内,计算在该时间片下,上课教师和上课班级
的时间均匀分布程度,当时间均匀分布程度高于预设值,则获得最优排课时间BT=(D1,
H1),查找结束;若时间片(D1,H1)不在空闲时间内或时间均匀程度低于预设值,判断下一个
时间片是否为最优排课时间。
最合适的排课教室计算模块的计算方法为:
1)计算课元组的上课校区CA、上课教室类型CL及上课教室大小CS;
2)查找符合课元组属性(CA,CL,CS)的教室列表,从教室列表中选取优先级最高的
教室,计算该教室在课元组的上课起始周内的空闲时间表,当空闲时间表与最优排课时间
逻辑与后等于最优排课时间,则该教室为最合理的上课教室,否则,判断下一个教室是否为
最合理的上课教室。
冲突处理模块进行冲突处理的方法为:
1)将需要冲突处理的课元组压入堆栈,并查找该课元组的相关课元组,将相关课
元组按优先级从低到高加入到队列Queue,并记录需要冲突处理的课元组为相关课元组的
父课元组;
2)取队列Queue中的首课元组,将其进行重新排课,排课成功,对其父课元组进行
重排,排课成功,则冲突处理成功;否则,将首课元组的相关课元组加入队列Queue,将首课
元弹出队列并压入堆栈;
3)重复步骤2),当父课元组出栈且重排成功,则冲突处理成功。
当自动排课结束时,如果没有剩余不能安排的课元组,执行手动调整模块。如果有
剩余不能安排的课元组,可选择执行手动调整模块,亦可选择重新调整约束粒度模块,调用
自动排课模块安排剩余不能安排的课元组;最后,执行数据输出模块,输出数据包括教师课
表,班级课表,课程课表,教室课表。
以上给出了具体的实施方式,但本发明不局限于所描述的实施方式。本发明的基
本思路在于上述基本方案,对本领域普通技术人员而言,根据本发明的教导,设计出各种变
形的模型、公式、参数并不需要花费创造性劳动。在不脱离本发明的原理和精神的情况下对
实施方式进行的变化、修改、替换和变型仍落入本发明的保护范围内。