⑴ 论文“计算机自动排课系统的设计与实现”的开题报告怎么写
方案名称:智能排课系统。
方案目的:利用计算机替代传统的繁琐的手工排课方法。
方案阐述:本系统受游戏设计中A星算法中的广度搜索法启发,结合手中的文献,总结出来的一种排课方式。本方案先采用采用信息收集的方式,收集信息。然后利用回逆算法进行智能排课。最后,再进行适当的人为调整,即可生成符合要求的课表。
方案详解:当需要生成课表时,用户需先设定排课条件。基本条件有:周课时设置,课程信息,班级信息,教师信息,场地信息,教学计划(即那些老师教那些班级、可以选择的空教室、是否有合班课等信息)。将所有信息存入数据库。自动排课,即系统自动调用数据库收集的信息然后利用设定的算法进行排课。最后,将系统生成的课表进行差错检查,分别在班级信息,教师信息,场地信息表中检测其有无冲突。然后进行查看和手工调课。最后生成所需求的课表。
算法详解:
回溯是一种优先搜索法。它按优先条件向前搜索,以达到目标,但当搜索到某一步时,发现原先的选择并不优或达不到目标,就退回一步重新选择。这种走不通就退回的技术为回溯法,而满足回溯条件的某个状态点称之为回溯点。
具体到计算机智能排课系统中,选优条件即为排课数学模型中的约束条件群(需求集中的元素特征与资源集中的元素特征相互作用形成的数学关系)。换言之,若不满足约束条件群,该选择即为不优或达不到目标。当遍历该步骤的所有可能仍未满足约束条件群,则该状态满足了回溯条件,该状态点即为回溯点。下图即为回溯算法排课流程。
值得指出的是,当得到第一次满足选优条件的排课结果后,可以将课表输出到屏幕上,由系统管理员直接审视排课结果,若感觉不满意,则可回到第一次得出的排课结果,将该状态设为回溯点,继续运行该算法,可以得到另一种排课结果,直至程序管理员满意为止。
当然,也有可能使用该法遍历了所有的可能,仍无满足选优条件之排课结果,此时,计算机就根据反馈的结果,自动放宽约束条件,重新进行排课。
该排课系统已在实际应用,排课结果较为理想,并且充分发挥了运算速度快的特点。
计算机自动排课也需要进行人工干预,以便可以使得各个高校能够根据自己的具体要求对排课算法中的一些参数进行设置和调整,并对计算机排出的课表进行调整.本算法所设计的人工干预过程有:等价类划分中参数的设置,教室类型的设置,时间模式库的设置,优先级函数中参数的设置.用户可以根据自己的具体要求对这些参数和库进行设置.另外,对于计算机排出的课程表,用户也可以通过人机交互进行适当调整,从而得到用户满意的课程表.
参考文献:《高校智能排课系统文献综述》
作者,日期不详。
《以代理人为基础的中学排课系统研究》
台湾高雄师大学 杨锦潭 欧文性
PS: 本人经过几天了解和获得老师的指点,觉得该系统如何能使用数据结构图和离散数学中的图论解决会能具有可操作性和智能性。另外,本人认为可以设计一个信息采集的接口,用于采集一些教师的需求信息(例如:不想上某个时段的课程。)这样可以使整个信息更加人性化,但实现起来也比较有难度。知识水平有限,只能在我所能想到的范围进行思考。
⑵ c++如何实现排课系统的算法
我的想法是……
1.首先把最难弄的老师排上,就是说她教的班多,限制多。(这步的实际操作就是把排课顺序按照班数排序)
2.随机安排课(当然要根据人类习惯,您总不能让他一天上七节课),安排方式为先满足部分人需求(当然不太公平),然后剩下的补空
3.这剩下的部分人可能因为班级的关系出现重课的问题,没有关系,先把他安排上去,用repeat循环逐层更改被冲突对象的课节(最后可以选把美术音乐等老师,他们安排到下午的话上午比较好换)
具体跟据实际来定。。……我乱讲讲。这是我的想法模型。
⑶ 排课的算法
排课算法是一个复杂程度相当高的算法,穷举是行不通的。不同的班级,不同的教师的课程纵横交错,不可能对每一种组合一一穷举。一间不到三十个班的学校,其课程组合的数量级常常超过整个宇宙质子数的总和。
但在这么多的课程组合中,找出“相对合理”的课程组合,满足学校、教师、学生的要求是可行的。
⑷ Python实现基于遗传算法的排课优化
排课问题的本质是将课程、教师和学生在合适的时间段内分配到合适的教室中,涉及到的因素较多,是一个多目标的调度问题,在运筹学中被称为时间表问题(Timetable Problem,TTP)。设一个星期有n个时段可排课,有m位教师需要参与排课,平均每位教师一个星期上k节课,在不考虑其他限制的情况下,能够推出的可能组合就有 种,如此高的复杂度是目前计算机所无法承受的。因此众多研究者提出了多种其他排课算法,如模拟退火,列表寻优搜索和约束满意等。
Github : https://github.com/xiaochus/GeneticClassSchele
遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。遗传算法的流程如下所示:
遗传算法首先针对待解决问题随机生成一组解,我们称之为种群(Population)。种群中的每个个体都是问题的解,在优化的过程中,算法会计算整个种群的成本函数,从而得到一个与种群相关的适应度的序列。如下图所示:
为了得到新的下一代种群,首先根据适应度对种群进行排序,从中挑选出最优的几个个体加入下一代种群,这一个过程也被称为精英选拔。新种群余下的部分通过对选拔出来的精英个体进行修改得到。
对种群进行修改的方法参考了生物DAN进化的方法,一般使用两种方法: 变异 和 交叉 。 变异 的做法是对种群做一个微小的、随机的改变。如果解的编码方式是二进制,那么就随机选取一个位置进行0和1的互相突变;如果解的编码方式是十进制,那么就随机选取一个位置进行随机加减。 交叉 的做法是随机从最优种群中选取两个个体,以某个位置为交叉点合成一个新的个体。
经过突变和交叉后我们得到新的种群(大小与上一代种群一致),对新种群重复重复上述过程,直到达到迭代次数(失败)或者解的适应性达到我们的要求(成功),GA算法就结束了。
算法实现
首先定义一个课程类,这个类包含了课程、班级、教师、教室、星期、时间几个属性,其中前三个是我们自定义的,后面三个是需要算法来优化的。
接下来定义cost函数,这个函数用来计算课表种群的冲突。当被测试课表冲突为0的时候,这个课表就是个符合规定的课表。冲突检测遵循下面几条规则:
使用遗传算法进行优化的过程如下,与上一节的流程图过程相同。
init_population :随机初始化不同的种群。
mutate :变异操作,随机对 Schele 对象中的某个可改变属性在允许范围内进行随机加减。
crossover :交叉操作,随机对两个对象交换不同位置的属性。
evolution :启动GA算法进行优化。
实验结果
下面定义了3个班,6种课程、教师和3个教室来对排课效果进行测试。
优化结果如下,迭代到第68次时,课程安排不存在任何冲突。
选择1203班的课表进行可视化,如下所示,算法合理的安排了对应的课程。
⑸ 怎么使用C#编写排课系统 急需 希望高手能帮助下 提供下具体步骤和源代码 感激不
我只提示,希望你自己完成
1、弄清楚排课算法,完成算法函数,注意输入输出接口
2、制定界面,定义输入输出(显示)模块(控件)
3、主程序或事件调用排课算法