生成算法 / 课表自动生成算法
Omniscol的生成算法可以自动计算周课表、周期课表或日历模式课表中课时的安排。它会安排已创建但尚未定位的课时;如果能改进课表,也会调整已定位的课时;已锁定的课时则保持在原位。
工作原理
启动生成后,Omniscol会开启一个专用的并行计算环境。学校一侧无需管理任何排队;初始化通常需要十秒左右,之后才会看到最初的计算结果。结果取决于您录入数据的质量:校区、教室、教师、小组、授课小时数、可用时间和不兼容规则。约束越多或相互矛盾越多,生成耗时就可能越长,也可能只得到部分结果。
其引擎是一种蒙特卡洛神经符号元启发式优化人工智能,结合了随机搜索、符号化业务规则和约束评分。关键在于实际使用:生成算法专为约束很多的情形设计,遇到无法实现的情况会明确提示,而不是掩盖冲突。
硬性约束
生成算法会严格遵守会使课表无效的约束:
- 一位教师不能同时出现在两个地方;
- 一个班级不能同时上两节课,但以班内分组方式设置的小组除外;
- 标记为不可用的可用时间和约束会阻止课时的安排;
- 普通教室不能同时容纳两节课;
- 大教室只有在所设定的容量和班级数量上限内,才能同时容纳多节课;
- 专业教室、容量、设备资源和校区间通勤必须保持相互兼容;
- 已锁定的课时保持其位置。
优化约束
软性约束用来对已找到的方案打分并加以改进。它们不会被忽略,而是转化为扣分项,由生成算法设法降低。
常见示例:
- 教师、教室、课程、小组或班级的不期望可用时间或约束;
- 科目之间的教学不兼容规则,例如避免实验课排在对应的讲授课之前,避免在一节负担很重的课后紧接着上体育课,或者要求按教学进度的顺序排课;
- 避免同一个班级在同一天出现两次相同的科目;
- 每天或每周授课小时数的下限或上限;
- 各天课时安排的均衡;
- 减少班级和教师课表中的空档;
- 教师的到校天数,视学校或所在国家的惯例而定。
找到一个有效方案是第一步。随后对扣分项的优化,往往会成为计算中耗时最长的部分。
适用范围
- 周课表——可用。
- 周期课表——可用。
- 日历课表——可用,需要有带日期的课时和日期范围。
生成失败怎么办
如果没有找到完整的方案,Omniscol会保留计算得到的最佳课表,并把无法安排的课时留在未定位便签列表中。您可以查看这份部分课表,阅读诊断结果,并修正约束。
常见原因:
- 可用时间设置过严(某位教师没有任何符合条件的空闲时段),
- 教室不足,或没有可用的专业教室,
- 对齐设置不一致(对齐的小组之间授课小时数不同),
- 不兼容规则过多或过于严格,
- 班级的理论人数超过了所有候选教室的容量。
参见 诊断课表生成失败的原因。
强制安排某节课时
重新生成之前,您可以锁定某节课时的位置:生成算法将不再移动它,而是围绕它调整其他课时。这对固定“不可调整”的课时很有用(合同约定了时间的外部授课、已确定日期的考试等)。