第7步——自动生成
创建课时之后,您需要把它们安排到时间网格上。编排课表在实践中是一个循环,而不是一次性的操作:
- 手动安排少量课时——固定不可更改的课时,或锁定强约束(定期外聘授课、考试、校准);
- 生成(全部或部分),让算法在约束条件下安排其余课时;
- 在边缘做调整——修正个别情况、移动某节课时、改变主意;
- 而且可以反复进行:随时重新生成(新增了课时,或者——在日历模式下——按日期区间、按班级批次或单位批次生成)。
也可以完全手动完成一切,不使用生成。手动安排(安排、移动、锁定,逐节或批量)有专门的页面:手动安排。整体流程参见模块概览。
本页介绍的是自动生成。
生成负责安排课时,不负责创建课时
生成算法处理的是已经存在的课时。它为课时寻找时段和教室。教师则是您已经指定给课程的那些:算法不会替换他们,也不会另行指派,只是拒绝他们没有空的时段。
因此需要遵循以下顺序:
- 为每个班级声明科目及其授课小时数:这就是课程,一行授课小时数;
- 在分配课时数并创建课时这一步,根据小时数创建课时——生成算法安排的正是它们;
- 然后再生成。
在创建课时之前就打开生成标签页,会遇到一个无法点击的按钮:没有任何东西可安排,检查界面会显示没有定义的课时。
生成按钮为什么是灰色的
按钮反映的是它正上方在检查中标签页上显示的诊断。分三种情况:
- 没有警示,或只有警告——按钮仍可使用,外观稍淡。警告(黄色)提示的是风险,而不是不可能;蓝色仅作提示。
- 存在阻断性警示(红色)——主按钮被禁用。仍可通过更多选项启动计算,但风险自负:生成算法看不到该警示所指出的问题,仍会生成一份课表,后果由您自行承担。最好还是先排除警示。
- 存在致命警示——按钮和选项菜单都被禁用。缺少了计算赖以进行的数据:没有课时、没有可用的班级(班级同时具有校区和课时才算可用),或者所使用的校区没有定义时间网格。尚未创建任何校区的学校就属于这种情况:没有校区,就没有可用的班级。
在最后这种情况下,统计项已设置的班级数量会变红。
每条警示都会在列表中清楚地标出名称,以及相关的班级、校区或教师。严重程度的分级及其解读,参见冲突与诊断;生成未能完成时的排查,参见诊断课表生成失败的原因。
适用范围
自动生成适用于周课表、周期课表和日历模式。在日历模式下,课时被安排在真实日期上,选项还可以限制要生成的日期范围。
准备工作
点击生成课表之前:
- 展开**生成**标签页(在日历课表上名为检查中),查看全局统计;
- 排除阻断性警示(红色)——参见上一节关于灰色按钮的说明;
- 查看警告(黄色)——它们不会阻断,但提示风险(可用时间限制过多、容量接近上限等)。
界面还会显示:
- 已创建课时数与已安排课时数,
- 已录入的授课小时数与教师的服务时间,
- 至少分配给一门课程的小组(用于发现被遗漏或闲置的小组)。
启动
点击生成课表。Omniscol会启动一个专用的并行计算环境。所需时间取决于课表规模、约束数量和所选的选项。学校一侧无需管理排队;初始化通常需要十秒左右,计算才真正开始。
计算上限为二十分钟,但实际上远远用不了这么久:约200门课程的课表通常在二十秒左右就能得出结果——算法几乎是瞬时的,耗时主要在机器的启动上——约600门课程则大约需要一分钟。对于接近这一上限的超大型学校,Omniscol团队可以应要求提高计算机器的性能。
生成选项
默认情况下,生成会安排所有已创建但尚未安排的课时。如果能改善课表,它也可以移动已经安排的课时。已锁定的课时保持原位。
选项菜单尤其可以:
- 在三种方式中选择教室的处理:默认为优化分配,或仅检查,或完全忽略教室;
- 只选择某些班级或某些科目;
- 将日历课表限定在目标日期窗口内;
- 忽略已分配的教室或当前的安排;
- 只分配教室,而不重新计算整个安排;
- 启动不做优化的快速生成;
- 当课表使用子时段时,允许在时间网格的子时段上灵活安排。
高级优化参数还可以用来减少空档、避免同一科目的两节课时排在同一天、均衡分布课时、设定小时数的最小值或最大值,或选择教师到校的天数。各国的做法不同:在法国,有些学校希望减少教师到校的天数;在另一些情况下,则可能相反,希望把这些天数分散开,例如为了在校内安排其他工作。
日历模式特有的选项
在日历模式下,高级选项可以把生成限定在比课表总范围更短的目标日期窗口内。这对只生成学年的一部分很有用:先试一个月、逐步构建一个学期,或接着处理已经准备好的时段。
另一个重要选项是针对班级的课日紧凑。默认情况下,生成算法倾向于在可用的日子里取得均衡;如果您只生成学年中的一部分课时,这种做法可能会人为地把课摊得很开。紧凑选项可以要求集中安排:
- 集中在窗口的开头;
- 集中在窗口的末尾;
- 对开头或末尾没有偏好,但尽量让课日保持紧凑。
日历课表上的重复:先排标准周
日历课表逐节为课时标注日期。然而有些培养项目并非如此:周一10:00的课,尽可能每周都会出现。班级通过重复课时来声明这一点;该班级的某门课程则通过不参与重复退出。系统不做任何猜测:没有这一声明,生成就把每节课时安排在各自的日期上,无论它们之间多么相似。分配规则是可选的:重复本身就有效;如果有明确的规则,则指明算法应尽量遵循的节奏。
课表中只要有一个班级是重复的,生成就分三个阶段进行。
-
**先排标准周。**课时被归并为若干系列。分两种情况:
- 课程带有课时分配规则:算法为了遵循该分配,把课时归并到各个系列中,这些系列可能带有明确的重复意愿;
- 否则,系列由系统推断:同一科目、同一小组、相似的节奏——时长和教师相近。 属于同一班内分组的小组保持分开,因为同时上课的两个小组要占用两个时段。单独一节同类课时不构成系列。
随后,每个系列在一个虚拟周中寻找自己的位置,就像在周课表上一样。生成会在这里读取规则所要求的节奏:规则的重复列表示每周两次或每三周一次;自动则让节奏根据课时数与教学周数的比值推算。一门每周上四次的课程,在标准周中占用四个时段。这个理论周已经考虑了日历方面的约束:固定的课时、特定日期或时段上的不可用情况。多个系列也可以依次占用同一个时段。
-
**在日历上展开。**找到的这一周随后在班级的日期区间内重复:班级有日期窗口时用它,否则用课表的整个时期。系列中的每节课时在此获得自己的周、日和时段。冲突按日期逐一检查;当准确的位置已被占用时,算法选择最接近的方案。
-
由普通的日历生成完成收尾,不再使用重复。标准周未能确定日期的课时不会被强行安排:这些课时并入非重复课时的批次,由它再来安排。
生成是如何工作的
了解生成算法的逻辑,有助于预判它会安排什么、会舍弃什么,以及如何引导它。它追求两个目标,并按此顺序:
- 全部排进去——绝对优先:在遵守硬约束的前提下,安排所有课时。
- 优化质量——全部排进去之后,减少空档、平滑各个课日、尽量满足偏好。
它从干净的状态开始(已锁定的课时保持原位,其余的重新安排),并从最难的课时到最容易的课时依次安排。难度主要取决于约束的严格程度:教师每周只有一个下午有空的课程,或者需要连续安排的四小时整块课时,都排在最前。难度相同时,它会交替安排各科目,并让较少见的科目先于较常见的科目,以便公平地分配各科目的机会。
无法全部排下时:取舍
如果课表约束过多、无法全部排下,生成算法不会放弃:它会选出需要搁置的最少一批课时,使其余课时能够排下,然后优化这份部分课表。被舍弃的课时留在待安排的便签栏中。由于排序已优先处理最难、最少见的课时,被放弃的往往是容易且数量多的课时:授课小时数很大的科目的第5个小时,先于稀有科目的唯一一个小时。
这些取舍的主动权仍在您手中:锁定绝不能移动的课时——它们优先安排,不会被舍弃——并尽可能放宽过度约束(开放时段、可用时间),让整体能够排下。
硬约束与软约束
并非所有约束都同等重要:
- 硬约束——绝不违反:占用(同一教师、班级、小组、教室或资源不能在同一时刻被用两次)、教师、班级、教室、课程或小组上标记为不可用(黑色)的时间范围、该时段没有空闲的教室或资源、休息日、已锁定的位置和对齐。
- 软约束——其余一切,生成算法可以违反,代价是一定的惩罚,以便把所有课时排下:标记为不希望(红色——应避免,但并非禁止)的时间范围,以及优化偏好(紧凑、均衡、按天集中……)。高优先级的约束比低优先级的权重更大,但没有一条是阻断性的。当这是避免舍弃任何课时的代价时,生成算法还会尝试个别放宽(在网格的子时段上安排……)。
只检查,不优化
快速生成选项(不优化)会运行一次简化的计算,主要回答一个问题:*能全部排下吗?*在投入完整优化的时间之前,可用它测试某个配置是否可行。
结果
- 绿色横幅:生成成功。所要求范围内的课时已经安排完毕,可以检查结果。
- 红色横幅:没有找到完整的解。计算出的最佳课表仍可查看,未安排的课时会出现在便签栏中,供您诊断。
参见诊断课表生成失败的原因。
合并或复制
生成成功后,Omniscol提供两个选项:
- 将结果合并到当前课表中(新的安排取代现有的安排)。
- 将结果保存到新课表中(当前课表保持不变,优化后的结果成为一份新课表)。
如果您打算以后重新生成(例如逐步构建),请不要合并:否则已经安排的课时会成为新一轮生成的起点。
重新生成前锁定课时
对已经安排的课时,使用位置锁将其锁定。下一次生成不会移动它,而是围绕它调整其他课时。这很适合固定“不可更改”的课时(固定的外聘授课、已定日期的考试、手动校准……)。完整说明参见锁定课时:批量锁定、对诊断的影响(红色 → 橙色)、算法的行为。
将课表导出为JSON
按钮只导出当前课表,格式为JSON。这不是导入与导出中介绍的账户完整导出。
典型用途:
- 删除前保留草稿或方案的记录;
- 在重大调整之前归档中间状态;
- 在寻求支持时,把这份课表提供给Omniscol团队。
与学校账户的完整JSON导出一样,重新导入不是学校一侧可以自由使用的常规功能。
接下来
最后一步:发布课表。
操作步骤
启动自动生成
-
自动生成会在遵守数十项约束(可用时间、容量、对齐、专业教室类型、交替)的前提下,把课时安排到时间网格上。适用于周课表、周期课表和日历课表。
-
**检查生成标签页。**全局统计显示在这里:已创建与已安排的课时、已录入的授课小时数与教师的服务时间、阻断性警示(红色)、警告(黄色——提示但不阻断)。
-
**启动前先排除红色警示。**只要还有红色警示,生成就无法启动——除非通过“更多选项”菜单强制启动,但不建议这样做。黄色警告需要您自行权衡,但不会阻止生成。
-
按需设置生成选项:要分配的教室、仅检查或忽略;指定的班级或科目;不做优化的快速生成;忽略已分配的教室或当前的位置。在日历模式下,高级选项还可以限制所生成的日期窗口,并把课时集中在时期的开头、末尾,或不设偏好。
-
**点击生成课表。**处理在后台运行;界面显示生成的状态,结果可用时即可查看。
-
**对结果满意时保存。**课表就安排好了。下一步:检查可能存在的冲突,手动调整个别情况(参见手动安排),然后发布。
-
接下来:发布课表。