眼下流行的几种排课算法的介绍
自己主动排课问题是:设计适当的数据结构和算法, 以确定{ C1 , C2 , ., Cn } 中每一个课程的教学应占领的时间段,而且保证不论什么一个时间段仅由一门课程占领.
对于每一门课程,分配2 个字节的“时间段分配字”(无符号整数) :{ T1 , T2 , ., Tn} . 当中不论什么一个时间段分配字(如果为Ti ) 都具有例如以下格式:
在上述如果下,自己主动排课算法的目标就是确定{ C1 , C2 , ., Cn} 所相应的{ T1 , T2 , ., Tn} .
和{ T1 , T2 , ., Tn} 也採用相同的表示法.
输入 { C1 , C2 , ., Cn} 、{ N1 , N2 , ., Nn} .
{ T [1 ] , T [2 ] , ., T [ n ]} 中各时间段分配字清零
对课程索引值c-index = 1 ,2 , ., n 进行下面操作:
把segment 的值写入T[c-index ]的第(week - 1) 3 3~week 3 3 - 1 位中 N[c-index ]的值减1
显然,本算法的时间复杂度为O ( N) ( N 为每周总开课次数, 见(2) 式) , 而存储时间段分配字所用空间为2 n 个字节( n 为课程门数) .
有时在自己主动排课完成后,须要人工调整某些课程的安排时间,如把第i 门课程在人工干预下改成星期数为week 、时间段为segment 的位置,则依据上述数据结构需做例如以下运算:
T [ i ] = T [ i ] &(~ (7 << (week - 1) * 3) ) + (segment << (week - 1)*3) ,
当中&、~ 和n 分别为按位与、按位取反和按位左移运算符(下同) .
问题是怎样推断是否已有其他课程安排在同一个时间段上. 设人工调整的时间段分配
输出 与T1 冲突的{ T2 , ., Tn} 中的时间段分配字.
① 对c-index = 2 ,3 , ., n 做下面操作:
对星期值week = 1 ,2 ,3 ,4 ,5 做下面操作:
假设T[1] & mask 等于T[c-index] & mask ,并且二者不等于0
为了合理使用教室, 我们採用了教室分类的办法, 以便尽可能在课程编排过程中避免上课人数少的课程盲目强占容量大的教室现象。
教室等价类的划分:
教室类型等价类R 教室类型等价类R
普通教室R1 听力教授R5
投影教室R2 物理实验室R6
多媒体教室R3 化学实验教室R7
制图教室R4 计算机实验教学R8
3.时间预处理
1) 构造时间模式库
时间模式是依据教务人员的经验, 为各种周学时数不同的课程指定的一种时间组合方式.比如, 一门课程的周学时数为4, 那么它的时间组合方式能够有:“11”,“41”; 表示该课程一周上两次, 分别为周一的12 节和周四的12 节L同一时候, 为了达到较好的上课效果, 也要对这些时间模式进行分级.例如以下 所看到的
时间模式分级举例
周学时优先级周一周二周三周四周五
4 1 11 41
∶ ∶
4 2 22 43
: :
当中, 将周一至周五用数字1~ 5 表示, 上课节次: 12 节、34 节、56 节、78 节、晚12 节、晚34 节分别用数字1~ 6 表示。 比如数字“42”表示周四的34 节
这个时间单元。这样, 对于每种周学时数, 能够将全部合理的时间组合形式存入模式库中。以便进行时间处理时能够用时间模式库中的各种模式进行匹配。
2) 时间数组
为了表示班级、教师、教室的可排课时间, 分别为他们建立一维数组L比如, 某位教师的初始可排课时间数组为(123456 123456 123456 123456 123456)。 当中共同拥有五组数据, 分别表示一周中的五天; 而一组数据共同拥有6 个字符“1、2、3、4、5、6”分别表示一天中的六个时间单元。 当为某位教师分配时间后, 对应的那位字符就置为0L 比如, 某位教师的可排课时间数组为( 020456 103456 003456 120456 023456) , 则表示这位教师在周一的12 节和56 节, 周二的34 节, 周三的12 节和34 节, 周四的56 节, 周五的12 节已经安排了课程, 假设要再安排课程的话, 就应该安排在非0 的时间单元L对于班级和教室也能够进行相同的处理, 分别标出可排课时间。
2. 每一子类的排课处理
在对每一个子类的排课处理中, 我们结合了分治法、贪婪法、回溯法三者的思想L首先, 根据分治法的思想把整个排课过程分成时间分配和教室分配两个阶段。然后, 根据贪婪法的算法思想, 在时间分配时,总是在尚未分配的时间单元中选择上课效果最好的
单元。而在时间分配发生死锁时, 会向上回溯搜索到发生冲突的近期一个记录, 然后对它进行重排以解决冲突。 详细处理步骤例如以下:
1.设定优先级
对子类中的课程计算优先级L设优先级函数为:
D (g ) = J (g )*C1 + T (g ) * C2 + P (g ) * C3 ( 1 )
当中, J (g ) 表示课程级别, 选修课的课程级别设置为1, 必修课的课程级别设置为2; T (g ) 表示该课程的周学时数; P (g ) 表示该课程的參与人数; C1、C2、
C3 是能够调整的參数。 由式(1) 能够看出课程级别越高、周学时越多、參加人数越多的课程, 其D (g )值越大, 其优先级也越高; 反之, D (g ) 值越小, 其优先级越低。这样, 就能够依据计算的优先级的高低对课程进行排序, 优先级高的优先调度。
2.查询可用时间单元
第1 步, 初始化某门课程的最大可安排时间数组, 为( 123456 123456 123456 123456 123456)。第2 步, 找出參加该课程学习的全部班级。第3 步, 查询每一个班级的时间数组, 得到班级的已排课时间, 并将其与课程的最大时间数组相“与”, 从而得到该课程不能安排的时间单元。第4 步, 依次处理教师时间数组和相关教室时间数组, 这样, 该课程终于的可安排时间数组就是班级、教师、教室可排课时
间的交集。
3.查找适当的时间模式
找到可排课时间后, 就应依据课程的周学时数在时间模式库中匹配适当的时间模式。完毕以上工作后, 就确定了课程的上课时间和地点。假设在处理中发生死锁, 则可依据回溯法的思想向上回溯搜索到发生冲突的近期一个记录, 然后对它进行重排以解决死锁, 假设仍不能解决死锁问题, 则能够将该课程信息输出到冲突列表中。
3. 人工干预的处理
计算机自己主动排课也须要进行人工干预, 以便可以使得各个高校可以依据自己的详细要求对排课算法中的一些參数进行设置和调整, 并对计算机排出的课表进行调整L本算法所设计的人工干预过程有:
等价类划分中參数的设置, 教室类型的设置, 时间模式库的设置, 优先级函数中參数的设置。用户能够依据自己的详细要求对这些參数和库进行设置。另外,对于计算机排出的课程表, 用户也能够通过人机交互进行适当调整, 从而得到用户惬意的课程表。
4.性能分析
此算法对班级及教室划分等价类,对学校资源进行了合理的利用。但对一些特殊要求还是无法详细体现出来。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
你能够以不论什么形式转载以上文字,但必需包括下面文字
This Article Is Writted By : Liu zhen yuan
Copyed From : http://blog.csdn.net/kegao2741
If you have any problem about the artcile you will feel free to contact me by mail "liu_zhenyuan@163.com"
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=651921
眼下流行的几种排课算法的介绍相关推荐
- 目前流行的几种排课算法的介绍
通用高校排课算法研究----2 .目前流行的几种排课算法的介绍 2 目前流行的几种排课算法的介绍 2.1. 自动排课算法 1 .问题的描述 我们讨论的自动排课问题的简化描述如下: 设要安排的课程为 ...
- 通用高校排课算法研究----前言
1 绪 论 1.1课题背景与研究意义 1.2课题的应用领域 1.3 课题的现状 1.4解决NP问题的几种算法及其比较 2 目前流行的几种排课算法的介绍 2.1. 自动排课算法 2.2 基于优先 ...
- python 排课算法_基于遗传算法的排课系统
摘 要:随着高校的发展,在教务管理系统中使用的排课模型也变得越来越复杂,亟需一种适用于开发.重用及设计的方法.针对这种情况,本文给出了排课问题的数学模型,提出基于遗传算法解决方案.结果表明,该算法能比 ...
- 请用java写教务系统的排课算法
写排课算法有很多种方法,下面给出一种基于贪心算法的实现方法. 首先,要获取所有课程.教室.教师.时间等相关信息,将其存储在程序中. 然后,可以通过以下步骤实现排课: 选择一门课程: 遍历所有的教室,找 ...
- 通用高校排课算法研究----3.基于时间片优先级排课算法
3 基于时间片优先级排课算法描述与分析 排课问题实质上是时间.教师.班级.教室.课程这五维关系的冲突问题,要合理的解决这个问题首先要了解排课中的一些基本原则以及排课的一些基本要求. 3.1排课中的基本 ...
- 基于遗传算法的排课算法思路
摘自毕业论文<基于微服务的智能教学质量管理平台的设计与实现> (1)问题描述 课程编排(排课)是平台的核心功能.排课问题被国外专家证明为属于NP完全问题,本质是求出满足一定软硬约束下的教学 ...
- matlab 排课,Matlab 遗传算法解决智能排课算法 一天四节课,上午两节,下午两
Matlab 遗传算法解决智能排课算法 一天四节课,上午两节,下午两 Matlab 遗传算法解决智能排课算法 一天四节课,上午两节,下午两节,同一门课不能相邻,特殊课程不能相邻(语文和英语,数学和科学 ...
- 基于时间片优先级排课算法描述
在描述算法之前我们把一些概念先讲清楚.在这里我们把从行政角度分的班叫自然班,把在同一个教室上课的班叫做排课班.在大学里有些公共课是几个排课班通过多媒体来一起上的,我们把这个排课班的总和叫做公共班.班级 ...
- python 排课算法_list、dict和set的综合应用:排课系统(1)
差一点 我们就擦肩而过了 有趣 有用 有态度 我们都知道一个程序从本质上来说就是算法+数据结构,这次就以我的本科毕业设计--排课系统为例,专门讲解如何设计排课的算法和要用到的数据结构,在讲解这个算法之 ...
最新文章
- Esper学习之十二:EPL语法(八)
- UIActivityViewController: LaunchServices: invalidationHandler called
- mysql 2.71828_数学中的e=2.71828……到底是什么东西?
- excel几个表合成一张_快速将多个excel表合并成一个excel表
- Browser控制台分析
- 鸿蒙os 2.0跑分,预装鸿蒙OS 2.0!华为MatePad Pro2跑分曝光:麒麟9000、8GB内存
- 章琦:能坚持的唯一的原因就是兴趣
- 使用NAGIOS监控网络、系统及服务
- Java中常用的类,包,接口
- C++_类和对象_C++运算符重载_加号运算符重载_实现两个对象相加_对象和int类型相加_通过成员函数重载+号_全局函数重载+号_以及重载_运算符重载函数实现---C++语言工作笔记055
- PyCharm主题自定义
- sharepoint对nodejs的要求
- Ubuntu 安装微信网页版客户端
- 网络模型(看这一篇就够了)
- 【Java课设】学生信息管理系统简易版(文件IO代替数据库)
- 哪种台灯的灯光适合学生用?盘点真正适合孩子的护眼台灯
- 前端开发入门教程-CSS(一)
- bf2无限载具服务器,战地2 局域网 飞机无限
- 【PTA 7-11】骑士的金币
- 美容院如何优化预约服务?