好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

图论在排课问题中的研究.doc

13页
  • 卖家[上传人]:人***
  • 文档编号:541262023
  • 上传时间:2023-11-15
  • 文档格式:DOC
  • 文档大小:73.50KB
  • / 13 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 前言 这是我本科阶段做的毕业设计,之后不断有网友来邮件或留言询问算法的问题,所以在这里贴出与大家一起学习,有问题可以搬砖头(呵呵~~~~)        1   绪 论1.1课题背景与研究意义1.2课题的应用领域1.3 课题的现状1.4解决NP问题的几种算法及其比较2   目前流行的几种排课算法的介绍2.1. 自动排课算法2.2 基于优先级的排课算法3   基于时间片优先级排课算法描述与分析3.1排课中的基本原则3.2排课的基本要求3.3基于时间片优先级排课算法描述3.4算法分析1   绪 论 1.1课题背景与研究意义排课问题早在70年代就证明是一个NP完全问题,即算法的计算时间是呈指数增长的,这一论断确立了排课问题的理论深度对于NP问题完全问题目前在数学上是没有一个通用 的算法能够很好地解决然而很多NP完全问题目具有很重要的实际意义,例如大家熟悉地路由算法就是很典型的一个NP完全问题,路由要在从多的节点中找出最短 路径完成信息的传递既然都是NP完全问题,那么很多路由算法就可以运用到解决排课问题上,如Dijkstra算法、节点子树剪枝构造网络最短路径法等 等目前大家对NP 完全问题研究的主要思想是如何降低其计算复杂度。

      即利用一个近似算法来代替,力争使得解决问题的时间从指数增长化简 到多项式增长结合到课表问题就是建立一个合适的现实简约模型,利用该简约模型能够大大降低算法的复杂度,便于程序实现,这是解决排课问题一个很多的思 路在高等院校中,培养学生的主要途径是教学在教学活动中,有一系列管理工作,其中,教学计划的实施是一个重要的教学环节每学期管理人员都要整理教学计 划,根据教学计划下达教学任务书,然后根据教学任务书编排课程表在这些教学调度工作中,既有大量繁琐的数据整理工作,更有严谨思维的脑力劳动,还要填写 大量的表格因此工作非常繁重加之,随着教学改革的进行及“211”工程的实施,新的教育体制对课表的编排提出了更高的要求手工排课时,信息的上通下达是极其麻烦的,而采用计算机排 课,教学中的信息可以一目了然,对于优化学生的学习进程,评估每位教师对教学的贡献,领导合理决策等都具有重要的意义,必将会大大推进教学的良性循环 1.2课题的应用领域本课题的研究对开发高校排课系统有指导作用排课问题的核心为多维资源的冲突与抢占,对其研究对类似的问题(特别是与时间表有关的问题:如考试排考场问题、电影院排座问题、航空航线问题)也是个参 考。

       1.3 课题的现状年代末,国外就有人开始研究课表编排问题1962年,Gotlieb曾提出了一个课表问题的数学模型,并利用匈牙利算法解决了三维线性运输问题次后, 人们对课表问题的算法、解的存在性等问题做了很多深入探讨但是大多数文献所用的数学模型都是Gotlieb的数学模型的简化或补充,而至今还没有一个 可行的算法来解决课表问题近40年来,人们对课表问题的计算机解法做了许多尝试其中,课表编排的整数规划模型将问题归结为求一组0-1变量的解,但是其计算量非常大解决0-1线性优化问题的分支一定界技术却只适用也 规模较小的课表编排,Mihoc和Balas(1965)将课表公式化为一个优化问题,Krawczk则提出一种线性编程的方法Junginger将课表问题简化为三维运输问题,而Tripathy则把课表问题视作整数线性编程问题并提出 了大学课表的数学模型此外,有些文献试图从图论的角度来求解排课表的问题,但是图的染色问题也是NP完全问题,只有在极为简单的情况下才可以将课表编排转化为二部图匹配问题,这样的数 学模型与实际相差太远,所以对于大多数学校的课表编排问题来说没有实用价值进入九十年代以后,国外对课表问题的研究仍然十分活跃。

      比较有代表的有印度的Vastapur大学管理学院的ArabindaTripathy、加拿大Montreal大学的Jean Aubin和Jacques Ferland等目前,解决课表方法的问题有:模拟手 工排课法,图论方法,拉格朗日法,二次分配型法等多种方法由于课表约束复杂,用数学方法进行描述时往往导致问题规模剧烈增大,这已经成为应用数学编程解 决课表问题的巨大障碍国外的研究表明,解决大规模课表编排问题单纯靠数学方法是行不通的,而利用运筹学中分层规划的思想将问题分解,将是一个有希望得到 成功的办法在国内,对课表问题的研究开始于80年代初期、具有代表性的有:南京工学院的UTSS(A University Timetable Scheduling System)系统,清华大学的TISER(Timetable SchedulER)系统,大连理工大学的智能教学组织管理 与课程调度等,这些系统大多数都是模拟手工排课过程,以“班”为单位,运用启发式函数来进行编排的但是 这些系统课表编排系统往往比较依赖于各个学校的教学体制,不宜进行大量推广从实际使用的情况来看,国内外研制开发的这些软件系统在实用性上仍不尽如人意。

      一方面原因是作为一个很复杂的系统,排课要想面面俱到是一件很困难的事;另 一方面每个学校由于其各自的特殊性,自动排课软件很难普遍实用,特别是在调度的过程中一个很小的变动,要引起全部课程的大调整,这意味着全校课程大变动, 在实际的应用中这是很难实现的事 1.4解决NP问题的几种算法及其比较解决NP完全问题只能依靠近似算法,所以下面介绍几种常用算法的设计思想,包括动态规划、贪心算法、回溯法等  (一)动态规划算法动态规划法是将求解的问题一层一层地分解成一级一级、规模逐步缩小的子问题,直到可以直接求出其解的子问题为止分解成的所有子问题按层次关系构成一颗子 问题树树根是原问题原问题的解依赖于子问题树中所有子问题的解动态规划算法通常用于求一个问题在某种意义下的最优解设计一个动态规划算法,通常可 按以下几个步骤进行:    1. 分析最优解的性质,并刻划其结构特征    2. 递归的定义最优解    3. 以自底向上的方式计算出最优解    4. 根据计算最优解时得到的信息,构造一个最优解步骤1~3是动态规划算法的基本步骤在只需要求出最优解的情形,步骤4可以省去若需要求出问题的一个最优解,则 必须执行步骤4。

      此时,在步骤3中计算最优解时,通常需记录更多的信息,以便在步骤4中,根据所记录的信息,快速地构造出一个 最优解  (二)贪心算法当一个问题具有最优子结构性质时,我们会想到用动态规划法去解它,但有时会有更简单、更有效的算法,即贪心算法顾名思义,贪心算法总是做出在当前看来最 好的选择也就是说贪心算法并不是整体最优上加以考虑,他所作出的选择只是在某种意义上的局部最优的选择虽然贪心算法不是对所有问题都能得到整体最优 解,但对范围相当广的许多问题它能产生整体最优解,如图的算法中单源最短路径问题,最小支撑树问题等在一些情况下,即使贪心算法不能得到整体最优解,但 其最终结果却是最优解的很好的近似解在贪心算法中较为有名的算法是Dijkstra算法它作为路由算法用来寻求两个节点间的最短路径Dijkstra算法的思想是:假若G有n个顶点,于是我们总共需要求出n-1条最短路径,求解的方法是:初试,写出V0(始顶点)到各顶点(终顶点)的路径长度,或有路径,则令路径的长度为 边上的权值;或无路经,则令为∞再按长度的递增顺序生成每条最短路径事实上生成最短路径的过程就是不断地在始顶点V何终顶点W间加入中间点的过程,因为在每生成了一条 最短路径后,就有一个该路径的终顶点U,那么那些还未生成最短路径的路径就会由于经过U而比原来的路径短,于是就让它经过U。

        (三)回溯法回溯法有“通用的解题法”之称用它可以求出问题的所有解或任一解概括地说,回溯法是一个既带有系统性又带有跳跃性的搜索法它在包含问题 所有解的一颗状态空间树上,按照深度优先的策略,从根出发进行搜索搜索每到达状态空间树的一个节点,总是先判断以该节点为根的子树是否肯定不包含问题的 解如果肯定不包含,则跳过对该子树的系统搜索,一层一层地向它的祖先节点继续搜索,直到遇到一个还有未被搜索过的儿子的节点,才转向该节点的一个未曾搜 索过的儿子节点继续搜索;否则,进入子树,继续按深度优先的策略进行搜索回溯法在用来求问题的所有解时,要回溯到根,且根的所有儿子都已被搜索过才结 束;而在用来求问题的任一解时,只要搜索到问题的一个解就可结束2   目前流行的几种排课算法的介绍 2.1. 自动排课算法  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.1.2 .主要数据结构对于每一门课程,分配2 个字节的“时间段分配字”(无符号整数) :{ T1 , T2 , ., Tn} . 其中任何一个时间段分配字(假设为Ti ) 都具有如下格式:Ti 的数据类型C 语言格式定义为:unsigned int . Ti 的最高位是该课程目前是否是有效的标志,0 表示有效,1 表示无效(如停课等) ;其它各位称为课程分配位, 每个课程分配位占连续的3 个位(bit) ,表示某教学日(星期一~ 星期五) 安排该课程的时间段的值,0 表示当日未安排,1 ~ 4 表示所安排的相应的时间段(超过4 的值无效) .在这种设计下, 有效的时间段分配字的值应小于32 768 (十六进制8000) , 而大于等于32 768 的时间段分配字对应于那些当前无效的课程(既使课程分配位已设置好也如此) , 因此很容易实现停课/ 开课处理.  2.1.3 .排课算法在上述假设下,自动排课算法的目标就是确定{ C1 , C2 , ., Cn} 所对应的{ T1 , T2 , ., Tn} .从安排的可能性上看,共有20 !/ (20 - N) !种排法( N 的含义见(2) 式) . 如果有4 门课,每门课一周上2 次,则N = 8 ,这8 次课可能的安排方法就会有20 !/ (20 - 8) ! = 5 079 110 400 ,即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 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.