自动排课系统的制作方法

文档序号:16539844发布日期:2019-01-08 20:15阅读:310来源:国知局
自动排课系统的制作方法

本发明涉及计算机技术领域,尤其涉及一种自动排课系统。



背景技术:

目前,学校排课是一件复杂的事情,全校所有教师的课程,必须合理的安排,繁琐而又巨大的工程量,更是要耗费排课老师很长的时间,效率低。市面上出现一些利用计算机技术自动排课的系统,成功率为60%-85%,部分存在排错情况。



技术实现要素:

为了克服上述问题,本发明提供了一种自动排课系统。本发明提供的一种自动排课系统,包括:

输入模块,用于将教室信息、课程要求周次和教室、课程可排时间及权重、课程相关教师及学生、教师要求时间、已经安排的课程及其安排的时间和教室等信息至计算输入至计算分析模块;所述教室信息包括:使用性质、容量、位置;

计算分析模块,用于根据输入信息,利用迭代正向搜索算法iterativeforwardsearchalgorithm,加入可行性算法在保证强制约束的基础上放弃一些软约束来获得最优排课方案;

根据服务器配置开启多个进程,每个线程运算步骤简化描述如下:加载输入信息中读取教室基本信息、教师基本信息、学生基本信息、课程基本信息;从课程列表中选择一个课程;在考虑约束的前提下选择最优时间及教室安排;果已经全部安排、或接收到用户输入的结束命令、或运算超时,则结束该计算线程,进入输出模块;从课程列表中选择一个课程的步操作;

输出模块,用于将计算分析模块输入的运算结果及中间统计信息,排列出课表。

优选的,所述课程间约束分为强制约束和非强制约束,非强制约束只在最资源允许的情况下优先遵从;使用标准可读性强的xml文件作为基本输入输出数据格式;数据处理仅仅基于标记/代称而非任何其他有实际意义的信息,即使对外提供排课数据服务也可以完全规避信息泄露的风险;使用基于迭代的算法,从而使得排课运算过程中可随时停止、恢复。有益效果:自动排课系统合理安排各课程上课时间和教室。

自动排课系统性能优越、适用性好、使用方便,对于课多教室少的高校尤为重要。

自动排课系统符合各级别高校,针对高校教务管理信息化存在的诸多问题,有针对性的解决,有效的帮助学校规范教务管理过程。提供给管理人员、老师和学生高质量的教务服务。

自动排课与人工排课不分先后随时使用,对于喜欢手工排课的,自动排课系统也同样可以完全手工操作,确保不出错而且排课速度快。

附图说明

图1是上课时间设置示意图。

图2是排课设置示意图。

图3是所有待排课程及周次要求示意图。

图4是所有任课教师示意图。

图5是所有上课学生示意图。

图6是所有可用教室示意图。

图7是自动排课结果示意图。

具体实施方式

为使本发明解决的技术问题、采用的技术方案和达到的技术效果更加清楚,下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。

本实施例的自动排课系统,所述自动排课系统包括:

输入模块,用于将教室信息、课程要求周次和教室、课程可排时间及权重、课程相关教师及学生、教师要求时间、已经安排的课程及其安排的时间和教室等信息至计算输入至计算分析模块;所述教室信息包括:使用性质、容量、位置;

计算分析模块,用于根据输入信息,利用迭代正向搜索算法iterativeforwardsearchalgorithm,加入可行性算法在保证强制约束的基础上放弃一些软约束来获得最优排课方案;

根据服务器配置开启多个进程,每个线程运算步骤简化描述如下:

1)加载输入信息中读取教室基本信息、教师基本信息、学生基本信息、课程基本信息;

2)从课程列表中选择一个课程;

3)在考虑约束的前提下选择最优时间及教室安排;

4)如果已经全部安排、或接收到用户输入的结束命令、或运算超时,则结束该计算线程,进入输出模块;

5)重复第2)步操作;

计算过程如下:

迭代正向搜索算法

迭代前向搜索用于迭代,在每一步中,选中一个课程a,一般是一个未分配的课程,类似于基于回溯的搜索,当分配所有课程时,可以选择分配的课程,但目前已有的解决方案都不够完善(例如存在许多违反软约束的情况下)。一旦选择了一个课程a,就会为其选择一个来自其域da的值a(上课教师、上课学生、上课教室、上课时间)进行分配。即使选择了最佳值,其对所选课程的分配可能会与已分配的课程产生一些硬冲突,从解决方案中删除这些冲突的分配并变为未分配,最后,选定的值被分配给选定的课程。

迭代正向搜索算法

该算法尝试通过将所选值a分配给选定课程a从一个(部分)可行解σ移动到另一个,在这个搜索中,每个迭代步骤中所有硬约束的可行性通过取消冲突分配η(通过函数冲突计算)来完成。当找到请求的解决方案或者存在超时时(例如,达到最大迭代次数或可用时间)时,搜索终止,返回找到的最佳解决方案。

上述算法模式由几个函数参数化,即:

终止条件(函数cancontinue),

解决方案比较器(功能更好),

课程选择(函数selectvariable)

值选择(函数selectvalue)。

形式化

约束满足可以定义如下:如果赋值σ包含所有变量a1,a2,...an并且约束c满足该赋值,则变量a1,a2,...an的约束c满足赋值σ或分配σ可以扩展到包含所有变量a1,a2,...an的赋值γ,使得约束c满足该赋值γ。

在搜索过程中,在每个迭代步骤之后,我们有一个所有课程子集的赋值σ。这个分配是可行的,这就是说每个硬约束都满足这个分配σ。

这说明在每次迭代之后,我们都有一个一致的分配。一致性技术,只强制满足所有硬约束。同样,在搜索过程中可以强制执行任意一致性技术ζ的一致性。那么在每个迭代步骤后,我们有一个满足一致性检验ζ(θσ)的分配σ,其中ζ是一致性技术,θ是解决的约束满足问题。

函数冲突的任务是强化这种一致性。它返回当前分配的一个子集使得新的赋值(σ‐η)∪{a/a}关于使用的一致性技术ζ是一致的(a是课程,a是在当前迭代步骤中选择的值)。

(函数冲突的属性)。令θ=(v,d,c)为csp,σ为θ的一致(部分)赋值,a∈v为选定课程,εda为选定值。函数冲突返回使得赋值γ=(σ-η)∪{a/a}是关于某个给定一致性技术ζ的一致(部分)赋值。

在上面的定义中,我们假设在课程a的域da中只有值本身与关于一致性技术ζ的所有约束一致。这说明对于每个值a∈da,一致性检查ζ(θ{a/a})是真实的。至于基于约束满足的一致性,对于来自da的每个值a,所有约束满足赋值{a/a}。(即,为真)。否则,如果选择这样的不一致的值a,那么得到的分配γ不可能是一致的,因为它包含不一致的分配{a/a}(例如,c∈{,c({a/a})是假)。因为不可能存在包含这些值的一致分配,这些不一致的值可以在搜索开始时从域中永久过滤而不会造成破坏。

显然,我们正在寻找一个满足上面定义中属性的当前赋值σ的严格子集。最小子集是最好的,但计算起来的代价太大。我们目前的实施并不需要找到这样一组最小的“冲突”课程。取而代之,需要快速计算一个好的。

在基于回溯的算法中,这些“冲突”课程集和nogood集之间也存在对应关系。nogood集合是当前赋值不能满足的子集。从每个可以从分配σ∪{a/a}中计算出来的每个这样的nogood集合中,一个与a不同的课程需要被选入我们的冲突集合中。

终止条件

终止条件决定算法何时应该完成。例如,求解器应该在达到最大迭代次数或其他给定的超时值时终止。此外,当目前分配足够合理时,它需要停止搜索过程,例如所有课程被分配或一些其他解决方案在所需范围内。例如,排课进程可以在所有课程分配并且软约束违反少于10%时停止。用户决定终止排课进程也可以作为终止条件。

解决方案比较器

解决方案比较器比较两个分配:当前分配和找到的最佳分配。这种比较可以基于几个标准。例如,它可以根据未分配课程的数量和违反的软约束的数量按字母顺序排列分配。

课程选择

如上所述,所提出的算法需要选择在当前迭代步骤期间被重新分配的课程的函数。该功能相当于约束编程中的课程选择标准。选择一个课程有几条指导原则。在局部搜索中,通常会首先选择最大违规数量的课程。在基于回溯的算法中,经常使用首先失败原则,即首先选择实例化最复杂的课程。这可能是最大的一组约束或最小域的课程所涉及的课程。

我们可以将课程选择标准分为两种情况。如果一些课程保持未分配,则选择其中的“最差”课程,即应用首先失败原则。例如,这可以是具有最小域或具有最高数量的硬或软约束的课程。

第二种情况发生在分配所有课程时。由于当找到完整的可行分配时,算法不需要停止,因此也必须考虑这种情况下的课程选择标准。这里所有的课程都被分配,但是分配的不是很合理,例如,违反了软约束。我们选择一个课程,这个课程的值可以有最佳的分配改进。例如,课程分配到的值超出软约束的最大数量。

在这样的迭代之后,分配可能再次变得不完整,因为可以在值选择标准中选择与所有硬约束不一致的值。

值选择

选择一个课程后,我们需要找到一个值赋予课程。这个问题在约束规划中通常被称为“值选择”。通常,最有用的建议是选择最合适的值。因此,我们正在寻找一个最适合于课程的值,以便把复杂度最小化。这就是说我们需要找到一个不会与其他课程冲突的值。例如,可以从硬冲突最的那些中选择软约束违反最少的值。

为了避免循环,可以随机化选值过程。例如,可以为课程选择n个最佳值并随机选择其中的一个。或者,可以选择一组值,以使该组中最差值的启发式评估比最佳值的启发式评估高出最多p%。该值从该组中随机选择。如果有一个非常好的值,这第二个规则会抑制随机性。

违反约束造成冲突的分配

与其他传统的约束满足框架一样,问题由课程,值和约束组成。每个约束都是在课程的一个子集上定义的,它禁止这些课程可以同时采用的某些值组合。在许多csp中,所有约束条件都是二元的,因为大多数一致性和过滤技术仅为二元约束条件设计。在这种情况下,函数冲突非常简单,它返回给定分配的明确子集。它列举了包含所选课程和与选定值不一致的所有约束条件。

(二进制csp的函数冲突)。令θ=(v,d,c)为二元csp,σ为θ,a∈v和ada的可行(部分)赋值。函数冲突返回使得:

将返回所有涉及任何不满足约束的分配(使用新分配σ∪{a/a})。另外,如果选择的课程a已经被分配(所以为a选择了一个不同的值),它必须先被分配(课程a的前一分配将被返回)。

假设θ=(v,d,c)为弧一致的二元csp(即,),σ是θ的一个可行(部分)分配,a∈v和a∈da。函数冲突返回一组有冲突的分配它是最小的(关于η的基数)并且γ=(σ‐η)∪{a/a}是θ的可行(部分)分配。

证明可行性:设γ=(σ‐η)∪{a/a}是不可行的,则存在不满足γ的约束c∈c。这意味着c也不满足σ∪{a/a}。由于c满足σ(σ是一个可行的分配),a∈dom(c)。因为c是二元的,所以有b∈dom(c),a≠b。有以下可能性:

●∈b∈b,{b/b}∈σ:但是由于{∈c({a/a,b/b})&{b/b}∈σ↓c),{b/b}η,c满足γ是矛盾的。

但由于(因为c在σ中是满足的且问题是弧一致的),所以c是满足σ∪{a/a},因此也满足(σ‐η)∪{a/a}。

极小证明:任一

●b=a和b≠a:在这种情况下{b/b}必须在η中,因为a不能被分配两次(γ必须是一个分配)

●或者由于所有的约束条件都是二元的,所以∈c∈c({a/a,b/b})。

在这两种情况下,{b/b}必须包含在任何冲突的集合中,否则γ不是分配(a分配两次)或不可行(存在不满足的约束)。因此,每一组冲突课程都必须包含依据冲突检查计算的集合η。

另一方面,大多数实际问题都有很多课程约束,例如,时间表中的资源约束。这种资源约束强制规则:使用给定资源的事件中没有一个可以在时间中重叠(在资源具有第一容量的情况下)或者一次使用的资源量不超过其容量。用一组二元约束代替这样的资源约束(例如,禁止相同资源在两个特定事件的时间中重叠)是没有用的,因为这种方法通常以数千个约束结束。此外,通常还有更有效的一致性或过滤技术处理原始约束(例如,“累积”约束[rm03]通常在clp中用于构建资源约束)。

使用多课程约束,由函数冲突返回的冲突集可根据其具体实现而不同。例如,我们可以有一个约束a+b=c,其中a和c已经被分配给a=3和c=5(即,σ={a/3,c/5})。那么如果选择了分配b=3,则a或c或者a和c都可以不分配以使{a/3,b/3,c/5}与约束a+b=c一致。简单来说,每个迭代步骤中应该有最小数量的未分配课程。另外,对于许多约束条件,即使并非所有约束课程都已分配,也可能发现不一致。例如,如果同时使用同一教室的两个课程,我们知道即使有未分配的课程,也需要将其中一个放置在该教室中,但其中一个课程需要取消分配。

在我们的ifs求解器中,每个硬约束都需要实现computeconflicts过程,该过程返回所有已分配的与所选分配不兼容的课程。对于包含所选课程的所有约束,以有序方式(按约束插入系统的顺序)调用此过程。在搜索过程中可以更改此顺序。此外,计算出的一组冲突作为参数传递给computeconflicts过程,因此约束可以“看到”已被先前处理的约束条件选择用于未分配的冲突,并且可以取消分配较小数量的课程。例如,如果存在对新分配c=c不满意的约束a+b=c,则computeconflicts过程可以选择已由某些先前约束选择的课程(a或b)。这样,我们并不计算最小的冲突集合,但是,我们允许以有效的方式计算这个集合。它也可以通过改变约束的顺序来针对特定问题进行调整。对于我们的时间表问题,我们不需要考虑这个顺序,因为大多数约束都是单件容量的资源约束,其中冲突的分配被准确给出。

冲突检查过程

还要注意,每个约束都可以保留它对分配课程的概念。例如,一个特定教室的资源约束可以记住一个查询表,说明在什么时间段内分配了课程,因此为了计算冲突的课程,它只能通过该表的适当字段来查看。该实现基于收听“课程分配”和“课程未分配”事件。默认一致性技术是在问题级别上定义的,并且可以通过更专用的方法来更改,并针对特定问题实施。

令θ=(v,d,c)为csp,σ为θ的可行(部分)分配,a∈v为选定课程,εda为选定值。如果(c,σ,a,a)是σ的一个子集,所以c((σ‐ηc)∪{a/a}),新分配γ=(σ‐η)∪{a/a}其中η={b/b|∈c∈ca∈dom(c)&b/b∈ηc}是θ的可行分配。

证明:定义一个可行的分配,如果所有的约束满足分配(即)并且来自由于因此因为σ是可行的分配,所以不包含课程a的所有约束也在新的分配γ中得到满足。

输出模块,用于将计算分析模块输入的运算结果及中间统计信息,排列出课表。

其中,所述课程间约束分为强制约束和非强制约束,非强制约束只在最资源允许的情况下优先遵从;使用标准可读性强的xml文件作为基本输入输出数据格式;数据处理仅仅基于标记/代称而非任何其他有实际意义的信息,即使对外提供排课数据服务也可以完全规避信息泄露的风险;使用基于迭代的算法,从而使得排课运算过程中可随时停止、恢复。

以某大学2017-2018第二学期为例,说明排课设置及排课结果。由于排课算法过程计算复杂,每次排课会进行上千万次计算,故此处省略计算过程,只给出排课设置等输入项和排课结果。以下图1至图7,可用文字做相关说明,不可以附图。

上课时间设置,如图1所示。

设置课节号、上课开始/结束时间、排课权重。

排课设置,如图2所示。

设置排课学年学期、排课起始结束周、是否排教室/周末/选修课、同时间选修课最大数量、教室容量与上课学生的比例、一周多次课的时间间隔要求、学院/课程排课优先级、全局/课程/教师/学院的时间要求。

所有待排课程及周次要求,如图3所示。

待排课程列表界面,能够显示课程的计划、任务以及已排数据,选择待排课程,自动显示已安排的班级,选择班级后直接列出安排的周次、周模式、连上节、分组、排课情况。

所有任课教师,如图4所示。

显示所有任课教师的教工号、姓名、职称、学位、职务、所属机构、教研室、编制类别、任课状态。

所有上课学生,如图5所示。

显示所有上课学生的学号、姓名、年级、性别、行政班、专业、院部、学生状态、在校状态、学籍状态、学期注册状态。

所有可用教室,如图6所示。

显示所有可用教室的编码、门牌号、名称、功能类型、所在校区、所在楼、楼层数、授课人数、所属机构、状态。

自动排课结果,如图7所示。

显示选择的排课任务的学年学期以及该任务的总教学班、已排教学班、未排教学班、成功率、当前轮次/总轮次、课程性质、排课学院、创建时间、更新时间、状态。可以结果中进行清除排课数据、重新排课、暂停排课、删除排课结果。

总结,该大学在教室资源紧张,教师上课时间不稳定情况下,排课结果明显好于其它系统。原系统排课成功率:60%-85%,部分存在排错情况。自动排课系统成功率:88%-92%,无排错情况。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1