在描述算法之前我们把一些概念先讲清楚。在这里我们把从行政角度分的班叫自然班,把在同一个教室上课的班叫做排课班。在大学里有些公共课是几个排课班通过多媒体来一起上的,我们把这个排课班的总和叫做公共班。班级、教室、教师、课程都维护着自己的一张课表。对课表的每个表元(如星期一的第一节课)在这里称做时间片。

基于时间片优先级排课算法以排课班为单位,围绕着各对像(自然班、教室、教室)的时间表选择合适的时间片。

<!--[if !supportLists]-->1.<!--[endif]-->算法流程图

<!--[if !vml]--><!--[endif]-->

<!--[if !supportLists]-->2.<!--[endif]-->算法的伪代码描述

输入:教师(teacher1,teacher2,…………….teachern)

教室(room1,room2,…………………roomn)

班级(class1,class2,………………….classn)

课程(course1,course2,………………coursen)

各教师、教室、班级、课程时间片的优先级

排课班(schudel_class1,schudel_class2………schudel_classn)

输出:已经排好课表的教师、教室、班级

Procedure schudeling(teacher,room,class,course,schudel_class,public_class)

//初始化一张空的时间表,对该时间表的每个时间片的优//先级初始化为高级

Init Time_table

//对排课班进行处理

For every schudel_class do:

If(!Check_Have_despose(schudel_class)) //假如该排课班尚未排课

Begin:

Time_table=Time_table & get_all_class_time_table(schudel_class)

Time_table=Time_table & get_room(schudel_class);

Time_table=Time_table & get_teacher(schudel_class);

Course=get_course(schudel_class);

//假设只有两节连堂及三节连堂那种课

Int iCount2=0;//那门课两节连堂的次数

Int iCount3=0;//那门课三节连堂的次数

//得到课程每周的课时数

Int course_count=get_couse_count(Course);

//得到每周的连课情况

Parse_couse_count(course_count,&iCount2,&iCount3);

//根据iCount2,iCount3,以及Time_table为该排课班选择N个

//(N=iCount2+iCount3)适当的时间片,保存在CPoint变量中

CPoint po;

LList<CPoint>* cp

Int priority[7]=0;

//得到每天的优先级的总和

Loop:I=0 until I=6 do:

Loop: J=0 until J=6 do:

Begin:

Priority[I] =Priority[I]+ Time_table.time_piece[I][j]

End Begin

//得到优先级总和最大的那天,我们认为那一时间最闲

//适宜安排课程

int number=get_number(priority[7]);

BOOL fail

While iCount2>0 do:

Begin:

fail=Get_Time_Pieces(2,&number,po);

if(!fail) then do

begin:

iCount2--;

cp->append_list(po);

end begin

else

break;

End Begin

While iCount3>0 do:

Begin:

fail=Get_Time_Pieces(3,&number,po);

if(!fail) then do:

begin:

ICount3--;

Cp->append_list(po);

End begin

Else

Break;

End Begin

//根据*cp的数据及schudel_class的数据对schudel_class中的自然班,所得到的教室,

// 老师的课表进行回写

if(!fail) do

WriteBack(schudel_class,cp);

Else then

RollBack(schudel_class,cp);//把先前选好的教室,老师给”擦除”掉

End Begin

End Schudeling

算法里面有到的一些函数解释:

BOOL check_for_dispose(schudel_class):以排课班为参数,判断该排课班是否已经排好课,排好了返回treu,否则返回false

‘&’操作:该操作是对两个课表的运算,返回一个新课表;得到的课表的时间片为所运算的课表对应时间片的较小值

CTime_table& get_all_class_time(schudel_class):以排课班为参数,得到该排课班所有自然班课表的&,返回得到的新课表

CTime_table& get_room(schudel_class):以排课班为参数,为该排课分配所有合适的教室,并把所得到的教室的课表求&,返回新课表

CTime_table& get_teacher(schudel_class):以排课班为参数,为该排课班选择一合适的教师,并返回该教师的课表

Ccourse get_course(schudel_class):以排课班为参数,得到该排课班的课程,并返回之

Int get_course_count(Ccourse):以课程为参数,得到该课程每周所需上的课时数,并返回之

Parse_course_count(int&,int&,int&):分析get_course_count所返回的数值,把该数值以2节连堂和3节连堂分开(在这里假设只有2节连堂和3节连堂两种情况)

Int GetNumber(int*):传进一整型数组,得到该整型数组中的最大值的下标,并返回之

WriteBack(schudel_class,Llist<CPoint>*):根据Llist<CPoint>* 中的时间片值,更新public_class中的教师,班级,教室的时间表信息

RollBack(schudel_class,Llist<CPoint>*):擦除前面步骤在排课班、教师、班级、教室中写下的数据

计算机排课是个复杂的过程,在数据量大,约束条件多的条件下,通过人工干涉达到合理排课是非常重要的。人工干涉包括在排课前的一些数据输入工作,人工进行些预排课,排完课后对课表进行适当的调课。

转载于:https://www.cnblogs.com/yundesme/archive/2007/03/01/660807.html

基于时间片优先级排课算法描述相关推荐

  1. 通用高校排课算法研究----3.基于时间片优先级排课算法

    3 基于时间片优先级排课算法描述与分析 排课问题实质上是时间.教师.班级.教室.课程这五维关系的冲突问题,要合理的解决这个问题首先要了解排课中的一些基本原则以及排课的一些基本要求. 3.1排课中的基本 ...

  2. 基于遗传算法的排课算法思路

    摘自毕业论文<基于微服务的智能教学质量管理平台的设计与实现> (1)问题描述 课程编排(排课)是平台的核心功能.排课问题被国外专家证明为属于NP完全问题,本质是求出满足一定软硬约束下的教学 ...

  3. 通用高校排课算法研究----前言

    1   绪 论 1.1课题背景与研究意义 1.2课题的应用领域 1.3 课题的现状 1.4解决NP问题的几种算法及其比较 2   目前流行的几种排课算法的介绍 2.1. 自动排课算法 2.2 基于优先 ...

  4. python 排课算法_基于遗传算法的排课系统

    摘 要:随着高校的发展,在教务管理系统中使用的排课模型也变得越来越复杂,亟需一种适用于开发.重用及设计的方法.针对这种情况,本文给出了排课问题的数学模型,提出基于遗传算法解决方案.结果表明,该算法能比 ...

  5. 目前流行的几种排课算法的介绍

    通用高校排课算法研究----2 .目前流行的几种排课算法的介绍 2   目前流行的几种排课算法的介绍 2.1. 自动排课算法 1 .问题的描述 我们讨论的自动排课问题的简化描述如下: 设要安排的课程为 ...

  6. 基于遗传算法的排课设计

    https://github.com/chunxi-alpc/CoursesScheduleGA 问题描述 在排课问题中,我们的主要任务是将班级.教室.课程.教师安排在一周内且不发生时间冲突.据此,做 ...

  7. 眼下流行的几种排课算法的介绍

    通用高校排课算法研究----2 .眼下流行的几种排课算法的介绍 2   眼下流行的几种排课算法的介绍 2.1. 自己主动排课算法 1 .问题的描写叙述 我们讨论的自己主动排课问题的简化描写叙述例如以下 ...

  8. 请用java写教务系统的排课算法

    写排课算法有很多种方法,下面给出一种基于贪心算法的实现方法. 首先,要获取所有课程.教室.教师.时间等相关信息,将其存储在程序中. 然后,可以通过以下步骤实现排课: 选择一门课程: 遍历所有的教室,找 ...

  9. 广州大学软件方向综合课程设计报告(专业课程数据库系统,模拟一个学期选课退课)带智能排课算法(遗传算法)

    广州大学软件方向综合课程设计目录 序章 第一章 系统需求简介 1.1 需求分析 1.2 数据结构需求分析 1.3系统功能设计 第二章 需求描述 2.1 数据流图 2.2 数据字典 第三章 概念设计 3 ...

最新文章

  1. PanoNet3D:一个基于激光雷达点云语义和几何理解的3D目标检测方法
  2. Mysql数据库“Communications link failure due to underlying exception”问题
  3. 区块链BaaS云服务(15)复杂美chain33
  4. 深入学习__doPostBack函数
  5. 浏览器打印设置横向打印_爱普生打印机无线连接设置
  6. 前端学习(2237):react实现疫情数据
  7. Leetcode--1019. 链表中的下一个更大节点(java)
  8. linux内核模块签名,linux内核模块签名
  9. 从汇编来看i++与++i
  10. html5的video怎么把里面的控制器移出来_电动车突然不走了,但控制器和转把没坏,但车走电,这是怎么回事...
  11. FTP文件同步(java版)
  12. win2008服务器系统玩红警,win8系统电脑下不能兼容红警2游戏的解决方法【图文】...
  13. VR 与 AR 开发实战
  14. Tcp Daytime获取客户端
  15. setenv设置环境变量_setenv命令教程在Linux中添加,删除和更改环境变量
  16. YUV420SP/YUV420P
  17. 【论文阅读笔记】Lightweight Image Super-Resolution with Enhanced CNN
  18. 面试java工程师的自我介绍
  19. 某电信运营商客户是否会流失的预测分析
  20. rman备份脚本 发送邮件通知

热门文章

  1. 装修最不能省钱的地方
  2. 爱奇艺Q1营收83亿:日均会员数1.29亿 运营利润六个季度连增
  3. 计算机bios的作用是什么意思,电脑BIOS是什么? 又有什么作用呢? BIOS的详细翻译就在这里!...
  4. Redis和Mongodb应用场景研究
  5. 腾讯网关TGW基础原理入门
  6. H3C--IBGP对等体--EBGP对等体 OSPF引入BGP路由实验(带实验代码)
  7. 01、freecplus框架简介
  8. 《阿里巴巴 Android 开发手册》(三)
  9. php_extension moodle,[转载]PHP  Moodle二次开发
  10. 用STM32单片机ADC+NTC热敏电阻采集温度的设计思路 | 附参考电路