排课问题分析摘要:本题要求我们对多约束条件的典型组合进行分析,求解,并作最优化处理。
基于此种原因,我们先对各个元素间的冲突做预处理,进行约束条件的规划,再通过matlab 软件将教室、教师、课程和时间间的约束条件统一化,构成R-T-C 表(详见附表),再将各个元素进行优先级的计算,从而根据排课的优化模型,求出最优解。
经过对所给的表格,数据的深入分析,我们可以得知,教师明显缺少,比如课程学时要求有160 个课时,然而教师能上的课时仅有116 个课时,所以开始排课时,不考虑教师,向教师中安排课程。
?由于同类课程最好不要放在一起,同时根据老师的需求和教室的开放时间进行分配,经过与我们实际的课表的排课情况的分析,比如隔一天排同一课,课程类别不同的课程不在同一时间上课,我们可以大致的排出一个按教室上课的表,即R-T-C 表。
通过对R-T-C 表的分析,发现有很多课没老师上和老师没课上的情况,我们就对其进行相应的,合理的调整。
最后发现还是老师要外聘。
将外聘14 名老师去上相应没人上的科目,具体情况见附表。
最后,我们得到了一张相对优化的,以教室为准的课表(详见附表),从而解决问题(1)的要求。
对于我们课表的安排,发现再没对晚自习有其他条件约束是不会对所排的课表有所影响。
关键词:排课问题组合规划多目标函数数据量化优先级一、问题重述对于有课程40门,教师共有25名,教室18间的条件下合理的安排课程表,而课程、教师、教室的具体属性及要求详见附表(表1,表2,表3)对于课表德编排,题目有如下规则:每周以5 天为单位进行编排;每天最多只能编排8 节课(上午4 节,下午4 节),特殊情况下可以编排10 节课(晚上2 节),每门课程以2 节课为单位进行编排,同类课程尽可能不安排在同一时间。
要求所要解决的问题:1. 请你结合实际情况建立数学模型,通过编程计算,给出较为合理的课表编排方案,分析你所给出的方案的合理性。
2. 如果不准晚上排课,排课结果是否有所变化,如何变化?3. 对教师聘用,教室配置给出合理化建议。
二、问题分析随着现代教学的改革及各项教育工程的实施,新的教育体制对课表的编排提出了更高的要求。
但现实生活中,排课问题屡屡皆是,小学如此,中学如此,大学更是如此,不仅科目多样,而且教室、老师多变,这使得排课问题往往是很令人费解的。
经过分析,排课问题就是的多资源组合问题,问题的求解就是找出各个元素间的对应关系。
进而将各个元素间的联系进一步确定,转化成一个可以量度其大小的值,从而确定优先级,而我们又将如何确定各元素间的关系,目标函数的确定?根据已有知识可以知道,本题主要分析的是建立一个排课的优化模型。
而它是一个在课程类别、教师编号、教师及时间上的一个四维空间模型,在各种约束条件下的组合规划问题,其实质就是解决各因素间的冲突问题。
在模型建立后,我们有根据什么参量得到排课的最优解。
三、基本假设模型假设:1、 学校的教师和教室资源及学生班结构在一个学期内不会有的变动2、 所有的教室都在同一个校区,且 1〜2节课的教室到3〜4节课的教室的路程不超过 10mi n3、 在一学期内,任课教师身体都非常健康,不存在因病因事缺课的情况4、 各种教学资源(课桌、多媒体、机房电脑)在一学期内都不会发生故障,影响上课5、 在上课期间,老师、学生都不迟到,不影响上课质量6、 当有3个课时时,我们当做2个课时处理,及3节连堂上符号说明:教室最大容纳量'四、问题的分析及模型的建立问题分析(1)从数学角度上讲,本题主要分析建立一个排课模型,而它是一个在课程类别、教师编号 教师及时间上的一个四维空间模型,在各种约束条件下的组合规划问题,其实质就是解 决各因素间的冲突问题。
在此为了简化处理,先从课程类别、教室编号入手,建立一个 关于C-R 的关系表,再采用化零为整的思路建立我们的目标函数一一优化模型,最后, 我们根据各因素对排课模型的优先度,求解出排课模型的最优解。
在对问题初始化分析时,我们发现课程类别、教室编号、教师、上课时间存在这么一个 对关系:1) 1 — 1的对应关系 2) 1 — n 的对应关系 3) n — n 的对应关系进而,我们再对它们之间的属性分析,根据它们间的联系求出一种相对合理的排课方案, 最后,对相关名词解教室利用率:释:上网查询及对 关资料的查阅, 们得知一天内 课效率最高的 上午8〜10,下 1〜3,故我们定 上午1〜2的听 效率为3,其余 附表。
充分利用教室 源,我们定义: 室禾I 」用率时间段效率:经上课总人数 相我听是午义课见为资教方案的合理性进行分析。
模型的建立经过分析,我们需将所有课程尽量合理的安排在一个星期内。
首先我们将一个星期划分为五天,记作1、2、3、4、5,将一天分为四个部分,记作1、2、3、4,进而,我们将得到一个5X4的矩阵。
其中,j=1、2、3、4、5分别表示星期一、星期二、星期三、星期四、星期五;i=1、2、3、4分别表示1〜2节课、3〜4节课、5〜6节课、7〜8节课。
即有:我们记作P (T R C)是一个T X R X C维的数列矩阵,表示T老师在R教室上C课,我们定义P (T R C) =1时,即老师、教室、课程三者都相互符合是记作1而P (T R C) =0时,即老师、教室、课程三者中有一项不符合记作0规定:A(TR)表示T老师到R教室上了一次课是,即2个节B(TR) 表示T老师到R教室上总课时约束条件:1) 每一个时间段都不能多于一个老师在一个教室上课,此时应满足的条件是:25P(TRC) 1 n N (N=1、2、3 …25)t 12) 每位老师在每一天不能同时对同一个班上上两次课,3) 某位老师在某一间教室上课时,安排的课就该在这间教室排完,此时应满足的条件是:当一位老师连续两天对同一个班上两次课以上的次数越少、课程安排在听课效率高的时间段次数越多和老师与老师之间的冲突(满意度)次数越少,此时定义:25 18 40Q= P(TRC)t 1 r 1 c 1同时有满足以上的约束条件,Q将取到最优值,即此时安排的课表最优化排课的预处理1) 同一教师在同一时间内不能安排两门课同一教室在同一时间内不能安排两门课同一时间内安排的课时总数不能大于教室的课时总数所提供的教室属性安排课程的所需教室属性一致2) 优化级的计算:考虑到课表的安排是为了按时保量的完成教学任务,而其影响因素有众多,这里我们主要考虑一下三种:1) 时间段效率2) 教室利用率3) 教师满意度所以我们对课表的安排原则将依据优先级的大小进行排课。
先对以上三个因素进行量化处理可得到:时间段效率:我们定义优先级的函数表达式为:D= W1 x X + x X2+ W3 x X J其中W W2 W3表示相应参数,可根据实际情况进行调整的通过上式,我们可以很容易得知上课的时间段效率、教室利用率、教师满意度越大,D 值就越大即优先级越大,就优先排课;反之,D值越小,优先级就越小,就相对后排课。
通过模型得到的T-R-C表(见附表),再根据优先级的排课,我们可得到一个相对优化的课表:这里就不一一罗列,其余详见附表。
模型的评价与改进优点:到了一种排课的方法,即将课程表按课时数撤分,再按没门课程的优先顺序依次放入课表中。
在考虑其他因素(某课程只能安排在固定的某时间段上课,教师只在固定时间段安排课程)的情况下,本模型便于进一步发展、完善(只需改变最优解的参数加相应限制就可解决)。
比起目前最相对合理的遗产法简单易懂很多。
缺点:有很多待改进之处,该算法的优先级只是根据经验常识来进行优先级安排课程,具有一定的非科学性,如果能根据一定的科学知识,对课程的优先级进行科学的评定,科学的地算出其优先级系数,再确定其优先级,会具有更好的合理性。
再解题过程中限制条件多,数据量大,过程相对较繁琐。
模型推广本模型有编程优化的模块,但排课表是人为因素较多,也是为了满足课程的安排过程中更人性化。
因此本模型适用于中小规模的排课,其主要限制因素是程序完善度不高, 如要进行推广,则必须增加程序的模块,使其更完善,相信改进完善后,即可更科学的实现大规模大排参考文献:[1] 数学建模(上册),成都电子机械高等专科学校,二零一零年三月[2] 数学建模资料一一最优化模型.pdf 2010.7[3] 回溯法一一2010.7[4] 贪婪法——/view/112297.html?tp=0_10 2010.7⑸一天的最有听课效率时间段—— 2010.7附表:表:教室属性:表4: T-R-C 表教室一周内课程安排教室一周内课程安排教室一周内课程安排教室一周内课程安排R17教室一周内课程安排程序附录: clear;C=[1 2 2 1 1 1 2 1 2 -1 1 3 1 2 -1教室一周内课程安排表6:外聘教师课程安排表:1 2 1 1 11 2 3 2 -12 2 4 2 -12 2 2 1 12 1 1 2 12 2 1 2 -12 2 1 1 13 3 3 2 13 24 2 13 3 2 1 -13 1 1 2 -13 2 1 2 -14 2 1 1 14 2 3 2 -14 3 4 2 14 2 2 1 14 1 2 2 15 2 1 2 15 2 1 1 -15 2 1 2 15 3 3 2 -15 2 4 1 16 2 2 1 -16 2 1 2 -16 2 1 2 -16 2 2 1 16 2 1 2 -17 3 1 2 17 2 1 1 -17 2 3 2 07 2 4 1 17 2 2 2 -18 3 1 3 08 2 1 3 18 1 1 3 18 2 3 3 -18 2 2 3 0 ];T=[1 8 4 4 1 4 0 1 0 42 -1 0 01 0 62 1 0 02 0 4 1 1 1 0 2 0 4 2 -1 0 0 2 0 6 2 0 0 03 04 2 1 0 03 8 3 5 -1 0 03 04 2 1 11 183 0 6 1 1 0 04 0 8 2 -1 9 04 0 4 2 0 0 04 0 6 1 -1 0 05 0 2 2 1 0 05 8 3 5 -1 23 05 0 4 2 1 0 06 0 4 2 -1 0 06 0 6 2 0 9 06 0 4 1 -1 0 07 0 4 2 1 0 07 0 6 2 -1 0 07 0 6 1 1 0 03 845 0 15 04 8 65 1 0 06 8 4 5 -1 0 0];R=[4 14 24 22 12 22 22 23 23 23 13 23 31 31 31 31 12 21 2];%Rt为教室与老师的关系Rt=zeros(25,18);for i=1:18for m=1:25for n=1:40if R(i,1)>=C(n,3)i1=C(n,1);if T(m,1)==i1||T(m,2)==i1 i4=T(m,4);switch (i4)case 1 if R(i,2)==1Rt(m,i)=1;endcase 2 if R(i,2)==2 Rt(m,i)=1;endcase 3 if R(i,2)==3 Rt(m,i)=1;endcase 4if R(i,2)==1||R(i,2)==3 Rt(m,i)=1;endcase 5if R(i,2)==2||R(i,2)==3 Rt(m,i)=1;endendendendendendendRt;%Rc为教室与课程的关系Rc=zeros(18,40);for i=1:18for n=1:40if R(i,1)>=C(n,3)&&R(i,2)==C(n,4) Rc(i,n)=1;endendendRc;%Tcfor m=1:25for n=1:40if T(m,1)==C(n,1)||T(m,2)==C(n,1)if T(m,3)>=2*C(n,2)q=T(m,4);t=T(m,5);switch qcase 1if C(n,4)==1 switch t case 1 if C(n,5)==1Tc(m,n)=1; end case -1 if C(n,5)==-1Tc(m,n)=1;if C(n,5)==1||C(n,5)==-1||C(n,5)==0Tc(m,n)=1;endendendcase 2if C(n,4)==2 switch t case 1 if C(n,5)==1Tc(m,n)=1; end case -1 if C(n,5)==-1Tc(m,n)=1; end case 0 ifC(n,5)==1||C(n,5)==-1||C(n,5)==0Tc(m,n)=1;endendendcase 3if C(n,4)==3 switch t case 1 if C(n,5)==1Tc(m,n)=1;end endif C(n,5)==-1Tc(m,n)=1;endcase 0if C(n,5)==1||C(n,5)==-1||C(n,5)==0 Tc(m,n)=1; endendendcase 4if C(n,4)==1||C(n,4)==3switch t case 1if C(n,5)==1Tc(m,n)=1;end case -1if C(n,5)==-1Tc(m,n)=1;endcase 0if C(n,5)==1||C(n,5)==-1||C(n,5)==0 Tc(m,n)=1;endendendcase 5if C(n,4)==2||C(n,4)==3switch t case 1if C(n,5)==1Tc(m,n)=1;end case -1if C(n,5)==-1Tc(m,n)=1;endcase 0if C(n,5)==1||C(n,5)==-1||C(n,5)==0 Tc(m,n)=1;endendendendendendTc;%在完全满足的情况下课程选择最优化的老师%ct说明行代表课程,列代表能上该课的老师编号%if 有相同编号的老师那针对该门课程进行求最优值,将值最大的老师放入相应课程中ct=[1 0 0;2 0 0;0 0 0;1 0 0;2 0 0;5 6 0;4 0 0;6 0 0;5 6 0;4 0 0;0 0 0;7 9 23;0 0 0;8 23 0;23 0 0;0 0 0;11 12 0;24 0 0;0 0 0;12 24 0;16 0 0;0 0 0;16 0 0;0 0 0;0 0 0;19 0 0;17 18 25;17 18 25;0 0 0;17 18 25;0 0 0;0 0 0;0 0 0;22 0 0;21 0 0;0 0 0;end end1 23 24; 1 23 24; 23 25 0; 23 0 0; ]; %具体实现 Ct1=zeros(40,1);% 用于存放最终值 %先判断只有一个老师上课的课程 for n=1:40 for nn=n+1:40 if length(Ct(Ct(n,:)~=0))==1 if nn~=n for u=1:3 if Ct(n,1)==Ct(nn,u) u1=Ct(n,1);% a1=n;% a2=nn;% % 判断老师编号相同 获取老师编号 获取课程号 获取课程号b1=T(u1,3)-2*C(a1,2);%b2=T(u1,3)-2*C(a2,2);% 计算老师课时与课程课时的差 计算老师课时与课程课时的差if b1<=b2if Ct1(a1)==0 Ct1(a1)=u1; end elseif Ct(a2)==0 Ct(a2)=u1; end endendif Ct(n,2)==Ct(nn,u) u1=Ct(n,1);% a1=n;% a2=nn;% % 判断老师编号相同 获取老师编号 获取课程号 获取课程号 b1=T(u1,3)-2*C(a1,2);% b2=T(u1,3)-2*C(a2,2);% 计算老师课时与课程课时的差 计算老师课时与课程课时的差if b1<=b2if Ct1(a1)==0 Ct1(a1)=u1; end elseif Ct(a2)==0 Ct(a2)=u1; endif Ct(n,3)==Ct(nn,u) % 判断老师编号相同 u1=Ct(n,1);% 获取老师编号 a1=n;% 获取课程号 a2=nn;% 获取课程号if b1<=b2if Ct1(a1)==0b1=T(u1,3)-2*C(a1,2);% 计算老师课时与课程课时的差 b2=T(u1,3)-2*C(a2,2);% 计算老师课时与课程课时的差 if b1<=b2if Ct1(a1)==0 Ct1(a1)=u1; end elseif Ct(a2)==0 Ct(a2)=u1; end end end end endif length(Ct(Ct(n,:)~=0))~=1 if nn~=nfor u=1:3if Ct(n,1)==Ct(nn,u) u1=Ct(n,1);% a1=n;% a2=nn;% % 判断老师编号相同 获取老师编号 获取课程号 获取课程号 b1=T(u1,3)-2*C(a1,2);% b2=T(u1,3)-2*C(a2,2);% 计算老师课时与课程课时的差 计算老师课时与课程课时的差if b1<=b2if Ct1(a1)==0 Ct1(a1)=u1; endelse if Ct(a2)==0 Ct(a2)=u1; endendendif Ct(n,2)==Ct(nn,u) % u1=Ct(n,1);%判断老师编号相同获取老师编号a1=n;% 获取课程号 a2=nn;% 获取课程号 b1=T(u1,3)-2*C(a1,2);%计算老师课时与课程课时的差 b2=T(u1,3)-2*C(a2,2);% 计算老师课时与课程课时的差Ct1(a1)=u1;endelseif Ct(a2)==0Ct(a2)=u1;endendendif Ct(n,3)==Ct(nn,u) % 判断老师编号相同u1=Ct(n,1);% 获取老师编号a1=n;% 获取课程号a2=nn;% 获取课程号b1=T(u1,3)-2*C(a1,2);% 计算老师课时与课程课时的差b2=T(u1,3)-2*C(a2,2);% 计算老师课时与课程课时的差if b1<=b2if Ct1(a1)==0Ct1(a1)=u1;endelseif Ct(a2)==0Ct(a2)=u1;endendendendendendendendendCt1;%T-R-C 优化[ 老师教室]TRC=[1 10;%1-32 18;3 18;6 2;%6-94 4;6 18;5 18;7 2;%12-2110 4;8 18;9 18;13 16;11 8;24 2;11 5;12 5;16 18;19 4;%26-2818 18;17 18;20 8;%33-3522 1;21 5;15 13;%38-4025 12;23 12;];%定义时间片%B周几上课时间段老师一周几节] B=zeros(26,4);%课程1 %课程1 B=zeros(10,4,20);n=1;for a=1:5a1=a;for b=1:2b1=b;for n=n+1:20B(1,:,n)=[a1 b1 1 2]; break end end end %课程2 n=1; for a=1:5 a1=a;for b=3:4b1=b;for n=n+1:20B(2,:,n)=[a1 b1 2 2];breakendend end %课程3 n=1;for a=1:5a1=a;for b=3:4b1=b;for n=n+1:20 B(3,:,n)=[a1 b1 3 3]; breakendendend%课程6n=1;for a=1:5a1=a;for b=3:4b1=b;for n=n+1:20 B(4,:,n)=[a1 b1 6 2]; breakendendend%课程7n=1;for a=1:5a1=a;for b=1:2b1=b;for n=n+1:20 B(5,:,n)=[a1 b1 4 2]; breakendendend%课程8n=1;for a=1:5a1=a;for b=1:2b1=b;for n=n+1:20 B(6,:,n)=[a1 b1 6 1]; breakendendend%课程9n=1;for a=1:5a1=a;for b=3:4b1=b;for n=n+1:20 B(7,:,n)=[a1 b1 5 2]; breakendendend %课程12 n=1; for a=1:5a1=a;for b=1:2b1=b;for n=n+1:20 B(8,:,n)=[a1 b1 7 2]; breakendendend %课程13 n=1; for a=1:5a1=a;for b=3:4b1=b;for n=n+1:20 B(9,:,n)=[a1 b1 10 3]; breakendend %课程14 n=1; for a=1:5a1=a;for b=1:2b1=b;for n=n+1:20 B(10,:,n)=[a1 b1 8 1];breakendendend %课程15 n=1; for a=1:5a1=a;for b=3:4b1=b;for n=n+1:20 B(11,:,n)=[a1 b1 9 2]; breakendendend %课程16 n=1; for a=1:5a1=a;for b=1:2b1=b;for n=n+1:20 B(12,:,n)=[a1 b1 13 2]; breakendendend %课程17 n=1; for a=1:5a1=a;for b=3:4b1=b;for n=n+1:20 B(13,:,n)=[a1 b1 11 2]; breakendendend %课程18 n=1; for a=1:5a1=a;for b=1:2b1=b;for n=n+1:20 B(14,:,n)=[a1 b1 24 3]; breakendendend %课程19 n=1; for a=1:5a1=a;for b=1:2b1=b;for n=n+1:20 B(15,:,n)=[a1 b1 11 2]; breakendendend %课程20 n=1; for a=1:5b1=b;for n=n+1:20 B(16,:,n)=[a1 b1 12 1]; breakendendend %课程21 n=1; for a=1:5a1=a;for b=1:2b1=b;for n=n+1:20 B(17,:,n)=[a1 b1 16 2]; breakendendend %课程26 n=1;for a=1:5a1=a;for b=3:4b1=b;for n=n+1:20 B(18,:,n)=[a1 b1 19 2]; breakendendend%课程27n=1;for a=1:5a1=a;for b=3:4b1=b;for n=n+1:20B(19,:,n)=[a1 b1 18 2]; break endendend%课程28n=1;for a=1:5a1=a;for b=3:4b1=b;for n=n+1:20B(20,:,n)=[a1 b1 17 2]; break endendend%课程33n=1;for a=1:5b1=b;for n=n+1:20B(21,:,n)=[a1 b1 20 2]; break end endend%课程34 n=1;for a=1:5a1=a;for b=1:2b1=b;for n=n+1:20B(22,:,n)=[a1 b1 22 2]; break end endend %课程35 n=1; for a=1:5 a1=a;for b=3:4b1=b;for n=n+1:20B(23,:,n)=[a1 b1 21 2]; break end endend %课程38 n=1;for a=1:5a1=a;for b=1:2b1=b;for n=n+1:20B(24,:,n)=[a1 b1 15 1]; break end endend %课程39 n=1; for a=1:5 a1=a;for b=3:4b1=b;for n=n+1:20B(25,:,n)=[a1 b1 25 2]; break end endend %课程40 n=1; for a=1:5b1=b;for n=n+1:20B(26,:,n)=[a1 b1 23 2]; breakendendend%判断B 中同一时间同一教室的情况z=1;for i=1:26i1=i;for n=1:20n1=n;for ii=1:26for iii=ii+1:26for nn=1:20for nnn=nn+1:20ifB(ii,1,nn)==B(iii,1,nnn)&&B(ii,2,nn)==B(iii,2,nnn)%if TRC(ii,2)~=TRC(iii,2)%for w=1:B(i1,4,n1)% for z=z+1:26 Q(z,:,w)=B(i1+1,:,n1);% 相应个数endendendendendendendendendend 判断星期时间段相同判断教室相同取出相应将面包片取出。