[问与答] 最近在做课程表的排课,涉及很复杂的计算,有没有算法大牛能给点建议或者提示吗?

给学校开发自动排课的工具,会有很多规则限制,计算起来相当复杂。网上搜到了遗传算法,但是加了繁多的规则后计算就会很慢,可能计算 1 个小时都没有个完美的结果,所以特来请教一下 V 站大佬们有没有好的算法?

规则有很多,列出几个 K12 必须要有的:

  • 禁止排课:设置一些班级星期几的第几节课不能排某个课程,例如每天的前两节不能排体育课。
  • 必须排课:设置一些班级星期几的第几节课必须排某个课程,例如周一的第一节课必须排数学课。
  • 课时分散:保证课程在每天平均分配课时,使课程尽量分散不在同一天上 2 节课,例如该班语文课一周共有 5 个课时,就要把这 5 个课时分配到每天 1 个课时,如果是只有 3 个课时,则每个课要隔一天在排,即周一 /周三 /周五。
  • 教案齐头:保证每个教师的教的每个班级最好连着上课,例如教师 A 教 1 班和 2 班两个班级,如果 A 在周一 3 节教 1 班,则在周一 4 节教 2 班,尽量不要分成两天教,方便教师备课。

我不知道对这几个规则理解的是不是到位,但大致上差不多是这样的。

就这 4 个规则就很复杂了,用遗传算法要算好久,求帮助!

发表回复

您的电子邮箱地址不会被公开。