排课建模.docx

上传人:b****5 文档编号:6913571 上传时间:2023-01-12 格式:DOCX 页数:19 大小:530.73KB
下载 相关 举报
排课建模.docx_第1页
第1页 / 共19页
排课建模.docx_第2页
第2页 / 共19页
排课建模.docx_第3页
第3页 / 共19页
排课建模.docx_第4页
第4页 / 共19页
排课建模.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

排课建模.docx

《排课建模.docx》由会员分享,可在线阅读,更多相关《排课建模.docx(19页珍藏版)》请在冰豆网上搜索。

排课建模.docx

排课建模

排课问题的数学建模

摘要

为了解决日益繁琐的排课问题,针对本校情况,我们将在本文对排课问题进行分析和讨论(课程分类,课室条件,老师要求等),利用排课软件,设计程序,建立各种模型来进行排课。

背景

由于受教育人口的增加,教育制度的改革完善,科学领域的日益广泛,人们将面对越来越多排课问题。

据了解,很多学校机构还是用人工排课,人工操作不仅工作量大而且容易出错。

因此,利用计算机建立排课模型,模拟排课是非常有必要的。

问题提出

随着现代教学的改革及各项教育工程的实施,新的教育体制对课表的编排提出了更高的要求。

但现实生活中,排课问题屡屡皆是,小学如此,中学如此,大学更是如此,不仅科目多样,而且教室、老师多变,这使得排课问题往往是很令人费解的。

经过分析,排课问题就是多资源组合问题,问题的求解就是找出各个元素之间的对应关系。

进而将各个元素之间的联系进一步确定,转化成一个可以量度其大小的值,从而确定优先级。

下面我们将通过分析得出数学模型来模拟排课。

关键词

课程分类优先考虑分2个课表软件排课程序排课分元素排课

 

数据收集与分类

首先确定排课的对象,这里我们以本校为对象,考虑到学校课程规模过于庞大,为简化问题,这里把对象缩小为信息工程的应用电子技术方向专业的课程。

经过我们的收集和分类,课程总共可分为1公共基础理论课,2专业基础理论课,3实验实习实训课,4专业基础理论课,5专业理论课,6设计课这六类课程。

然后我们把地点,也就是教室分为1(400人),2(200人),3(100人),4(50人),5体育馆,6实验室这六个场地。

接着是老师,由于对老师的情况并不十分了解,而且老师的特性分化不明显,这里简单地把老师分为1男教师和2女教师。

数据性质和意义

公共基础理论课:

该课程数目多,课时长,而且需要的教室多为大教室,但是课程类型表现明显,所以排这类课规模大但容易排。

专业基础理论课:

科目多,一般为两个班同时授课,容易排。

专业理论课:

课程不难安排,最大问题是老师的分配。

课程设计:

上课地点单一,课时以周计算,容易安排。

实验实习实训课:

数目少,地点多变且不充足,容易冲突,不易排。

教室:

不考虑设备故障等情况,所以教室状况对排课没影响。

老师:

老师的要求因人而异,而且多变,所以暂时把老师分为男女两类,男教师课适应高强度工作。

学生:

完全服从分配,对排课没有影响。

排课算法和假设规定

规则:

1必修课安排在上午或下午,选修课安排在晚上或周末;

2公共基础课优先在早上,实验课优先在下午安排;

3同一科目每天只能安排一次;

4老师一天上课不多于3节(6小节);

假设:

1学生完全服从课程安排;

2场地(课室)足够,完全可用状态,不考虑场地故障等因素;

3老师处于工作和健康状态;

4根据课程性质和上课场地的不同,将课程分为理论课和实验课两个课表;

模型建立:

模型一:

由于排课中各个元素关系复杂,首先考虑用排课高手软件排课。

主要流程如下:

1先输入全校的教师:

2设置课程表,包括循环天数,每天节数,班级数并输入全校的课程和班级名称和班主任:

3确定课程安排的规则,如连课,n班同上的课程,尽量不安排在哪节的课程等:

4模拟教室(设置教学楼名称,层数,每层的课室数并对课室编号):

5老师的要求(每天的最多课数,末节不排等):

 

6老师选课,确定哪位老师上哪班的课和每周上多少节课:

7最后由软件自动排课,完成后可查看每个班的课表并打印出来:

用排课高手排课可以省去了排课室和时间的问题,减少了不少的工作量,能比较全面地排课,是一款比较典型的排课软件。

 

模型二:

元素划分法:

将课表抽象为一个空格,这个空格由四种元素组成,分别是课程,地点,班级和时间。

由于老师教哪门课,教多少门课,哪个班的课是不定的,所以这里没有把老师编排到课表里面,而是完成课表后再由老师来选课,这样可以满足老师的各种要求,以老师为优先考虑条件。

但是老师必须按照规定去选,不能不选或多选。

 

同样我们也可以把元素班级改为老师,让班级去选。

这样可以让学生选自己喜欢的老师,满足学生的需要。

但是得规定学生必须按先到先得的原则选课和不能不选课。

 

模型三:

编程排课:

设要安排的课程为{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}.

从安排的可能性上看,共有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.算法分析

  此算法以课程为中心,进行搜索匹配,取最先匹配的值;具有占有空间少,运算速度快的特点。

但其未对数据进行择优选取,所以不能对教学资源(教师、教室)合理分配,也不能满足一些特殊要求(比如有些老师喜欢上午上课,有些老师偏向于集中式上课;有些课程安排到上午会更合适些,有些课程不能安排到上午等)。

心得体会

经过本次建模,我们深刻地了解到对建模对象的认识和了解非常重要,没有对建模对象的认识,就很难有建模的思维。

要对建模对象有全面的了解,经过搜集资料和数据,然后分析,对象可以用什么模型才合适。

建模的时候需要借助其他很多的资源,例如论文,软件工具,图像模型等,比较分析得出最优方案。

参考文献

[1]《自动排课算法分析》纳米程序员论文2011-08-03

[2]《排课高手》教学管理软件智能电脑排课系统21.10版

资料附录:

《排课高手》部分排课数据

各班排课设置(每班第1行:

级号,班号,班级名;若已有班级排课设置则以下各行为:

课程号、教师号、每周全周节数、教室号、其中每周补课节数,如果其中每周补课节数为“0”则表示该课程不允许排在补课位置,如果其中每周补课节数空则表示该课程在补课位置可排可不排。

):

13,01,0201

9,42,5,0,

12,56,5,0,

39,85,5,0,

13,70,4,0,

50,89,4,0,

21,100,3,3,

8,27,2,0,

1,114,2,0,

3,0,9,0,

0,0,2,0,

-1

13,02,0202

9,35,5,0,

12,56,5,0,

39,85,5,0,

13,70,4,0,

50,95,4,0,

21,100,3,3,

8,27,2,0,

1,114,2,0,

3,0,9,0,

0,0,2,0,

-1

13,03,0203

12,46,5,0,

39,95,5,0,

9,42,4,0,

13,70,4,0,

50,95,4,0,

21,100,3,3,

8,27,2,0,

1,114,2,0,

11,42,1,0,

3,0,9,0,

0,0,2,0,

-1

13,04,0204

38,82,6,0,

12,53,5,0,

9,41,4,0,

13,73,4,0,

5,29,4,0,

22,102,3,3,

1,114,2,0,

11,41,1,0,

3,0,10,0,

0,0,2,0,

-1

'每周天数:

6

'每天节数:

7

'各年级名称下面的“1”表示该班级课表已排,“0”表示该班级课表未排。

13年级01班,0201

1

星期1

0390850000

0500890000

0500890000

0030000000

021*******

021*******

0020010065

星期2

0090420000

0090420000

0120560000

0120560000

0030000000

0011140000

0030000000

星期3

0390850000

0390850000

0030000000

0030000000

0130700000

0130700000

0030000000

星期4

0120560000

0120560000

0500890000

0500890000

0090420000

0030000000

0000000000

星期5

0080270000

0080270000

0390850000

0390850000

0011140000

021*******

0030000000

星期6

0130700000

0130700000

0120560000

0000000000

0090420000

0090420000

0030000000

13年级02班,0202

1

星期1

0500950000

0500950000

0090350000

0090350000

0390850000

0030000000

0020010065

星期2

021*******

021*******

0030000000

0000000000

0120560000

0120560000

0011140000

星期3

0130700000

0130700000

0390850000

0390850000

0030000000

0030000000

0030000000

星期4

0500950000

0500950000

0120560000

0120560000

0090350000

0090350000

0030000000

星期5

0390850000

0390850000

0080270000

0080270000

0030000000

0030000000

0000000000

星期6

0120560000

021*******

0030000000

0011140000

0130700000

0130700000

0090350000

13年级03班,0203

1

星期1

0090420000

0090420000

0030000000

0030000000

0390950000

0011140000

0020010065

星期2

0500950000

0500950000

0030000000

0030000000

0130700000

0130700000

0120460000

星期3

0390950000

0390950000

0120460000

0120460000

0080270000

0080270000

0030000000

星期4

021*******

021*******

0090420000

0090420000

0011140000

0030000000

0000000000

星期5

0500950000

0500950000

0130700000

0130700000

0390950000

0390950000

0030000000

星期6

021*******

0110420000

0030000000

0030000000

0120460000

0120460000

0000000000

13年级04班,0204

1

星期1

0120530000

0120530000

0050290000

0050290000

0011140000

0030000000

0020010065

星期2

0130730000

0130730000

022*******

022*******

0380820000

0380820000

0030000000

星期3

0120530000

0120530000

0090410000

0090410000

0030000000

0030000000

0030000000

星期4

0380820000

0380820000

0050290000

0050290000

0030000000

0030000000

0011140000

星期5

0110410000

022*******

0030000000

0030000000

0130730000

0130730000

0000000000

星期6

0090410000

0090410000

0380820000

0380820000

0120530000

0030000000

0000000000

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1