给学校开发自动排课的工具,会有很多规则限制,计算起来相当复杂。网上搜到了遗传算法,但是加了繁多的规则后计算就会很慢,可能计算 1 个小时都没有个完美的结果,所以特来请教一下 V 站大佬们有没有好的算法?
规则有很多,列出几个 K12 必须要有的:
- 禁止排课:设置一些班级星期几的第几节课不能排某个课程,例如每天的前两节不能排体育课。
- 必须排课:设置一些班级星期几的第几节课必须排某个课程,例如周一的第一节课必须排数学课。
- 课时分散:保证课程在每天平均分配课时,使课程尽量分散不在同一天上 2 节课,例如该班语文课一周共有 5 个课时,就要把这 5 个课时分配到每天 1 个课时,如果是只有 3 个课时,则每个课要隔一天在排,即周一 /周三 /周五。
- 教案齐头:保证每个教师的教的每个班级最好连着上课,例如教师 A 教 1 班和 2 班两个班级,如果 A 在周一 3 节教 1 班,则在周一 4 节教 2 班,尽量不要分成两天教,方便教师备课。
我不知道对这几个规则理解的是不是到位,但大致上差不多是这样的。
就这 4 个规则就很复杂了,用遗传算法要算好久,求帮助!