主权项 |
一种排课算法,其特征在于,包括如下步骤:S1:排时间模型的建立:排时间模型包括约束条件和目标函数两个部分;设排时间模型的决策变量矩阵为X<sub>n×m</sub>,x<sub>ij</sub>是X<sub>n×m</sub>的元素,x<sub>ij</sub>的含义是:<img file="FDA0000709672610000011.GIF" wi="1274" he="165" />S1a:约束条件包括:1)周次数约束:设d<sub>i</sub>为第i个教学任务的周次数,则有:<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><munderover><mi>Σ</mi><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>m</mi></munderover><msub><mi>x</mi><mi>ij</mi></msub><mo>=</mo><msub><mi>d</mi><mi>i</mi></msub><mo>,</mo><mi>i</mi><mo>=</mo><mn>1,2</mn><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mi>n</mi><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>2</mn><mo>)</mo></mrow><mo>;</mo></mrow>]]></math><img file="FDA0000709672610000012.GIF" wi="1198" he="142" /></maths>其中m表示一周内时间片的总数,n表示教学任务的数目;m=t×s (3);其中t表示一周可排课的天数,s表示每天可用排课的时间片数;设M为时间片矩阵,m<sub>qp</sub>表示星期q的第p个时间片,q=1,2,…7,将星期一至星期七的时间片依次排列得到一维时间片矩阵M,该时间片矩阵M中共有m个时间片;2)时间片限制约束:设时间片限制约束矩阵为B<sub>n×m</sub>,b<sub>ij</sub>是B<sub>n×m</sub>的元素,b<sub>ij</sub>的含义是:<img file="FDA0000709672610000013.GIF" wi="1420" he="163" />则时间片限制约束表达为:x<sub>ij</sub>+b<sub>ij</sub>≤1,i=1,2,…,n,j=1,2,…m (5);3)教学任务冲突约束:设教学任务冲突矩阵为C<sub>n×n</sub>,c<sub>ik</sub>是C<sub>n×n</sub>的元素,c<sub>ik</sub>的含义是:<img file="FDA0000709672610000014.GIF" wi="1449" he="162" />则教学任务冲突约束表达为:x<sub>ij</sub>+x<sub>kj</sub>≤1,j=1,2,…,m,如果c<sub>ik</sub>=1 (7);4)时间片分配平衡约束:如果d<sub>i</sub>≤3,则如下:<maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><munderover><mi>Σ</mi><mrow><mi>j</mi><mo>=</mo><mrow><mo>(</mo><mi>h</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mo>·</mo><mi>s</mi><mo>+</mo><mn>1</mn></mrow><mrow><mrow><mo>(</mo><mi>h</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mo>·</mo><mi>s</mi><mo>+</mo><mn>1</mn><mo>+</mo><mn>2</mn><mi>s</mi></mrow></munderover><msub><mi>x</mi><mi>ij</mi></msub><mo>≤</mo><mn>1</mn><mo>,</mo><mi>h</mi><mo>=</mo><mn>1,2</mn><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><mi>t</mi><mo>-</mo><mn>1</mn><mo>,</mo><mi>i</mi><mo>=</mo><mn>1,2</mn><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><mi>n</mi><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>8</mn><mo>)</mo></mrow><mo>;</mo></mrow>]]></math><img file="FDA0000709672610000021.GIF" wi="1280" he="157" /></maths>如果d<sub>i</sub>≥4且d<sub>i</sub>≤t,则如下:<maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><munderover><mi>Σ</mi><mrow><mi>j</mi><mo>=</mo><mrow><mo>(</mo><mi>h</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mo>·</mo><mi>s</mi><mo>+</mo><mn>1</mn></mrow><mrow><mrow><mo>(</mo><mi>h</mi><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mo>·</mo><mi>s</mi><mo>+</mo><mn>1</mn><mo>+</mo><mi>s</mi></mrow></munderover><msub><mi>x</mi><mi>ij</mi></msub><mo>≤</mo><mn>1</mn><mo>,</mo><mi>h</mi><mo>=</mo><mn>1,2</mn><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><mi>t</mi><mo>,</mo><mi>i</mi><mo>=</mo><mn>1,2</mn><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><mi>n</mi><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>9</mn><mo>)</mo></mrow><mo>;</mo></mrow>]]></math><img file="FDA0000709672610000022.GIF" wi="1161" he="150" /></maths>S1b:目标函数如下:设时间片效益矩阵为W<sub>n×m</sub>,w<sub>ij</sub>是W<sub>n×m</sub>的元素,w<sub>ij</sub>的含义是第i个教学任务在第j个时间片上的效益;则目标函数为:<maths num="0004" id="cmaths0004"><math><![CDATA[<mrow><msub><mi>w</mi><mi>ij</mi></msub><mo>=</mo><mi>max</mi><munderover><mi>Σ</mi><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover><munderover><mi>Σ</mi><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>m</mi></munderover><msub><mi>t</mi><mi>ij</mi></msub><msub><mi>x</mi><mi>ij</mi></msub><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>10</mn><mo>)</mo></mrow><mo>;</mo></mrow>]]></math><img file="FDA0000709672610000023.GIF" wi="1282" he="147" /></maths>S1c:采用分枝定界算法求解上述排时间模型得到一组解,该组解为D条排时间结果;S2:排教室算法:S2a:输入D条排时间结果;S2b:设d=1;S2c:获取第d条排时间结果所需的教室类型;S2d:获取属于步骤S2c中教室类型的所有教室;S2e:将步骤S2d获取的教室进行初过滤:对步骤S2d获取所有教室进行搜索,去掉被占用的教室,留下没有被占用的教室;如果留下的教室不为0,则进入S2h;如果留下的教室为0,则输出对排时间结果的排教室失败,并进入下一步;S2f:令d=d+1;S2g:当d≤D时,返回步骤S2c,否则输出对排时间结果的排教室结果,算法结束;S2h:对初过滤后留下的教室进行再过滤,判断教室的容量与学生数量是否匹配:当教室的容量是第d条排课结果中教学任务对应的学生数量的C倍时,认为教室的容量与学生数量匹配,否则不匹配;去掉教室的容量与学生数量不匹配的教室,留下教室的容量与学生数量匹配的教室;S2i:判断留下的教室是否为0:如果留下的教室不为0,则进入S2k;如果留下的教室为0,则增加C的值并进入下一步;S2j:当C<C<sub>max</sub>时,返回步骤S2h;否则,输出对排时间结果的排教室失败,并返回步骤S2f;S2k:判断留下的教室是否大于1:如果留下的教室大于1,则选择容量最小的教室,并返回步骤S2f;否则选择留下的教室,并返回步骤S2f。 |