智能排课

2020-03-03 21:39:06 来源:范文大全收藏下载本文

智能排课

就目前对于各高校而言,排课仍然是一个棘手的问题。据调查好多高校仍然处于人工排课阶段,这样会给人带来了很大的压力和很多的麻烦。所以我们小组在老师的带领之下开发一种智能排课系统。这个智能系统的主要功能就是排课。将课程名导入系统,然后按照一定的算法进行排课(我们的系统主要结合了分治法,贪婪发和回溯法,借鉴遗传算法),生成一张满足要求的课程表。在排课过程中最令人担心的问题就是出现教师资源冲突与教室资源冲突的情况,所以我们所讨论的主要问题是:如何将教师,教室,课程,时间按照一定的要求排列成一张有序的表,然后将不同的班级在强加(也是按照一定的要求)在这张表上。

当然在排课之前我们要先了解一下排课过程中涉及的几个基本要素。

一、教师要素的基本信息包括:职工号、姓名、性别、出生日期、部门、联系电话、E-mail、教职工类别、学历、职务、不可排字段(教师的特殊要求)、优先级;

二、教室(教学场所)要素的基本信息包括:教学场所编号、名称、座位数、类别、是否安排;

三、课程要素的基本信息包括:课程编号、课程名称、理论学时、实践学时、开始周、结束周、学分、课程性质(比如选修与必修)、班级编号、专业名称、职工号、教师要求,是否合班(几个班级在一起上课)。

四、班级要素的基本信息包括:班级编号、班级名称、学生人数。这些是几个基本的排课要素,在这几个基本的要素里它们的主键又可以构成一张排课表,这张表(排课表)包括:课程编号、职工号、班级编号、学时数、类别。在以后的排课过程中主要是用到排课表中的元素。最后我们将生成一张已经排好课的课程表,表中元素包括:课程编号、职工号、上课时间、教学场所编号。

在我们了解了排课的基本要素后,当然我们就要着手于排课了。在排课之前我先大概说一下我们开发的整个思路。对于一个客户端软件来说,我们首先要有个用户登录界面(如同一般的软件一样),然后就是主界面(这将是我们的工作平台)。除了这些之外就是后台支持了,我们使用的是mysql2005,将前面提到的各个基本元素生成基本表(后期我们将会生成B/S)。最后要处理的就是我们的核心了,就是算法设计。

排课的关键问题是排课算法的使用。前人在排课算法的使用上已有许多成功的案例。主要的排课算法有:启发式算法(遗传算法)、优先级算法、应用专家系统、人工智能应用、分组优化算法,约束满足方法、搜素算法(回溯法、分支定界法)、数据挖掘相关算法等。在我们的系统里采用了分治法、贪婪法、回溯法三者思想,借鉴遗传算法。下面我简单介绍一下这几个算法。分治法也称分割求解法,设计思想是把一个大的问题划分成几个小问题,先求出子问题的答案,然后将子问题答案合并成整个大问题的解。贪婪法是分段工作,在每个阶段选择局部最优,对最终解不追求最优解,能够得到某种意义下的近似解的分级处理方法。回溯法的基本思想是,在确定了解空间的组织结构后,回溯法就从开始结点(根结点)出发,以深度优先的方式搜索整个解空间(如遇到不满足要求时就返回上一步)。遗传算法就好像是直接把每个节点当成一个并行的种群看待。然后有机体根据不同的繁殖方法从一个节点迁移到另一个节点。我们的排课问题是一个冗余度极其复杂的问题,我们要做的就是利用这些算法将排课变得简单,减小问题冗余度(复杂度)。

前面我们已经提到了排课中遇到的几个基本元素(教师,教室,课程,时间),现在我将具体介绍一下排课算法。第一步就是对课程进行排序,而排课的前提就是将我们所用到的排课的课程等价话(就是它们没有优先级一说),这样课程就只有地点上的冲突没有时间上的冲突,这样就大大降低了算法的复杂度,提高了排课算法的效率。第二步是对时间进行设置,设置时间可以提高上课安排的合理性。例如每天上课节数为八节,分别为1-2节、3-4节、5-6节、7-8节,我们将1-2节用“1”表示,3-4节用“2”表示,5-6节用“3”表示,7-8节用“4”表示 。星期一到星期天共有七天分别用“1”—“7”表示。用一个时间串来表示某门课程的上课时间模式,如:“11”表示星期一的1—2节上课,“54”表示星期五的7—8节上课。在课程安排是对于课程数比较多的课程,要尽量隔天安排。在这里我们还需要构建一个三维数组20*4*7,这个三维数组是用来表示教师、班级、教室的可排课程,其中第一维表示周数(就是第几周),第二维表示上课的节数(如“1”,表示上午1—2节上课),第三维表示星期几。 这就是时间初始设置。第三步是构建一个三维数组来表示字段的空忙,这个三维数组分别表示教师、教室、课程。如果该位置的值为“1”

表示可以排课,为“0”表示该字段已用,不可以排课。对于基本元素初始化以后就应该为课程设计优先级。对于课程而言设计优先级是应该考虑课程的周学时(Z),课程的级别(如选修和必修)(J),课程的参与人数(R)。对于优先级问题可以设定一个函数,该函数可表示为:Y=Z*X1+J*X2+R*X3;(注:Z,J,R是分别取周学时、级别、人数的首字母);X1,X2,X3是调整的参数,该参数可以根据具体情况进行调整。设计优先级后我们可以为某门课程安排最大的可排时间数组,为(1234 1234 1234 1234 1234 )。然后找出参加该课程的所有班级,在查询每个班级的时间数组,得到已排的具体时间,然后与最大的可排时间数组与找出相同的时间,然后再依次处理时间,教室数组,最后就可以得到该课程的数组(就是班级、教室、教师的交集)。找到可排时间后就可以查找相应的时间模式。排课过程大概就是如此,最后在根据具体的实际情况进行人工干预,使课程表更加符合要求和人性化。

排课程序

排课步骤

排课原则(讨论稿)

排课流程(推荐)

走班排课方法

防灾科技学院排课(材料)

培训学校教育排课规定

调课、停课、排课

教务的排课技巧

哈他瑜伽排课方法

《智能排课.doc》
智能排课
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
下载全文