基于遗传算法排课系统研究与实现

合集下载

基于遗传算法的排课问题研究

基于遗传算法的排课问题研究

图1 遗传算法的主要步骤)提高资源利用率在相同教室里上课的学生人数S Ci与该教室的容量越接近1(最大为1),说明该教室的资源利用率越高,当该比值是1时,说明该教室的容量和在该教室上课的学生人数相等。

优化目标为:Max( f1)=∑SC iSR j)合理安排课程时间关于那些不相同的课程δj,需要给让他们以不同的比重表示,优化目标为:Max( f2)=∑εr*δj)解决同一课程上课地点问题同一课程,为了方便教师和学生尽量在同一教室上课,对于某一个课程,如果一周中两次上课的地点如果相同,就给予权重1,否则为0,则优化目标为:Max( f3)=∑ g(k i)图2 种群个体适应度参考文献李阳,张欣.基于改进遗传算法的高校排课优化问题研电子科技,2016,29(5):127-129,138.赵刚.基于遗传算法的高校排课系统研究[D].安工业大学,2011:28.海燕.遗传算法在高校排课中的应用,2019(3):153-154.陈莉莉,胡宁.基因遗传算法在智能排课系统中的应用电脑知识与技术,2019,15(6):159-161.刘腾,吴仁协,李毅.基于遗传算法的高校排课问题探重庆电子工程职业学院学报,2018,27(3):91-93.梁利亭.遗传算法在高职院校排课问题中的研究与应用湖北开放职业学院学报,2019,32(1):76-78.樊星.利用遗传算法求解大学课表问题[J].科学技术与,2007,7(9):67-68.由扬.遗传算法在高校排课系统中的应用研究的可行性中小企业管理与科技(下旬刊),2010(30):133-134.王廷明.关于排列逆序数的进一步性质及其应用庄学院学报,2007,24(5):12-13.刘腾,吴仁协,李毅.基于遗传算法的高校排课问题探重庆电子工程职业学院学报,2018,27(3):91-93.薄钧戈,苏红旗.一种基于遗传算法的排课方法研究,2014,35(1):43-45.李敏强.遗传算法的基本理论与应用[M].,2002:45.。

遗传算法在排课系统中的应用研究的开题报告

遗传算法在排课系统中的应用研究的开题报告

遗传算法在排课系统中的应用研究的开题报告第一部分:选题背景与意义排课系统作为学校管理信息化的重要组成部分,已经成为了现代信息化学校的标配。

传统的排课系统大多采用贪心算法等基本算法,容易陷入局部最优解,导致排课结果并不理想。

而今日所面临的复杂的教学环境对排课的要求越来越高,例如教室、教师、学生等各种资源的分配等。

这就使得排课问题变得更加复杂。

同时,目前,世界上许多学校尝试将遗传算法应用于排课系统中,并在实践中取得了较好的效果。

本文将以遗传算法在排课系统中的应用为研究题目,探究遗传算法在这一领域中的优势与不足,并以此为基础提出一种更高效的排课方案。

本研究的主要目的是探索如何使用遗传算法来解决排课问题,并针对目前排课系统中存在的问题进行改进,减少人力资源的浪费,提高排课效率和质量。

第二部分:文献综述众所周知,遗传算法作为优化问题的一种优秀的搜索算法,近年来被广泛应用于排课系统中。

通过以下两个方面,遗传算法在排课系统中具有优势:1.适应度函数的定义适应度函数是遗传算法优化的重要部分,它主要根据所需的指标和约束对可能的解进行评估。

在排课系统中,适应度函数测量的是解决方案的质量。

通过精准定义适应度函数,可以让排课系统更加准确地评估解决方案的质量。

这有助于遗传算法更准确地找到最优的解决方案。

2.自然选择和遗传流程遗传算法中的两个核心部分是自然选择和遗传流程。

自然选择保留每个个体的一部分,而将另一部分替换为新个体来生成新的个体群。

遗传流程通常包括选择、交叉、变异和替换等步骤,在每一步中都需要选择最优解。

在排课系统中,这些过程可以通过选择父母、交叉教师和班级、变异和替换一部分对当前解进行操作,以生成下一个个体群。

总之,遗传算法在排课系统中的应用具有以下优点:(1)考虑了多个方面的复杂性。

(2)适应度函数可以定义使其更能代表解决方案的质量。

(3)自然选择和遗传流程确保了多样性,防止陷入局部最优解。

第三部分:研究方法本研究计划采用遗传算法来解决排课问题。

遗传算法在排课问题上的应用研究

遗传算法在排课问题上的应用研究

遗传算法在排课问题上的应用研究
遗传算法在排课问题上的应用研究
排课问题是一类特定的调度问题,是日常性和生活中常见的问题,具有复杂的决策过程和可行解空间。

由于排课问题所考虑到的因素众多,并且约束条件复杂,使得排课问题具有难度大、计算量大、搜索空间大等特点,这使得精确求解排课问题变得极其困难,已有不少学者将遗传算法引入排课问题的研究之中,这也成为当前研究的热点。

遗传算法是一种基于自然选择机制的模拟算法,它是一种仿生算法,是一种用于解决复杂优化问题的有效算法,是一种基于模拟的算法,它可以帮助我们解决复杂的优化问题,包括最大化和最小化目标函数的值,它在处理复杂的优化问题方面表现出了良好的性能。

遗传算法是一种进化算法,它将种群中的每一个个体看作是一个可行解,当满足一定约束条件后,经过一系列的选择、交叉、变异等过程,最终达到最优解。

遗传算法在排课问题中可以根据求解目标,采用合适的选择、交叉、变异等进化算子,对种群进行进化,最终达到最优解。

由于排课问题的复杂性,已有不少学者将遗传算法引入排课问题的研究之中,并取得了良好的效果。

首先,遗传算法可以快速地搜索出符合约束条件的可行解,其次,在处理复杂的约束条件时,遗传算法可以快速地求得最优解,并可以把结果保持在一定的范围内,最后,遗传算法可以有效的解决排课问题的约束条件,并且可以提高效率。

总之,遗传算法是一种有效的排课算法,它可以有效的处理排课问题的复杂约束条件,并可以快速的搜索出最优解。

遗传算法在排课问题上的应用研究

遗传算法在排课问题上的应用研究

遗传算法在排课问题上的应用研究遗传算法是一种基于自然选择的搜索算法,它可以在一组可能的解决方案中找到一个最优解,因此被广泛应用于基于最优解的问题中。

在教育领域,排课是一个重要的问题,也是一个复杂的问题,有关排课的研究已经开展了很多年,但仍存在解决排课问题更有效的方法。

因此,基于遗传算法在排课问题上的应用研究是一个值得研究的话题。

首先,本文将介绍遗传算法在排课问题上的应用,它的基本原理是通过不断的进化,以适应性优良的解决方案来解决排课问题。

在排课中,遗传算法可用于解决课程安排问题、教室安排问题、课程冲突问题、运行时间问题等。

它采用一种基因编码来表示排课问题,通过进行变异、交叉操作等染色体变换来改进排课方案。

接下来,将研究以教室排课、课程安排两个方面的应用来深入讨论遗传算法在排课问题上的应用。

在教室排课方面,遗传算法可以实现有效的教室分配。

它可以根据不同的课程的教室需求、教师的教室需求以及教室的可用时间来安排课程。

其中,教师和教室的需求条件也可以设置不同级别的权重,从而更加细化设置排课条件,实现更有效的教室排课。

此外,遗传算法可以考虑到各个教室之间的时间冲突,以及多个教室之间容纳参加课程学生的数量,从而实现更有效的教室排课。

在课程安排方面,遗传算法可以有效的帮助教师安排课程,以满足不同的教育要求,实现教师之间的合理分配和课程之间的平衡。

通过编码人口,可以对课程进行编码,从而实现更好的课程安排。

例如,可以根据课程的难度、学生的学习需求、教师的专业能力等因素来安排课程,从而实现更有效的课程规划。

此外,遗传算法也可以用于解决课程冲突问题,以及安排课程表的运行时间。

当多个课程之间发生冲突时,可以采用遗传算法来解决冲突问题,从而保证排课的效率和准确性。

另外,运行时间也可以通过遗传算法来优化,以满足课程表的需求。

本文讨论了遗传算法在排课问题上的应用,主要以教室排课和课程安排两个方面来讨论它的应用,还讨论了它解决课程冲突和运行时间问题的能力。

Java实战项目基于遗传算法学校排课系统的实现流程

Java实战项目基于遗传算法学校排课系统的实现流程

Java实战项⽬基于遗传算法学校排课系统的实现流程⼀、项⽬简述本系统功能包括:排课管理,课程管理,讲师管理,班级管理,学⽣管理,教学资料,学习⽂档,在线测试,教材列表,教学设计,帮助中⼼等等功能。

⼆、项⽬运⾏环境配置:Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也⾏)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都⽀持)。

项⽬技术:Springboot + Maven + mybatis+ Vue 等等组成,B/S模式 + Maven管理等等。

管理员控制器:/*** 管理员控制器*/@RestControllerpublic class AdminController {@Resource(name = "adminService")private IAdminService adminService;/*** 管理员查询管理员列表*/@RequestMapping(value = "/admin/qryPage", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) @RoleAnnotation(types = {RoleEnum.admin})public ListResult<Admin> qryPage(HttpRequest request) {Map<String, Object> param = new HashMap<>();int pageNo = request.containsKey("page_no") ? request.getInteger("page_no") : 1;int pageSize = request.containsKey("page_size") ? request.getInteger("page_size") : 20;if (request.containsKey("login_name")) {param.put("login_name", request.getString("login_name"));}if (request.containsKey("name")) {param.put("name", request.getString("name"));}return adminService.qryPage(param, pageNo, pageSize);}/*** 管理员添加管理员*/@RequestMapping(value = "/admin/add", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})@RoleAnnotation(types = {RoleEnum.admin})public Result<Admin> insert(HttpRequest request) {Admin admin = new Admin();admin.setLoginName(request.getString("login_name"));admin.setName(request.getString("admin_name"));admin.setPwd(request.getString("login_name"));admin.setSex(request.getInteger("sex"));admin.setUpdateTime(new Date());return adminService.insert(admin, ImageUtil.stringToBytes(request.getString("admin_image")));}/*** 管理员更新管理员*/@RequestMapping(value = "/admin/update", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) @RoleAnnotation(types = {RoleEnum.admin})public Result<Admin> update(HttpRequest request) {Admin admin = new Admin();admin.setLoginName(request.getString("login_name"));admin.setName(request.getString("admin_name"));admin.setPwd(request.getString("login_name"));admin.setSex(request.getInteger("sex"));admin.setUpdateTime(new Date());return adminService.update(admin, ImageUtil.stringToBytes(request.getString("admin_image")));}/*** 管理员删除管理员*/@RequestMapping(value = "/admin/del", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})@RoleAnnotation(types = {RoleEnum.admin})public Result<Admin> del(HttpRequest request) {List<String> adminIdList = new ArrayList<>();JSONArray array = request.getJSONArray("admin_id_list");for (int i = 0; i < array.size(); i++) {adminIdList.add(array.getString(i));}return adminService.del(adminIdList);}}学⽣控制器:/*** 学⽣控制器*/@RestControllerpublic class StudentController {@Resource(name = "studentService")private IStudentService studentService;/*** 管理员查询学⽣列表*/@RequestMapping(value = "/student/qryPage", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) @RoleAnnotation(types = {RoleEnum.admin})public ListResult<Student> qryPage(HttpRequest request) {Map<String, Object> param = new HashMap<>();int pageNo = request.containsKey("page_no") ? request.getInteger("page_no") : 1;int pageSize = request.containsKey("page_size") ? request.getInteger("page_size") : 20;if (request.containsKey("student_id")) {param.put("student_id", request.getString("student_id"));}if (request.containsKey("name")) {param.put("name", request.getString("name"));}return studentService.qryPage(param, pageNo, pageSize);}@RequestMapping(value = "/student/add", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})@RoleAnnotation(types = {RoleEnum.admin})public Result<Student> insert(HttpRequest request) {Student student = new Student();student.setStudentId(request.getString("student_id"));student.setName(request.getString("student_name"));student.setPwd(request.getString("student_id"));student.setSex(request.getInteger("sex"));student.setClassId(request.getString("class_id"));student.setUpdateTime(new Date());return studentService.insert(student, ImageUtil.stringToBytes(request.getString("student_image")));}@RequestMapping(value = "/student/update", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) @RoleAnnotation(types = {RoleEnum.admin})public Result<Student> update(HttpRequest request) {Student student = new Student();student.setStudentId(request.getString("student_id"));student.setName(request.getString("student_name"));student.setPwd(request.getString("student_id"));student.setSex(request.getInteger("sex"));student.setClassId(request.getString("class_id"));student.setUpdateTime(new Date());return studentService.update(student, ImageUtil.stringToBytes(request.getString("student_image")));}@RequestMapping(value = "/student/del", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})@RoleAnnotation(types = {RoleEnum.admin})public Result<Student> del(HttpRequest request) {List<String> studentIdList = new ArrayList<>();JSONArray array = request.getJSONArray("student_id_list");for (int i = 0; i < array.size(); i++) {studentIdList.add(array.getString(i));}return studentService.del(studentIdList);}}教师控制器:/*** 教师控制器*/@RestControllerpublic class TeacherController {@Resource(name = "teacherService")private ITeacherService teacherService;/*** 管理员查询教师列表*/@RequestMapping(value = "/teacher/qryPage", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})@RoleAnnotation(types = {RoleEnum.admin})public ListResult<Teacher> qryPage(HttpRequest request) {Map<String, Object> param = new HashMap<>();int pageNo = request.containsKey("page_no") ? request.getInteger("page_no") : 1;int pageSize = request.containsKey("page_size") ? request.getInteger("page_size") : 20;if (request.containsKey("teacher_id")) {param.put("teacher_id", request.getString("teacher_id"));}if (request.containsKey("name")) {param.put("name", request.getString("name"));}return teacherService.qryPage(param, pageNo, pageSize);}/*** 管理员添加教师*/@RequestMapping(value = "/teacher/add", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})@RoleAnnotation(types = {RoleEnum.admin})public Result<Teacher> insert(HttpRequest request) {Teacher teacher = new Teacher();teacher.setTeacherId(request.getString("teacher_id"));teacher.setName(request.getString("teacher_name"));teacher.setPwd(request.getString("teacher_id"));teacher.setSex(request.getInteger("sex"));teacher.setUpdateTime(new Date());return teacherService.insert(teacher, ImageUtil.stringToBytes(request.getString("teacher_image")));}/*** 管理员更新教师属性*/@RequestMapping(value = "/teacher/update", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})@RoleAnnotation(types = {RoleEnum.admin})public Result<Teacher> update(HttpRequest request) {Teacher teacher = new Teacher();teacher.setTeacherId(request.getString("teacher_id"));teacher.setName(request.getString("teacher_name"));teacher.setPwd(request.getString("teacher_id"));teacher.setSex(request.getInteger("sex"));teacher.setUpdateTime(new Date());return teacherService.update(teacher, ImageUtil.stringToBytes(request.getString("teacher_image")));}/*** 管理员删除教师*/@RequestMapping(value = "/teacher/del", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})@RoleAnnotation(types = {RoleEnum.admin})public Result<Teacher> del(HttpRequest request) {List<String> teacherIdList = new ArrayList<>();JSONArray array = request.getJSONArray("teacher_id_list");for (int i = 0; i < array.size(); i++) {teacherIdList.add(array.getString(i));}return teacherService.del(teacherIdList);}/*** 管理员查询所有任教⽼师*/@RequestMapping(value = "/teacher/qryAllList", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})@RoleAnnotation(types = {RoleEnum.admin})public ListResult<Teacher> qryAllList() {return teacherService.qryAllList();}}到此这篇关于Java 实战项⽬基于遗传算法学校排课系统的实现流程的⽂章就介绍到这了,更多相关Java 排课系统内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。

基于遗传算法的排课优化问题求解

基于遗传算法的排课优化问题求解

基于遗传算法的排课优化问题求解排课优化问题一直是学校、大学以及一些培训机构所必须要面对的难题,在人力资源有限的情况下,如何科学地排出一个合理且不冲突的课表,已经成为了许多学校面临的共同问题。

为了解决这一难题,科学家和工程师们通过运用遗传算法和其他优化算法的方法,开发了许多可行性方案。

本文将从遗传算法的角度来探讨排课优化问题。

遗传算法(Genetic Algorithm)是一种模拟自然界进化的算法。

在自然界中,个体之间通过基因的遗传组合完成进化,并产生了最适应环境的生物种群。

将这种思想运用到人工智能领域中,遗传算法会更加聚焦于表现最佳的计算模型,从而求解出问题最优解。

在将遗传算法应用到排课优化问题中,我们首先需要清楚我们的目标,也即是要确定如何评价可以生产出合适课程表的个体(也就是排出来的课程表方案)。

通常我们选择以下几个指标:1.冲突数:每次安排的排课必须要避免同一时间段安排了不同课程的同学出现冲突的情况。

2.教师数量:我们需要限制每个教师一天最多要授课的数量。

3.上课时间:不同年级或专业应该拥有不同的上课时间设定。

4.考试时间:考试最好不要安排在同一天,或考试之间要有合适的缓冲时间。

在确定了目标之后,剩下的就是如何将遗传算法应用于实践中。

首先,我们需要确定个体应该包括哪些元素。

通常,我们选择将每个个体定义为一个完整的课程表,并将每节课定义为单一个体上的基因变量。

每个体内包括所有的课程计划,教室,教师和学生信息,并建立起课程表和基因之间的关系。

经过基因变异,评分和自然选择步骤后,我们就能得到最适应环境,即最优解的课程表方案。

在遗传算法中,最适应环境的确定方式通常是通过一个称为适应度函数(Fitness Function)的评分公式来计算的。

适应度函数由用户来设定,根据具体应用场景的实际需求设置不同的适应度计算规则。

这个过程可以理解为将每个个体放入一个生态系统中,生态中的任务是评判每个个体的适应度,并将最适应生物的优良特性遗传下去。

遗传算法在高职院校排课问题中的研究与应用

遗传算法在高职院校排课问题中的研究与应用

遗传算法在高职院校排课问题中的研究与应用高职院校排课问题是一个非常复杂的优化问题,需要同时考虑许多因素如课程时长、教学资源、校区距离等等。

为了有效地解决这个问题,许多研究者开始探索使用遗传算法优化排课方案。

遗传算法是一种仿生优化算法,通过模拟自然选择和遗传进化的过程,对问题的解空间进行搜索、评估和迭代,最终找到一个最优解。

在排课问题中,遗传算法可以将排课的各项约束条件建立为一个优化模型,然后通过不断地变异、交叉和选择,搜索出满足各项约束条件的最优解。

1. 选择合适的适应度函数:在遗传算法中,适应度函数是非常重要的一个概念,它可以评估一个个体在当前环境下的适应能力。

在高职院校排课问题中,适应度函数可以选择多种方式进行设计,比如考虑教师的空闲时间、课程的连续性、校区之间的距离等多个因素,从而得出一个综合评估结果。

合适的适应度函数可以为遗传算法提供搜索方向,提高搜索效率。

2. 变异和交叉策略的确定:变异和交叉是遗传算法中最重要的两个操作,它们直接决定了搜索空间的扩散和交叉。

在排课问题中,变异和交叉的策略可以通过考虑教师的特定需求、课程的特殊情况等因素,设计出合理的策略,从而增加搜索空间中更多的合理解。

3. 合适的群体大小和迭代次数:在遗传算法中,群体大小和迭代次数是两个非常重要的参数。

在高职院校排课问题中,合适的群体大小和迭代次数可以直接影响算法的效率和精度。

为了达到较优解的搜索效果,群体大小和迭代次数需要根据具体问题进行合理设计。

基于以上的研究和应用,遗传算法在高职院校排课问题中得到了广泛的应用,取得了很好的效果。

许多学者已经发表了大量的相关论文,推进了遗传算法的相关研究。

未来,可进行进一步的优化与应用,以实现更为普遍的应用和更好更快的解决问题。

基于遗传算法的实验室排课系统设计与实现

基于遗传算法的实验室排课系统设计与实现

.排
课 问题 就是 在给 定教 师 资 源 , 教 室 资 源和 开 课 计 划 的 前 提下 , 如何 合理 地 安 排 课 表问 题 . 其实 质 是 含 约 束
收 稿 日 期 : 2009 - 08 - 26 基 金 项 目 : 黑 龙 江 科 技 学 院 数 字 化校 园 建 设 项 目 ( 08 11 ) 作 者 简 介 : 金 民 锁 ( 197 7- ) , 男, 黑 龙 江 双 鸭山 人 , 硕士, 工程师, 研 究方向: 网络安全与计算算法. Tel . : 1325 16 16 6 61 , Em ai l :j m s98 02@ 126 .c om
条 件的 目标 函数 优化 问 题, 运 筹 学 中 论及 了 一 些 特 殊 的 优化 问题 求解 方法 , 如线 性规 划的 单纯 形法 等
[3 ]
.
在 对排 课问 题建 立 数 学 模型 后 , 发现 它 难 以 用 传 统 的启 发式 算法 求解 , 而 且 其 约 束 条 件和 目 标 函 数 难
[ 1]
2 排课系统的算法分 析
遗 传算 法是 H ol l an d 根 椐 生物 进 化 的模 型 提 出 的 一 种优 化算 法 , 它 是 基于 进 化 过 程 中 的信 息 遗 传 机 制 和 优胜 劣汰 的自 然选择 原则 和搜 索算 法 . 它从 一个 种 群 开始 , 利用 选择 , 交叉, 变 异 等 遗 传 算子 对 种 群 进 行 不 断进 化 , 最 后得 到 全 局最 优 解 或 近 似 最优 解
D
R B
L G
J I N M -
A A
C
( In f or m at i on Net w or k C en t e r ,H ei l on gj i an g I n st i t ut e of Sc i en c e & Te c hn ol ogy,H ar bi n 15 0027,C hi n a) A : B e c ause t he p r obl e m of ar r an gi ng c our se i s apr obl em ofabsol ut e NP op t i mi zat i on ,t hi s p ap eradop t s ge n et i c
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于遗传算法的排课系统的研究与实现
摘要:介绍是排课问题,分析了排课的数学模型,分析了基于遗传算法的排课算法的基本原理及及其算法特点,利用时间模式,提出了基于遗传算法解决排课问题的方法,并验证了该方法的有效性。

关键词:排课;遗传算法;多目标优化;时间模式
中图分类号:g623.5 文献标识码:a 文章编号:
1.引言
人工编排课程表是教务人员在进行教学管理中最为头疼的工作之一。

它涉及到很多的软件硬件资源和内外部因素,如:时间、地点、教师、学生及课程等。

尤其是随着高职院校的不断扩招而软硬件设备没有及时更新和增加,造成了人多教室省、课程多时间少等状况。

这些问题使得学校的教学管理无法正常进行。

传统的人工排课方式存在有以下几个方面的问题:人工编排课程表工作量大人工编排课程表依赖于人为因素;人工编排课程表可维护性差;人工编排课程表安全性差。

排课系统就是在教师、教室和时间这3大资源数量有限,约束不同的条件下,合理安排班级的课程,使得学生和教师获得较为合理的上课时间和空间,是一个多目标的调度问题。

如何实现课表的合理安排是当前高校教学管理人员值得研究的问题。

遗传算法(genetic algorithm,简称ga)是一种自适应随机搜索算法,具有全局收敛性和并行性,且对模型是否线性、连接、可微
等不作限制,也不受优化数目、约束条件的束缚,所在工程优化、图像处理和模式识别等领域取得广泛的应用。

本文将结合实际排课中所涉及到的各类约束、优化目标设计一种特定的基因编码方法,和相应的目标评价函数,并在实际应用中取得了较好的效果。

2.数学模型分析
排课问题是求解三元组(lecture,time,room)课程、时间和教室的统筹调度,即给指定的课程安排适应时间、空间等教学资源,使学校课程整体达到一个较为合理的状态,其中课程又包含了(classes,lesson,teacher)三个元素,即每个授课的班级、课程名称和对应的老师是相关的,这些授课计划数据是系统的输入部分,而一个合理的排课结果是指使目标函数达到优值,表现为课程的时间安排均匀、教室利用率高、尽可能多满足教师偏好等。

实现此结果关键在于如何解决排课过程的众多约束和有效目标函数的建立。

对于一个班级的某一个时刻不能上一门以上的课程,而在高校中由于资源紧张许多课程大班开课,因此对一次授课要求所有上该课的班级在该时刻没有其他课程,则对于任何一门课程开设时间为t 的课程lec有=0
其中cl为参加课程lec所对应的所有班级集合,lc为班级c所要上的所有课程集合。

1(班级c的课程l在时间t开设)
xclt=0(班级c的课程l不在时间t开设),即所有班级这门课
程无冲突。

对于每个教师任何时刻只能参加一次授课,约束模型与班级约束相似,只是一次授课只有一个教师,冲突检测只需对某个教师所授所有课程集合进行统计即可。

教学资源的约束,要求任何一个时刻作何一种类型的教学资源安排量不可超过学校拥有该类资源的总量;一个授课的安排要求该教学班级人数不可超过教室(或者其他教学资源)的容量,对于需要r类型教学资源,在t时刻授课的集合
lrt={l|rl=r,tl=t}|lrt|≤cr
其中cr表示r类型的教学资源总量。

3.时间模式
时间模式是一种上课时间的安排形式,由时间模式代码表和时间模式明细表两个表组成,其中时间模式代码表是主表,定义了时间模式的基本信息,时间模式明细表是从表,定义时间模式所对应的上课时间。

使用时间模式安排课表具有以下优点:
通过时间模式可以有效地安排课程,防止周学时较大的课程被安排在同一天或相邻的两天。

时间模式基本表中定义了优先级,可实现按照会优先级的顺序安排班级的课表,可避免随机安排班级课表所造成的课程上课时间的不合理问题。

时间模式的比较灵活,实现较容易,能满足学校实际上课的需求,只定义较为合理上课时间的组合即可。

4.基于遗传算法的排课算法
遗传算法的基本原理:首先采用编码方式将解空间映射到编码空间,每个编码对应问题的一个解(称为染色体)。

通过随机方法确定初始的一群个体(称为种群),在种群中根据适应度值或某种竞争机制选择个体,利用各种遗传操作算子(交叉、变异等)产生下一代,如此进化下去,直到满足期望的终止条件。

4.1染色体编码
根据排课的实际情况,使用十进制来对的个体进行验证码,每个个体利用m*26 的数组表示。

4.2初始种群生成
一个染色体就是一个可能的排课结果,是一个m*26 的数组,需处理的数据量较大,结构相对比较复杂。

因此,如果初始种群中个体的分布不好,将很容易使整个排课结果陷入局部最优而得不到好的排课结果,因此初始种群的生成对整个算法的影响较大。

将时间模式引入到遗传算法中进行初始种群的生成。

基本思想:首先确定班级的数量及所要上的课程;接着随机选取一个班所上的课程产生所需要的时间模式编号,判断是否冲突,不冲突,则在个体相应的上课时间上记录课程号,否则重新产生随机模式编号;真至所有个体的所有班级的课程都安排完成。

算法:gainit(t,w,n)
input:时间模式t,教学任务w,初始种群大小n
output:初始种群gai
步骤1:定义初始种群gai结构,确定班级个数m,种群大小n.。

步骤2:确定所有的上课班级及其所要上的课程cl,初始化
i=1,j=1,p=1。

步骤3:初始化种群中第i个个体。

步骤4:取第j个班的课程id(p),确定其周学时zxs。

步骤5:根据zxs随机生成时间模式,确定一上课时间。

步骤6:判断上课时间是否冲突,没有冲突,则将课程号id(p)记录于第i个个体的相应的时间位置。

否则,转到步骤5。

步骤7:判断第j个班的课程是否安排完成,如果没有完成,p=p+1,转到步骤4,直到j班的所有课程都安排完成。

步骤8:否则j=j+1,转到步骤4,直到所有班级的课程安排完成。

步骤9:i=i+1,直到所有的个体的初始化完成。

4.3适应度函数
根据排课的软约束条件定义适应度函数,适应度值越小,个体越优。

适应度由下面公式计算:f=a1×c1+a2×c2+a3×c3
其中c1为课程上课时间评价,c2 是一周多次课程的分布评价,c3教师课表分布评价。

a1、a2和a3为评价系数,三者和为1。

4.4选择操作
采取轮盘选择方法,根据个体适应度的大小,将种群中f值较小的个体以较大的概率保存到下一代中。

4.5交叉操作
在排课系统中,由于涉及众多约束和合法性问题,采用普通的交
叉操作往往会出现非法课表。

采用整个班级课表交叉的方式。

具体方法:按照交叉概率pc随机产生一个随机数s(s<m,m为班级人数),将双亲s位置对应的班级课表交换。

4.6变异操作
按照变异概率pm随机产生三个正整数的随机数r,s,l,其中:
r<m ;s<26; l<26,m为班级数量,则在第r个班级的s的位置上课程变异到l位置上。

5.结论
以20个班级,120课程,课程的周学时为2和4两种情况,基于matlab平台实现了排课系统。

结果证明本文的算法能较快地收敛,且能得到较为理想的课表。

本文提出了时间模式的概念,并将其与遗传算法结合,提出了新的基于遗传算法的排课算法。

在算法中利用时间模式求解了遗传算法的初始种群,且根据软约束设置了不同的课表的评价指标,避免了冲突,实现了课表的有效优化。

参考文献:
[1]杨宇.高校排课系统理论研究与开发---遗传算法在课表问题中的应用.北京:北京理工大学,2003.
[2]沈丽荣,陈明磊.基于遗传算法的高校排课系统研究.计算机
科学与技术,2006(112).
[3]膝姿,邓辉文,杨久俊.基于遗传算法的排课系统的设计与实现.计算机应用, 2007 (12).
[4]谢勇,郑金华.基于遗传算法的综合性大学排课系统研究.中国教育信息化, 2007 (11).
[5]张春梅,行飞.用自适应的遗传算法求解大学课表问题.内蒙古大学学报(自然科学版), 2002.。

相关文档
最新文档