FAQ——生成算法的运行机制

关于自动生成引擎运行机制的常见问题。算法本身的说明请参见 生成算法;具体操作请参见 自动生成。

生成算法适用于哪些类型的课表?

适用于周课表、周期课表和日历模式的课表。在日历模式下,课时安排在真实日期上,生成选项中包含日期范围。

算法是如何运作的?

Omniscol在后台启动一次生成计算。算法会评估待安排的课时、已声明的约束以及生成偏好。结果主要取决于数据质量:授课小时数、教师、教室、小组、可用时间、不兼容规则以及跨校区约束。

每次生成都会启动一个专用的并行计算环境。学校一侧无需管理任何排队;初始化通常需要十秒左右,之后才开始实际计算。在 课表管理 模块中,生成课表 按钮用于启动计算、跟踪其状态并检查结果。

该引擎是一种神经符号蒙特卡洛元启发式优化AI:随机搜索、符号化约束和分数的逐步优化。它并不保证在一组不可能满足的约束上取得成功;这种情况下,Omniscol会返回诊断结果。

一次生成需要多长时间?

时长取决于课表的规模、课时数量、约束数量以及所选的选项。作为参考量级:一所约有550名学生、45名教师、16个班级且可用时间很充裕的初中,在数据一致的情况下,不到一分钟即可得到一份完整的课表,几乎没有或完全没有空档。更密集、约束很多或带有高开销优化的情形,耗时会明显更长。

生成算法会满足所有约束吗?

硬约束会被严格满足:

  • 同一时刻一位教师只能在一处;
  • 一个班级不会重复安排,班内分组的小组除外;
  • 可用时间和标记为不可用的时段;
  • 普通教室同一时间只被一个课时占用;
  • 大教室只在其容量和班级数量的限制内使用;
  • 专业教室、容量、物资资源以及跨校区的路程均相互兼容;
  • 已锁定的课时保持原位。

软约束(不希望的可用时间、偏好、教学权重、每日均衡、到校天数、课表中的空档)会尽力优化。它们会产生罚分:算法寻找罚分累计最少的方案,但如果这是与硬约束兼容的最佳折中,也可能保留一部分罚分。

生成失败怎么办?

找不到完整的解时,Omniscol会返回已计算出的最佳课表,并把未安排的课时留在便签栏中。这份部分课表仍可查看,以便了解哪些已经安排,然后再修正约束或手动重新安排部分课时。最常见的原因见页面 诊断课表生成失败的原因。

可以手动固定某个课时的位置吗?

可以,在手动安排课时之后,通过锁定该课时实现。再次生成时,算法不会移动已锁定的课时,而是围绕它调整其他课时。这对固定不变的课时很有用(日期固定的外部授课、已定日期的考试)。

为什么生成算法不提供多个方案?

算法按已声明的约束和偏好进行优化,并返回找到的最佳方案。如果想得到多个方案进行比较,请在每次生成前复制课表,并在两次运行之间略微调整约束或权重。

生成算法会考虑已登记的缺勤吗?

生成算法作用于结构性课表,与缺勤无关。缺勤在之后的 缺勤管理 模块中处理(参见 缺勤管理模块概览),它会影响已发布课表的显示以及 仪表盘的统计(不影响底层结构)。

有意保留的冲突与阻塞性冲突

并非所有冲突都一样:

  • 非阻塞性冲突——如果是有意为之,可以保持现状(例如,某间教室显示的人数超过容量,因为已知所有报名者不会全部到场)。警告仍会显示,但不会阻止操作。
  • 阻塞性冲突——会导致自动生成无法成功(没有兼容的教室、对齐设置不一致等)。只要这些冲突仍然存在,生成课表按钮就保持禁用。

参见 冲突。

另请参阅