排课冲突检测的设计及实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

排课冲突检测的设计及实现

摘要:排课是高校一项重要而繁琐的教务工作,使用计算机排课是必然的选择,在排课系统中冲突检测算法的设计是关键,目前对于上课时段重叠、周次自由设置的排课冲突检测研究较少。结合宁波电大课表编排的特点,提出了降低问题空间纬度进行冲突检测的算法,该算法在实际使用中有较好的效果。

关键词:排课;冲突检测

0 引言

电大系统生源的种类较多,有高职生、脱产成教学生、在职开放生、在职研究生等,各类学生对上课时间有不同的要求,加上各门课程不同的教学需求,因此电大与普通高校的排课有所不同,以宁波电大为例,排课有下列特点:

(1)上课时段有重叠,现有的上课时段有8个:上午1-2节、上午3-4节、上午1-4节、下午5-6节、下午5-7(13:00开始)节、下午5-7节(13:40开始)、晚上,另外还有非以上情况的自由设置时段。在上述时段中,上午1-4节与上午另外两个时段有重叠,下午的3个时段也有重叠。

(2)上课周次设置灵活,周次设置不是普通高校课表中的单周、双周和全周3种情形,而是形如“1,3-8”的周次序列,一个课程安排(以下简称课元)的上课周次可以自由设置。

(3)同一班级同一课程可能由多名教师在不同的时间和不同的教室授课,因此一个教学班的一门课程安排可能包括多个课元。

由于上述原因,为普通高校排课系统设计的冲突检测方法根本不适用,采用全自动排课很难表述这种特殊性要求,实现起来比较困难,因此,宁波电大排课系统采取半自动排课方式,课表编排手工输入,而每当更改排课元素时,系统自动进行排课冲突检测,当所有课表编排都没有冲突时,所得课表就是一份没有冲突的有效课表。

1 排课冲突检测算法设计

1.1 排课冲突介绍

排课问题是满足教学计划和各种约束条件的组合规划问题,约束条件就是要避免课元的各排课元素之间存在冲突,排课元素包括课程、时间、教师、教室和班级,在冲突检测中,必须要满足的基本约束条件有:①教师不冲突,同一时间,一个教师只能给一个班级上课;②教室不冲突,同一时间,一个教室不能安排两门不同的课程;③班级不冲突,同一时间不能给同一班级安排

两门不同的课程。

在排课冲突检测中还有一些其它的约束条件也要满足,例如上课的班级人数必须小于教室座位数等,本文不做考虑。

1.2 冲突检测算法的概念设计

考虑到上课时间可以细分为周次、星期和上课时段,一个教学班一门课程安排的课表问题空间T可表示为:T=P×C×Z ×W×S,P

C Z

W为星期集合,具体为“周一”、“周二”…“周日”;S

上述的8个上课时段。

课元a对应T中的一个向量,记做a=(pα,cβ,z γ,wδ,sκ),其中pα∈P,cβ∈C,zγ∈Z,wδ∈W,sκ∈S。假设课表P有n条记录,为了检测课元a与课表P是否有冲突,那么系统要进行n

排课的5个元素,而每当排课元素修改后,系统都要进行冲突检测,那么系统运行效率会很低。考虑到教师冲突、教室冲突、班级课程冲突都是因为课元所选的教师、教室、班级没有空闲时间,它们都与时间关系密切,排课冲突检测的关键就是时间的冲突检测。因此可以采取固定几个排课元素,缩小问题空间维度的方法进行检测,具体就是,固定课元中除周次外的4个排课元素,从课表中筛选有可能存在冲突的待检测数据集,然后将课元中的周次和

待检测数据集中的周次进行冲突检测,如果周次有冲突,则该课元与课表有冲突,否则,该课元与课表没有冲突。

在课表P中筛选出与课元a有可能冲突的待检测数据集Y :

设a=(p,c,z,w,s),则Y={t|t∈P,(t.p=a.p 或t.c=a.c)且t.w=a.w 且t.s与a.s时间冲突},其中“.”表示向量的分量,t.p 表示课元t的教师(p)

有效课表P不冲突可表示为: P T且a∈P,b∈P,a≠b有a与b

1.3 上课时段冲突检测

在上述上课时段中,上午1-4节与上午1-2节、上午3-4节冲突,下午5-6节、下午5-7(13:40开始)节和下午5-7节(13:00开始)冲突。为了判断上课时段是否有冲突,对上课时段的编码设计如表1所示:

1.4 周次冲突检测

设一个学期有20周,课元的周次设置可以用一个20位的二进制数z表示,z的位数对应周次,z数位上的值表示有无课程安排,“1”表示有课程安排,“0”表示无课程安排,例如,周次设置“1-2,15,20”的二进制编码为:

判断一个课元a与待检测数据集Y的周次设置是否存在冲突,可采取下列方法:

a.z∧(y 1.z V y 2.z V y 3.z V …V y n.z )

0 a与Y有冲突0 a与Y没有冲突

其中 a.z表示课元a周次设置的二进制编码,其余符号类似地表示数据集Y

1.5 算法流程图

在上述基本概念的基础上,排课冲突检测算法的流程。

2 实现

宁波电大排课系统采用B/S结构,选用Visual 2008开发平台,开发语言开发,系统开发采用面向对象的技术,数据访问技术选用。

2.1 排课页面

排课页面如图2所示,该图显示经管系对课程“会计”进行课表编排,该门课程有两个教学班,教学班各有1、2个课元,其中教学班1有排课冲突。在该页面中用户可以增删教学班,教学班中的课元也可增删,课元的排课元素除了周次和非固定时段是直接输入外,其余排课元素都为下拉列表,下拉列表数据来自对应的数据表。如果排课没有冲突,在总课时栏会显示总的课时,否则显示冲突的详细信息。

页面中教学班和教学班内的课元由具有主细关系的Repeate 和GridView两个控件表示,Repeate控件负责显示教学班、Gridview控件负责显示教学班内的课元,表格的内容和样式在控件单元格数据绑定的事件中编程控制。每当排课元素修改后,页面将自动刷新,重新进行冲突检测,返回冲突的结果。

2.2 数据库的逻辑设计

数据表中存储了排课信息和各类排课基础信息,为了保证冲突检测时排课元素的唯一性,对排课元素记录进行自动编码,在课元表中保存的是排课元素的ID号,冲突检测以ID为准,教学班与课元是一对多的关系,通过关键字“教学班ID”关联。数据表关系如图3所示。

2.3 冲突检测类

冲突检测由自定义类GetDayFromStr实现,类中包含用来设置课元排课元素的方法,在设置了待检测教学班的排课元素后,调用方法GetCount()实现冲突检测。GetCount()方法在不存在排课冲突的情况下,返回周次序列所表示的课时数,否则,将冲突的详细信息保存到类的错误属性(ErrorMsg)中,并返回一

相关文档
最新文档