高校排课系统研究

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

基于遗传算法的高校排课系统研究

沈丽容陈明磊

(南京林业大学信息学院计算机科学与工程系南京 210037)

摘要提出并实现了一种高校自动排课算法,利用遗传算法建立数据模型,定义一个包含教师编号、班级编号、课程编号、教室编号、上课时间段的染色体编码方案和适应度函数,通过初始化种群、选择、交叉、变异等过程不断进化,最后得到最优解。利用该算法对某高校的真实数据进行实验,结果显示无一例教室、教师、班级冲突,算法具有合理性和可行性。

关键词遗传算法;排课问题;适应度函数

1 前言

每个学期对本校教学任务进行合理安排是教务科的重要任务。其中排课是最为关键的环节。排课问题的本质是将课程、教师和学生在合适的时间段内分配到合适的教室中,涉及到的因素较多,是一个多目标的调度问题,在运筹学中被称为时间表问题(Timetable Problem,简称TTP)。目前由于学校扩招,学生和课程数量比以往大大增加,教室资源明显不足,在这种情况下排课人员很难在同时兼顾多重条件限制的情况下用人工方式排出令教师和学生都满意的课表。

排课问题很早以前就成为众多科研人员和软件公司的研究课题,但是真正投入使用的排课软件却很少。原因是多方面的,其中算法的选择是最关键的一个问题,S.Even等人在1975年的研究中证明了排课问题是一个NP-Complete问题,即若是用“穷举法”之外的算法找出最佳解是不可能的。然而由于穷举法成本太高,时间太长,根本无法在计算机上实现。因为假设一个星期有n个时段可排课,有m位教师需要参与排课,平均每位教师一个星期上k节课,在不考虑其他限制的情况下,能够推出的可能组合就有n m*k 种,如此高的复杂度是目前计算机所无法承受的。因此众多研究者提出了多种其他排课算法,如模拟退火,列表寻优搜索,约束满意等[1]。其中,遗传算法(Genetic Algorithm, 简称GA)是很有效的求解最优解的算法。

遗传算法是一种通过模拟自然界生物进化过程求解极值的自适应人工智能技术,是由美国芝加哥大学Holland教授于1962年首先提出的。遗传算法借用了生物遗传学的观点,通过自然选择、遗传、变异等作用机制来提高各个个体的适应性,体现了自然界中“物竞天择、适者生存”的进化过程。遗传算法也因此吸引了一大批的研究者,并广泛应用于函数优化、组合优化、生产调度、机器学习、图像处理、模式识别等多个领域。

2 排课问题描述

在排课问题中,我们的主要任务是将班级、教室、课程、教师安排在一周内且不发生时间冲突[2]。据此,我们给出如下描述:

学校有R间教室,C个班,S门课程,T位教师,P个时间段。

●教室集合R(R1,R2,…Rn),每间教室分别可容纳(X1,X2…X r)人;

●班级集合C(C1,C2,…C n),每个班级分别有(K1,K2,…K c)人,其中有x个班级上合班课;

●课程集合S(S1,S2,…S n),每门课对应C i个班,1位教师,(1≤ C i

●教师集合T(T1,T2,…T n),每位教师对应S m门课,C n个班,(1≤ S m

●时间集合P(P1,P2,…,P n),假设一周上五天课,每天分为五个教学单元,每个单元为2个课时,即上午2个,下午2个,晚上1个,则时间集合包含25个时间段。如11代表周一第一个教学单元,即周一1、2节,12代表周一第二个教学单元,即周一3、4节,以此类推,这些时间段构成一个时间集合

P(11,12,13,….55)。

一张正确的课表应至少满足以下硬约束条件:[3]

⑴一个教师或者一个班级或者一个教室在同一时间段内只能安排一门课程;

⑵分配的教室可容纳人数应该大于学生数。

除了上述的硬性约束,还有些软约束,这些软约束有助于使得课表更加合理,更加人性化。这些软约束条件可能是[4]:

⑴尽量在早上安排必修课,而下午安排选修课,晚上尽量不排课;

⑵尽可能满足个别教师的特殊上课时间要求;

⑶一门课尽量分散在一个星期中,即某天上完某一门课后,要隔一天以上再上这门课,以使教师有充足的时间备课和批改作业,而学生也有足够的时间复习消化;

(4)一个教师的课不能排满一整天;

(5)学生课表中的上课时间不能过分集中,应避免一天课程很满而另一天却一整天没课的情况。

这些软约束条件各院校有所不同,在我们的研究中,旨在我们定义的约束范围内给出一个遗传算法的解决方法,并对其进行优化操作。

3 遗传算法

遗传算法采用类似基因演化的循环过程,其演算过程如下:

1)随机产生一定数目的初始种群

2)对个体适应度进行评估,如果个体的适应度符合优化准则,则输出最佳个体及其代表的最优解,并结束计算,否则转向第3步。

3)依据适应度选择再生个体

4)按照一定的交叉概率和交叉方法生成新的个体

5)按照一定的变异概率和变异方法生成新的个体

6)由交叉和变异产生新一代的种群,然后返回第2步。如图1所示:

图1 遗传算法示意图

以下是遗传算法的伪代码。

BEGIN:

I = 0;

Initialize P(I);

Fitness P(I);

While(not Terminate-Condition)

{

I ++;

GA-Operation P(I);

Fitness P(I);

}

END.

4 设计

4.1 染色体编码

GA中首要考虑的是如何表现其问题,即如何对染色体编码,使之适用于GA操作。在经典的遗传算法中,常采用浮点数或二进制的编码方法,而研究中,每条染色体代表每位教师的课表,其结构表示如下:

染色体在程序中可用十进制数编码,例如:某一教师编号为1247,要教授“数据库原理”这门课,“数据库原理”课程编号为8017,周学时为4,班级为01811、01812,随机产生上课时间,随机选择大于两班总人数的教室,则可生成染色体如:“124701811018128017024012241”其中02401,2241分别代表教室及上课时间星期二第二个教学单元(即上午3、4节)和星期四第一个教学单元(即上午1、2节)。

按如上编码,两条染色体对后9位作交叉操作,不会影响到每位教师所教授的课程,也不会造成教师课表内含其他教师的教授课程或每代演化后染色体结构不合理等问题。

每一条染色体表示一种可能的排课结果,至于排课结果的优劣,则由适应度函数评估染色体的适应值来决定。

适应度函数

遗传算法在进化中是以每个个体的适应度值为依据来选取下一代种群的。适应度函数设定的好坏直接影响到遗传算法的收敛速度和能否找到最优解。在本系统中,适应度函数的设计思想是对每条染色体中存在的冲突类型进行加权求和,其中权值W i代表的是第i条规则的重要程度,若某条染色体违反了某条规则i,则将其值P i置为1(若没有违反规则i,则P i值为0),其受到的惩罚值为W i*P i,对染色体中存在的冲突进行加权求和并加上1后,再求其倒数,如以下公式所示。染色体适应度函数值越大,则表示其拥有较好的授课时段和教室,其在下一代的演化中的生存概率就较大。

4.2 遗传操作

(1)初始化[Initialize]