前陣子在開發排課系統中,遇到了很多難點,一直排不出來,然後項目就一直死在那裡了。最近抽了點時間想再拿出來弄弄,可難點依舊,現在遇到的最大問題就是他們的子產品化課程的設計。
一、相關定義描述
1.子產品化課程:指一個學期内通過一定周數内完成的若幹個分階段子產品的課程。
2.子產品化課程授課方式:子產品化課程通常會有一個實訓教室和最多三個教師授課,其中一個是主任老師,其餘1-2位是輔助老師,也可以沒有輔助老師,但是必須有主任課老師。
3.子產品化課程沖突:教師同時上兩門課,實訓場地隻能一個班級上或者是指定幾個班級上。
4.排課流程:
1.名單錄入(老師、教室、課程、班級)->2.1排課特征錄入(老師、教師)
->2.2排課時間限制錄入(老師、教室、課程、班級、子產品課程)
->3.安排教學計劃(根據班級安排課程、老師、教室)
二、問題描述及現有解決思路
假如有子產品課程A,B,C,D,E,F,一學期共有18周,一周上兩門子產品課程
A課程完成教學周期為:6周,每周上課節數為12節
B課程完成教學周期為:6周,每周上課節數為12節
C課程完成教學周期為:2周,每周上課節數為12節
D課程完成教學周期為:8周,每周上課節數為12節
E課程完成教學周期為:8周,每周上課節數為12節
F課程完成教學周期為:6周,每周上課節數為12節
拆分周次算法示意:以下數字代表的是子產品化課程的周數
示例1:
2 6 8 8 6 6
8 8(2 6 6 6) 先求一組中相同課時數的課程
2 6-2(4 6 6) 取最小值和最大值拆分
4 6-2 6-2 剩下三個需兩兩拆分
4 4
示例2:
5 6 7 8 10
5 10-5 (6,7,8,5)
5 8-5 (6,7,3)
3 6-1 7-2
5 5
示例3:
3 3 4 4 5 5 12
3 3 (4 4 5 5 12)
4 12-4 (4 5 5 8)
4 8-4 (5 5 4)
4 5-2 5-2
3 3
如果不檢測老師和教室沖突,那麼上述算法正好得到完成拆分周次。但現實中就不得不再去檢測老師沖突和實訓場地沖突,那麼就勢必就得把拆分好的課程再回溯拆分了,上例課表中,若:E課程在1-8周存在沖突,若第7周中有沖突(該課程的老師在其它處已經上課),那麼就必須再重新安排到另外周次了,此時問題就出現了,拆分比想像中的要難很多,如果回溯将第二次以後課調換,使其後面正好安排沒沖突,那麼問題也就不會難了,可關鍵是如果和後面調換課程,又存在了沖突怎麼辦?是不是得再重新拆分周次了?
上次示例是排課一種,算法上感覺已經很難實作了,事實上在實際中又會遇到其它情況,比如:
A課程完成教學周期為:6周,每周上課節數為24節
以上24節課的其實就是上兩門子產品課程一樣
還有一種更複雜的情況:假如我一周要安排三門子產品化課程的時候又怎麼處理?問題感覺越來越複雜了!
本文轉自 netcorner 部落格園部落格,原文連結: http://www.cnblogs.com/netcorner/archive/2011/11/02/2232478.html ,如需轉載請自行聯系原作者