排课表 排课表软件_第1页
排课表 排课表软件_第2页
排课表 排课表软件_第3页
排课表 排课表软件_第4页
排课表 排课表软件_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

排课表排课表软件

排课表篇(1):教你升级Excel排课表,瞬间提高80﹪的排课效率!

在培训机构的教学管理中,支配课表是每学期的必要工作之一。

排课管理对于一个培训机构来说非常重要,却不是一件简单的事情。一年四个学期,每到学期开头前的一段时间,教务老师就要废寝忘食,披星戴月,不断收集同学和老师的资料,经过反复的修改才可能制备出一份合格的课表。这还没完,学期开头之后,随着一对一(一对多)排课数量的增加以及一些突发状况的增多例如同学临时调课等,排课管理就变得更加简单。

阻碍教务老师顺当排课的最大因素就是“在排课的过程中,需要查阅并且记忆大量的课程信息,确保支配的课程不会消失冲突”。也就是说冲突检测是排课管理中最耗费精力的问题。

一般说来,机构老师在排课过程中最苦恼的有以下三点:

1、老师数量多,记不住每个老师的空闲时间。

2、家长来给自家孩子报一对一,在排课前都要经受查询老师的空闲时间—查询孩子的空闲时间—查找可用的空闲教室这个流程。

3、小班临时调课,需要把班里全部人的上课时间都检查一遍,才能确保新支配的上课时间,每一个孩子都能正常出勤。

在排课过程中一不当心,就会消失将两门课支配在同一间教室的同一个时间或者在同一个时间为某位老师支配了多节课等状况。

在机构体量比较小的时候,排课不算困难,用传统的人工、手抄的方式基本就能实现。

当机构不断进展壮大,教室,老师,同学的数量都大量增加,传统的用人工、手抄的方式排课表不仅繁重而且有大量的重复工作,致使出错率很高,那么采纳计算机来排课表就成了进展的必定趋势。

排课作为一项难度大而繁琐的工作,现在虽有专业的排课软件,但排课软件收费偏高,并且由于开发软件的公司在排课软件的开发过程中一般并不深耕于教学管理,其试错成本和培训成本都很大。相对于排课软件,excel具有免费的特点,假如说既要廉价又要达到肯定的排课效果,往往优先选择excel进行排课。

在介绍采纳excel排课的方法前,我们首先要明确什么是一份合格的课表。

一份合格的课表至少满意以下三个显性条件和一个隐形条件:

显性条件:

1、一个老师在任何一个时刻至多在一间教室里授课。

2、一个同学在任何一个时刻至多在一间教室里上课。

3、一个教室在任何一个时刻至多只有一个班级在上课。

隐性条件:一个课程由老师、同学和教室构成。

从这些条件我们可以归纳出,排课管理中需要考虑的因素包括“时间”“教室”“老师”和“同学”。

下面我就从以下三个场景动身,从易到难地叙述如何制作带有“自动排课冲突检测”力量的excel排课表。

名目

拥有固定工位的一对一排课

可变工位的一对一排课

班课排课(兼容一对一)

排课模版功能的优化

拥有固定工位的一对一排课

一对一机构,即课程中只包含一位老师和一位同学。固定工位则表示机构中每个老师都有其专属的教室,换句话说,教室数目与老师数目全都,那么某个老师是否空闲就等价于他的专属教室是否空闲。

基本定义搞清晰之后,我们就可以进行实操了。

首先需要做一个模板,上文我们指出,排课管理中需要考虑的因素包括“时间”“教室”“老师”和“同学”。

而在固定工位的条件下,“教室”和“老师”的数量实际上是全都的。因此在固定工位一对一排课的模板中我们只需要考虑“老师”,而且用“老师”来代替“教室”。

为了使排课的表格尽量的小,我们选择突出“时间”以及“老师”两种因素。将“时间”作为横坐标,以课时时长为单位(本文姑且根据课时时长为一小时来计算,13:00为最终一节课,由于咱们教务排课基本上根据一周的课表进行,只需要在表格的横向进行相应的扩展或者拆分成七个sheet即可),“老师”作为纵坐标,从上到下列出机构的老师姓名。如下表所示:

模板中的每一个空格都表示一节一对一课程,模板中任何空白的格子都可以用来添加新的课程。假如有同学来机构报了某老师在某时间的课程,这时,我们便可以在相应的位置输入同学的姓名,留意要确保一个同学在每一列中至多消失一次。为了便于下面的讲解,我们随便填写了下面的表格,如下表所示:

原则上,我们只需要猎取到待排课同学的空闲时间,然后再去标记该同学在该时间段是否可以被排课就可以了。

首先,我们需要在模板之外的空白位置填写待排课同学的名字。例如“小白”。

然后,在框架表格中添加一行“是否可以排课”的标记。例如8:00那一列由于小白已经在上赵文清老师的课,那么B2位置就应当显示“不行排课”,但是9:00那一列,小白没有课,因此C2位置应当显实“可以排课”。

我们的目标就是要让其次行能够自动显示“不行排课”或者“可以排课”。那怎么做呢?

我们可以依据这样的常识来进行推断——任何一个时间只要消失过待排课同学的名字(小白),那么这一个时间就不能再用来排课。换句话说,我们要让Excel自动统计出每一列中消失小白的次数,只要消失次数≥1次,那么就不能排课。

因此,我们点击B2格子,然后将下面一段公式直接粘到B2处:

=IF(COUNTIF(B3:B10000,$J$1)0,"不行排课","可以排课")

注:输入公式的整体解释是在B列的第3行到第10000行中查找,假如有内容和格子J1的内容全都,那么就显示“不行排课”,否则显示“可以排课”。

1、J1格填写的是待排课的同学姓名,相应的,在模板之外的任何位置都可以填写待排课的同学姓名,只需在公式的相应位置改成相应的形式即可。例如将待排课同学姓名填写在K2位置,那么在B2处则需填写:=IF(COUNTIF(B3:B10000,$K$2)0,"不行排课","可以排课")

2、10000泛指机构老师的数目,一般机构都不会超过这个数值。也可以自定义数值,但不要低于机构实际的老师数量。

完成后,就会看到B2自动消失了“不行排课”4个字。

最终,我们将公式复制到其它时间上(其它列)。

方法是,鼠标点击格子B2,移动鼠标到B2右下角,当鼠标变成“黑十字”型时,按住鼠标左键往右边拖拽就可以将公式自动复制到其它列中。(下文类似步骤不再赘述)

可变工位的一对一排课

实际状况下,许多机构都会有高校生兼职老师。而且机构的校长、主管往往也是“兼职”老师,需要上课。对于他们而言,由于每周在课堂上的时间较少,机构一般不会给支配固定的教室。产生的结果就是1对1教室的数目往往少于老师数目,排课时就必需要确保课程有对应上课的教室。

为此,除了拥有固定工位的排课表格所需考虑的因素之外,空闲“教室”这个影响因素就变得尤为突出。

此时,模板的纵坐标应换成“教室”。如下表所示:

与固定工位的模板类似,可变工位的排课模板中每一个位置都可以填入一个老师和一个同学。此时,推断是否可以排课,我们需要同时考虑同学的空闲时间和老师的空闲时间。也就是说,某一列中,只有当老师和同学的名字都没有消失过的时候,那么这一列才可以排课。

首先,我们需要在模板之外的空白位置填写待排课同学和待排课老师的名字。例如J1填写“小明”,J2填写“钱文华”。

然后,在框架表格中添加一行“是否可以排课”的标记。如下表所示:

整个公式采纳的规律和固定工位的一对一排法是类似的,只需要稍加修改即可。我们需要先统计出每一列中,待排课老师消失的次数和待排课同学消失的次数,然后将这两个数字相加,只要结果≥1,那么就不能排课。

例如8:00那一列由于小白已经在上赵文清老师的课,小明就不能上赵老师的课了,那么B2位置就应当显示“不行排课”。11:00均未消失小明和赵文清老师的姓名,所以E2位置应当显示“可以排课”。

因此,我们点击B2格子,然后将下面一段公式直接粘到B2处:

=IF(COUNTIF(B3:B10000,"*"$J$1"*")COUNTIF(B3:B10000,"*"$J$2"*")0,"不行排课","可以排课")

注:J1格填写的是待排课的同学姓名,J2格填写的是待排课的老师姓名。相应的,在模板之外的任何位置都可以填写待排课的同学姓名和待排课的老师姓名,只需在公式的相应位置改成相应的形式即可。例如将待排课同学姓名小明填写在I3位置,待排课老师姓名填写在J4位置,那么在B2处需填写:

=IF(COUNTIF(B3:B10000,"*"$I$3"*")COUNTIF(B3:B10000,"*"$J$4"*")0,"不行排课","可以排课")

完成后,就会看到B2格自动消失了“不行排课”4个字。

最终将公式复制到全部的时间上,整个排课表就制作完成了。

班课排课(兼容一对一)

不同于一对一排课,班课排课一般在学期开头之前进行,所以主要考虑的因素是“教室”和“老师”的空闲时间。

但是排课的时候也不能完全避开班内同学的因素,例如:

1、某一些班级联报的状况比较多,假如放置在同一时间段,就会降低联报的比率。

2、学期中某些班级需要进行调整,调整的过程中就需要考虑班中同学的空闲时间。

3、机构主营业务既包含班课也包含1对1,在学期中就会比较频繁的排课。

第一种状况只能通过教务老师的阅历进行处理,excel不能解决这类问题,但是后面这两种状况则是可以通过excel自动推断冲突的。

使用excel对小班进行排课,采纳的排课框架表格和可变工位的一对一排课类似,但有所补充。一个小班的同学数目在30人左右,假如将同学姓名逐一都填写在表格中,编辑和查找都会很麻烦。

因此,模板中的每一个格子只填写一个班级的名称,并且预留一个空位显示出该班级和待排课班级是否冲突,如下表所示。

每个班级的任课老师和同学信息,我们存储在另外一张名为“班级记录”的表中。

在排课之前,需要首先将班级信息录入到“班级记录”中。第一列填写班级的名称,之后从其次列开头,每一列填写任课老师或者班内的同学姓名。如高二数学基础班,任课老师名赵文清,同学姓名分别是小明,小红和小黑。如下表所示:

这样我们就将班课的排课模板制作完成了,保存好班级信息之后,我们紧接着就需要用excel表格统计出冲突的课程。

一个很直观的想法就是,两个班假如有共同的老师或者共同的同学,那么这两个班的上课时间肯定不能发生重叠。假如上课时间发生了重叠,那么就意味着这两门课就是有冲突的。另外,在模板中,每一列的课程都是在同一时间进行。因此,我们要确保每一列中的任何一个班级都不能和待排课班级冲突。

我们要编写的冲突检测公式也是根据刚刚的思路来实现,分成如下的两步流程:

第一步,检查每一个已经排好的班级是否与待排课班级存在冲突。

首先,我们要依据模板中班级的名字,在“班级记录”表格中定位这个班的老师和同学。然后,我们把老师和同学的名字进行一一对比,统计出相同的名字消失的次数。假如相同名字消失的次数≥1,就说明有班级冲突的状况发生。

我们选择格子C3,并直接录入公式:

=IFERROR(IF(SUM(COUNTIF(INDIRECT("班级记录!A"MATCH(B3,班级记录!$A$1:$A$100,0)":AZ"MATCH(B3,班级记录!$A$1:$A$100,0)),INDIRECT("班级记录!A"MATCH($P$1,班级记录!$A$1:$A$100,0)":AZ"MATCH($P$1,班级记录!$A$1:$A$100,0))))0,"冲突","不冲突"),"")

注:

1、结束公式输入时需同时按下“CTRLSHIFTENTER”。

2、该公式适用于同学数量低于50的小班状况,对于同学数量超过50的状况并不适用。

编写好公式之后,需要将公式复制到其它的框中,第一步就完成了。

其次步,检查完每一个已经排好的班级是否与待排课班级存在冲突之后,由这些信息就可以推想出哪些时间可以用来排课。某一个时间可以排课当且仅当这个时间所在的列不存在任何一个冲突。

因此,在格子B2处我们直接输入公式:

=IF(COUNTIF(C3:C10000,"冲突")0,"不能排课","可以排课")

最终将公式复制到全部的时间上,整个班课的排课表就制作完成了。

排课模版功能的优化

表头固定——防止页面滚动后第一、二行以及第一列的内容消逝

考虑到实际状况下,机构的老师的数目会比较多,会占用很大一部分界面,为了防止页面上下滚动后第一、二行的内容(排课状况)消逝,就需要固定顶端两行。

同样的,排课的时候一般都会直接考虑一周的课表,页面左右滚动查找排课时间的时候会导致第一列消逝(老师姓名),因此,还需要将第一列固定。

我们采纳的方法如下:

选中B3,然后选择“视图”-"冻结窗格"-"冻结拆分窗格"。

注:选中第N行第M列,则前N-1行和M-1列均被冻结。上表所示选中B3并冻结拆分窗格,则第一、二行以及A列窗格都被冻结。

模版保存——防止表格被错误篡改

Excel中的公式,在表格编辑的过程中,简单由于误操作而被更改。而且,在更改之后也比较难以发觉。为此,我们需要在做好排课表模板之后,设置一个权限。对于没有权限的教务老师,只能用来排课,不能对公式进行编辑。

首先,CtrlA选中整个表格。点击鼠标右键,点选“设置单元格格式”并点击。

然后在弹出框中,点击“爱护”。就会看到“锁定”和“隐蔽”两项。

我们去掉默认的“锁定”上面的勾,再点击“确定”。

鼠标左键选中全部包含公式的表格,点击鼠标右键,选择“设置单元格格式”

在弹出框中,选择爱护,再在“锁定”位置打钩,单击“确定”

点击“批阅”,选择“爱护工作表”,设置一个密码。那么这时候没有密码的用户只允许编辑“未锁定的单元格”。

番茄博士说

在机构不断进展壮大的过程中,排课管理睬变得越来越简单。假如说既要廉价又要达到肯定的排课效果,往往优先选择excel进行排课。

排课管理中需要考虑的因素包括“时间”“教室”“老师”和“同学”。

全职机构的一对一排课,在excel排课管理中要强调“时间”和“老师”这两个因素;

含兼职机构的一对一排课,则由于教室数量少于老师数量,需要把“教室”当成主要因素来考虑,在excel排课管理中要强调“时间”和“教室”这两个因素;

班课机构的排课,在excel排课管理中,既要强调“时间”“教室”两种因素,同时也不能忽视“老师”和“同学”对排课的影响。

排课管理尽管很耗费精力,但是只要花一天左右的时间将模板表格制作完成并保存,之后再进行排课时,将会节约大量的时间。

更多训练机构办学实操干货,请关注校长运营圈公众号(yaohaotixy),也可以私聊我个人微信(tomato75935246)哦~

排课表篇(2):目前流行的几种排课算法的介绍

目前流行的几种排课算法的介绍

2.1.自动排课算法

1.问题的描述我们争论的自动排课问题的简化描述如下:设要支配的课程为{C1,C2,

.,Cn},课程总数为n,而各门课程每周支配次数(每次为连续的2学时)为{N1,N2,.,Nn};每周教学日共5天,即星期一~星期五;每个教学日最多支配4次课程教学,即1~2节、3~

4节、5~6节和7~

8节(以下分别称第1、2

、3、4时间段)

.在这种假设下,明显每周的教学总时间段数为5×4=20,并存在以下约束关系:n≤20,(1)

N=6n,i=1,Ni≤20.(2)自动排课问题是:设计适当的数据结构和算法,以确定{

C1,C2,.,Cn}中每个课程的教学应占据的时间段,并且保证任何一个时间段仅由一门课程占据.

2.主要数据结构对于每一门课程,安排2个字节的“时间段安排字”(无符号整数):{T1,T2,.,Tn}.其中任何一个时间段安排字(假设为Ti

)都具有如下格式:

Ti的数据类型C语言格式定义为:unsignedint.Ti的最高位是该课程目前是否是有效的标志,0表示有效,1表示无效(如停课等);其它各位称为课程安排位,每个课程安排位占连续的3个位(bit)

,表示某教学日(星期一~星期五)

支配该课程的时间段的值,0表示当日未支配,1~4表示所支配的相应的时间段(超过4的值无效).在这种设计下,有效的时间段安排字的值应小于32768(十六进制8000),而大于等于32768的时间段安排字对应于那些当前无效的课程(既使课程安排位已设置好也如此),因此很简单实现停课/开课处理.

3.排课算法在上述假设下,自动排课算法的目标就是确定{C1,C2,.,Cn}所对应的{T1,T2,.,Tn}.从支配的可能性上看,共有(即有A(20,(N-20)))20!/(20-N)!种排法(N的含义见(2)式).假如有4门课,每门课一周上2次,则N=8,这8次课可能的支配方法就会有20!/(20-8)!=5079110400,即50多亿种.假如毫无原则地在其中选择一种方案,将会耗费巨大量的时间.所以排课的前提是必需有一个确定的排课原则.我们采纳轮转安排法作为排课原则:从星期一第1时间段开头按{C1,C2,

.,Cn}中所列挨次支配完各门课程之后(每门课支配1次)

,再按该挨次连续向后面的时间段进行支配,直到全部课程的开课次数符合{N1,N2,.,Nn}中给定的值为止.在算法描述中将用{C[1],C[2],.,C[n]}表示{C1,C2,.,Cn},对{N1,N2,.,Nn}和{T1,T2,.,Tn}也采纳同样的表示法.算法1排课算法输入{C1,C2,.,Cn}、{N1,N2,.,Nn}.输出{T1,T2,.,Tn}.①初始化:星期值week=1时间段值segment=1{T[1],T[2],.,T[n

]}中各时间段安排字清零②新一轮扫描课程:置连续处理标志flag=0对课程索引值c-index=1

,2,.,n进行以下操作:假如N[c-index]0,则做以下操作:把segment的值写入T[c-index]的第(week-1)33~week33-1位中N[c-index]的值减1假如N[c-index]

0,则置flag=1假如week=5并且segment=4则:置flag

=1并转③否则:假如segment=4则:置segment=1且week增1否则:segment增1检测是否已全部支配完毕:假如flag=1则:转②否则:转③③检测是否胜利:假如flag=1则:开课次数过多否则:课程支配胜利④算法结束明显,本算法的时间简单度为O(N)(N为每周总开课次数,见(2)

式),而存储时间段安排字所用空间为2n个字节(n为课程门数).

4.冲突检测算法有时在自动排课完毕后,需要人工调整某些课程的支配时间,如把第i

门课程在人工干预下改成星期数为week

、时间段为segment的位置,则依据上述数据结构需做如下运算:T[i]=T[i](~(7(week-1)*3))+(segment

(week-1)*3),其中、~和n分别为按位与、按位取反和按位左移运算符(下同).问题是如何推断是否已有其它课程支配在同一个时间段上.设人工调整的时间段安排字为T[1],则该问题描述为:推断时间段安排字T[1]与{T[2],T[3],.,T[n

]}中的某个安排字是否存在相同课程安排位上的相等的非零时间段值,或者说{T[2],T[3],.,T[n]}

中是否存在与T[1]冲突的时间段安排字.为简化起见,在以下算法描述中假设全部时间段安排字的最高位为0.算法2冲突检测算法输入T1和{T2,.,Tn}.输出与T1冲突的{T2,.,Tn}中的时间段安排字.①对c-index

=2,3,.,n做以下操作:初始化屏蔽字mask=7对星期值week=1,2

,3,4,5做以下操作:假如T[1]mask等于T[c-index]mask,而且二者不等于0则:T[1]与T[c-index]相冲突,转①mask左移3位(或乘8)②算法结束本算法时间简单度为O(n)(n为课程门数)

5.算法分析

此算法以课程为中心,进行搜寻匹配,取最先匹配的值;具有占有空间少,运算速度快的特点。但其未对数据进行择优选取,所以不能对教学资源(老师、教室)合理安排,也不能满意一些特别要求(比如有些老师喜爱上午上课,有些老师偏向于集中式上课;有些课程支配到上午会更合适些,有些课程不能支配到上午等)。2.2基于优先级的排课算法从数学上讲,排课问题是一个在时间、老师、同学和教室四维空间,以教学方案和各种特别要求为约束条件的组合规划问题。其实质就是解决各因素之间的冲突。在设计算法时,为了降低课程调度的算法简单性,我们主要采纳了化整为零的思想及优先级算法:

1.排课的预处理

1.等价类的划分将具有共同听课对象的任务划分在同一等价类中,

在每个等价类之间只存在地点上的冲突,而没有时间上的冲突。然后根据的大小,从大到小进行处理。等价类的划分可以先按班级分,然后再按系别分,如下所示:听课对象等价类的划分自控系机械系化工系管理系.

99级N1子类1子类2

子类3子类4.

98级N2子类5子类6

子类7子类8.

97级N3子类9子类10

子类11子类12.

96级N4子类13子类14子类15子类16.这样,先按班级分为四个类:99级(N1),98级(N2),97级(N3),96级(N4),而对每一个等价类N1、N2、N3、N4又可以按院系分为若干个子类,然后对每个子类分别进行排课处理,这样做就可以大大降低算法的简单性2.教室分类为了合理使用教室,我们采纳了教室分类的方法,以便尽可能在课程编排过程中避开上课人数少的课程盲目强占容量大的教室现象。首先将教室根据其类型分为若干个等价类,如下所示,然后,依据教室的容量再分别对每个教室等价类进行划分:如分为0~30人、30~

60人、60~90人、90~

120人、120~180人等若干种教室等价类的划分:教室类型等价类R教室类型等价类R一般教室R1听力教室R5投影教室R2物理试验室R6多媒体教室R3化学试验教室R7制图教室R4计算机试验教学R8

·

对我有用[0]

·

丢个板砖[0]

·

引用

·

举报

·

管理

·

TOP

·

·

uself

·

(杨哥儿)

·

·

等级:

·

#7楼得分:0回复于:2024-07-1416:08:583.时间预处理

1)构造时间模式库时间模式是依据教务人员的阅历,

为各种周学时数不同的课程指定的一种时间组合方式.例如,一门课程的周学时数为4,那么它的时间组合方式可以有:“11”,“41”;表示该课程一周上两次,分别为周一的12节和周四的12节L同时,

为了达到较好的上课效果,也要对这些时间模式进行分级.如下所示时间模式分级举例周学时优先级周一周二周三周四周五

411141∶∶

422243

::其中,将周一至周五用数字1~

5表示,上课节次:12节、34节、56节、78节、晚12节、晚34节分别用数字1~

6表示。例如数字“42”表示周四的34节这个时间单元。这样,对于每种周学时数,可以将全部合理的时间组合形式存入模式库中。以便进行时间处理时可以用时间模式库中的各种模式进行匹配。

2)时间数组为了表示班级、老师、教室的可排课时间,

分别为他们建立一维数组L例如,某位老师的初始可排课时间数组为(123456123456123456123456123456)。其中共有五组数据,分别表示一周中的五天;而一组数据共有6个字符“1、2、3、4、5、6”分别表示一天中的六个时间单元。

当为某位老师安排时间后,相应的那位字符就置为0L

例如,某位老师的可排课时间数组为(020456103456003456120456023456),则表示这位老师在周一的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步,初始化某门课程的最大可支配时间数组,为(

123456123456123456123456123456)。第2步,

找出参与该课程学习的全部班级。第3

步,查询每个班级的时间数组,得到班级的已排课时间,并将其与课程的最大时间数组相“与”,

从而得到该课程不能支配的时间单元。第4

步,依次处理老师时间数组和相关教室时间数组,这样,

该课程最终的可支配时间数组就是班级、老师、教室可排课时间的交集。

3.查找适当的时间模式找到可排课时间后,就应依据课程的周学时数在时间模式库中匹配适当的时间模式。完成以上工作后,就确定了课程的上课时间和地点。假如在处理中发生死锁,则可依据回溯法的思想向上回溯搜寻到发生冲突的最近一个记录,然后对它进行重排以解决死锁,假如仍不能解决死锁问题,则可以将该课程信息输出到冲突列表中。

3.人工干预的处理计算机自动排课也需要进行人工干预,

以便可以使得各个高校能够依据自己的详细要求对排课算法中的一些参数进行设置和调整,并对计算机排出的课表进行调整L本算法所设计的人工干预过程有:等价类划分中参数的设置,教室类型的设置,时间模式库的设置,优先级函数中参数的设置。用户可以依据自己的详细要求对这些参数和库进行设置。另外,对于计算机排出的课程表,用户也可以通过人机交互进行适当调整,从而得到用户满足的课程表。

4.性能分析

此算法对班级及教室划分等价类,对学校资源进行了合理的利用。但对一些特别要求还是无法详细体现出来。基于时间片优先级排课算法描述与分析

排课问题实质上是时间、老师、班级、教室、课程这五维关系的冲突问题,要合理的解决这个问题首先要了解排课中的一些基本原则以及排课的一些基本要求。

3.1排课中的基本原则在课程的编排中应遵循肯定的规章,

只有根据基本规章来进行课程的编排才能够削减冲突的发生,这些基本规章主要有以下几条:1)同一班级的同学在同一时间(某些特定的选修课时间除外)不能支配两门课程

2)同一老师在同一时间不能支配两门课程

3)同一教室在同一时间不能支配两门课程

4)同一时间支配的课程总数不能大于所能供应的教室总数

5)某一课程参与学习的总人数不应大于所支配教室的座位数

6)所供应教室的属性与课程所需教室的属性全都在时间、老师、班级、教室、课程这五维关系中,

时间、老师、班级三者之间存在着紧密关系。相对而言,教室与它们关系就不那么亲密。

3.2排课的基本要求课程的支配不是任意的,为了达到最好的教学效果应遵循肯定的要求。这些要求主要有:

1)要尽量为所排课程支配上该类课效果最好的时间

2)课程在一周上多次时,要有肯定的间隔性3)公共课等涉及面广、学时多的课程应优先处理4)对同一老师,同一上课对象应尽量选择相对固定的几个教室5)对同一个班级的课程应选择相对固定的教室6)连着的课的教室选择不应相隔太远

7)同一天有几门课时尽量把课分散

8)优先满意一些特别要求(比如有些教室喜爱上上午的课,可以优先满意)

3.3基于时间片优先级排课算法描述在描述算法之前我们把一些概念先讲清晰。在这里我们把从行政角度分的班叫自然班,把在同一个教室上课的班叫做排课班。在高校里有些公共课是几个排课班通过多媒体来一起上的,我们把这个排课班的总和叫做公共班。班级、教室、老师、课程都维护着自己的一张课表。对课表的每个表元(如星期一的第一节课)在这里称做时间片。基于时间片优先级排课算法以排课班为单位,围围着各对像(自然班、教室、教室)的时间表选择合适的时间片。

!--[if!supportLists]--1.!--[endif]--算法流程图

!--[if!vml]--!--[endif]--

!--[if!supportLists]--2.!--[endif]--算法的伪代码描述

输入:老师(teacher1,teacher2,…………….teachern)

教室(room1,room2,…roomn)

班级(class1,class2,….classn)

课程(course1,course2,………………coursen)

各老师、教室、班级、课程时间片的优先级

排课班(schudel_class1,schudel_class2………schudel_classn)

输出:已经排好课表的老师、教室、班级

Procedureschudeling(teacher,room,class,course,schudel_class,public_class)

//初始化一张空的时间表,对该时间表的每个时间片的优先级初始化为高级

InitTime_table

//对排课班进行处理

Foreveryschudel_classdo:

If(!Check_Have_despose(schudel_class))//假如该排课班尚未排课

Begin:

Time_table=Time_tableget_all_class_time_table(schudel_class)

Time_table=Time_tableget_room(schudel_class);

Time_table=Time_tableget_teacher(schudel_class);

Course=get_course(schudel_class);

//假设只有两节连堂及三节连堂那种课

IntiCount2=0;//那门课两节连堂的次数

IntiCount3=0;//那门课三节连堂的次数

//得到课程每周的课时数

Intcourse_count=get_couse_count(Course);

//得到每周的连课状况

Parse_couse_count(course_count,iCount2,iCount3);

//依据iCount2,iCount3,以及Time_table为该排课班选择N个

//(N=iCount2+iCount3)适当的时间片,保存在CPoint变量中

CPointpo;

LListCPoint*cp

Intpriority[7]=0;

//得到每天的优先级的总和

Loop:I=0untilI=6do:

Loop:J=0untilJ=6do:

Begin:

Priority[I]=Priority[I]+Time_table.time_piece[I][j]

EndBegin

//得到优先级总和最大的那天,我们认为那一时间最闲

//相宜支配课程

intnumber=get_number(priority[7]);

BOOLfail

WhileiCount20

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论